提个疑问,生产环境中的数据库可不可以用 docker 容器化部署?

2024 年 11 月 18 日
 liyunyang
想问一下各位大佬,目前生产环境有 3 个数据库,oracle 、mysql 、pgsql ,


现在因为国产化服务器的要求,公司重新申请了若干台的国产化的系统 AnolisOS


现在要对所有服务器和数据库都要进行迁移,并且开始使用 k8s ,


想说数据库也使用容器化部署(数据挂载到宿主机的形式)。


服务器的资源很够,用容器化部署数据库会不会不合适?(目前暂不考虑数据库扩容等问题)
13086 次点击
所在节点    程序员
93 条回复
BeforeTooLate
2024 年 11 月 18 日
@arcaitan 肯定不是啊,其实这个问题 docker 官网写的很明确了,可以容器化数据库,但是数据盘不要放在容器里,做好挂载
guanzhangzhang
2024 年 11 月 18 日
很多人说这个就直接无脑说不行,那抛开容器,以下哪种最稳妥?
1. 物理机: 包管理安装,本地路径当数据目录
2. 物理机: 计算存储分离,iSCSI 挂载到机器上某个目录,数据目录这个目录
3.机器虚拟化,虚拟机上包管理部署 mysql ,本地路径当数据目录
4.机器虚拟化,虚拟机上包管理部署 mysql ,单独一个数据盘当数据目录
5. 物理机上 mysql 读写本地 ssd 盘当数据目录
6. 物理机上 docker -v 把一个路径当数据目录

请问以上哪个性能最差哪个性能最好。

讨论容器适不适合跑数据库要看场景说话,隔离的好,不调度容器,本地盘稳定 io 也高,为啥不可以。
总有人非要拿不好运维说话,那举例 mysql 数据损坏,常规 mysql 数据损坏下还不是 mysqld 起不来,自己用命令修复啥的,换到容器还不是 docker run -v mysql bash 进去用命令修。
littlewing
2024 年 11 月 18 日
数据还是在宿主机上,解决了什么问题?
v2er4241
2024 年 11 月 18 日
既然是信创,那数据库大概也需要国产化,但国产数据库对 docker 的支持并不好,甚至没有稳定的 arm64 版本的镜像。

再者,用国产化的数据库,都需要购买授权。一般是客户自己去采购,这点就不可控,客户一般都不会买 docker 版的。

所以,如果只是用 docker 容器化数据库,可以,只需要将数据挂载到宿主机就行,运维我反而觉得更简单了。

如果是要用国产数据库,那么要慎重考虑是否要 docker 了。
nxforce
2024 年 11 月 18 日
很多说不建议用 docker 的,都是看了几篇带节奏的公众号文章,就和下属布道禁用 docker 部署了。

客观上,docker 的确是会有一定的性能损失,包括 fork 进程的资源消耗,包括容器的网卡 pair 相关,这些都需要资源,正确配置后,例如用 host 网卡,挂载宿主机路径,在高负载的情况下大概也就 7%-10%左右的性能损失,大多数应用都吃不满机器的资源,但带来的运维收益却是巨大的。

特别是交付型的项目,整个项目一个 docker 镜像出去,实施那边只需要解决如何安装 docker 这个问题,运维剩下的工作都基本上不是问题了。
dododada
2024 年 11 月 18 日
一般来讲可以,没问题;

但是如果你们担心数据量上去了会有问题,业务问题或者性能问题,而且没有能力验证的话,要么不要冒险直接物理机,要么把验证周期拉长,得出结论之后再决定
Dragonphy
2024 年 11 月 18 日
我就是,单纯的 Docker run pg
codersdp1
2024 年 11 月 18 日
@yinmin 有经验的👍
456789
2024 年 11 月 18 日
可以,容器化很成熟了
tabc2tgacd
2024 年 11 月 18 日
我觉得没问题,我接私活就是这么干的。公司没这么搞,不过公司生产环境也不是我负责,所以与我无关了。
tf2
2024 年 11 月 18 日
这件事可以参考 https://i.imgflip.com/4qnhqj.png

最傻的回答是:没问题。因为这群人就是在单机上跑 docker 当虚拟机用

中间的回答是:有问题,因为 docker 集群对应的销毁 - 创建过程会导致高可用问题和数据一致性问题

聪明的回答是:没问题。因为 pod 是可以有状态和强行绑定的

但是要做到聪明回答,即便有一个 DBA+一个 SRE 也很难胜任。得既特定版本的 db+k8s 的懂哥才能搞好。还不如就一个 dba 直接物理机部署。
arcaitan
2024 年 11 月 18 日
我最近在学习 docker, 本地一开始没用 docker 的时候, 某个 app 用了 db
然后用 docker-compose build, 里面 app 也会调用一个 db

我的问题是, 我用 docker-compose up 之后的调用的 db, 和本地的 server 拉起的那个 db, 不是同一个(虽然他们 dbname, 结构都相同, 就是数据不同) , 这俩 db 是完全不同的两套安装目录吗?
R4rvZ6agNVWr56V0
2024 年 11 月 18 日
可以,但必要性不是很大。
cutiechi
2024 年 11 月 18 日
太可以了,这都 2024 年了
Jerry23333
2024 年 11 月 18 日
可以,数据一定要挂到本地,存算分离
zx900930
2024 年 11 月 18 日
k8s 下,有靠谱的 csi 的情况下,数据库全容器化没有任何问题。
有 operator 简化一些基础操作,平时遇到的问题和 bare metal 的数据库没有任何区别。
yinmin
2024 年 11 月 18 日
k8s 持久性存储的 io 有瓶颈,绝大多数的 k8s 持久存储都比 sata 还要慢很多,所以数据库不建议部署在 k8s 上。如果是本机 docker 是 OK 的,性能基本接近本机安装,维护也方便。
pkoukk
2024 年 11 月 18 日
没有极端的写入场景的话,没问题,和 k8s 的运维协调好资源限制
delock
2024 年 11 月 18 日
这个还真行,配置好数据一致以及容灾管理即可
yinmin
2024 年 11 月 18 日
接#57 如果必须在 k8s 上部署数据库,估算一下数据库的大小,然后为容器分配 2 倍以上的内存,例如:估摸着数据库总容量为 6GB ,就为容器分配 12GB 内存。容器刚启动时读盘稍慢些,跑一段时间后数据库都缓存在内存里,就不慢了。

这是一个专为移动设备优化的页面(即为了让你能够在 Google 搜索结果里秒开这个页面),如果你希望参与 V2EX 社区的讨论,你可以继续到 V2EX 上打开本讨论主题的完整版本。

https://v2ex.ih06.com/t/1090444

V2EX 是创意工作者们的社区,是一个分享自己正在做的有趣事物、交流想法,可以遇见新朋友甚至新机会的地方。

V2EX is a community of developers, designers and creative people.

© 2021 V2EX