以前用 Docker 部署 MySQL 到云服务器,总感觉比二进制安装的访问要慢,不知道是不是错觉。
新的生产项目想用 Docker 来部署,要把数据及配置挂载到宿主机上,另外还要弄个一主多从,读写分离。有没有什么性能损耗或注意事项呢?用的阿里云服务器
1
liuliangyz 2021-11-30 09:09:53 +08:00 1
肯定有啊,数据库这东西能直接安装就直接安装,用什么 docker 呀
|
2
echo1937 2021-11-30 09:15:41 +08:00
一般开发测试环境用 docker ,生产很少主要是 IO 损耗。
|
3
ArJun 2021-11-30 09:16:20 +08:00
影响有限
|
4
Mindzy 2021-11-30 09:23:52 +08:00
非大型项目咋搞都行的
|
5
xiaoz 2021-11-30 09:24:46 +08:00
选择 host 网络,网络性能更好。
|
6
securityCoding 2021-11-30 09:30:38 +08:00
挂载目录做好备份
|
7
Quarter 2021-11-30 09:30:50 +08:00 via Android
之前我的调查结果是
1. 使用 Docker 安装 MySQL 会影响 MySQL 的读写速度,MySQL 作为一个依赖 IO 的数据库服务,在 Docker 中还是受到了影响到的 2. 不推荐使用 Docker 安装 MySQL ,在 Docker 中运行的 MySQL ,容易受到容器的影响,容器一旦崩溃出错,即使使用了持久化数据文件,也容易导致数据文件损坏,无法进行数据恢复 第一点我是可以理解的,第二点暂时还没遇到,但现在我已经不把 MySQL 放到 Docker 里面了 |
8
alanying 2021-11-30 09:31:41 +08:00
貌似阿里云的 POLARDB 这种大型生产商用数据库,给租户都是用容器隔离的。
数据库的性能瓶颈来自 IO ,二次虚拟化带来的 CPU 的性能影响其实对数据库影响不大 |
10
Veneris 2021-11-30 09:39:00 +08:00
对于大多数业务场景来说,业务有限,但仍不建议在 docker 中跑,docker 适合跑需要横向扩展得无状态的服务
|
11
Vegetable 2021-11-30 09:43:05 +08:00
都说的很有道理,但是 Linux 的 Docker 挂载目录有额外的 IO 开销吗?
|
12
killva4624 2021-11-30 09:45:17 +08:00
非生产环境随便弄,用商业云的话生产环境直接用 MYSQL 云实例吧。
|
13
BeautifulSoap 2021-11-30 09:55:52 +08:00 via Android 17
你们 ls 一个个说得好像言之凿凿确有其事一样的,但问题是 docker 容器的目录挂载没有性能损耗啊,不知道你们是根据什么得出的有性能损耗这个结论的
https://superuser.com/questions/1542169/does-a-docker-bind-mount-have-a-performance-penalty-on-linux 想了下,你们该不会是基于 mac 上的 docker 文件性能很拉跨得出的 linux 下 docker 也很拉跨的结论吧。。。 |
14
arrando 2021-11-30 10:09:43 +08:00
docker 容器的目录挂载没有性能损耗啊
|
15
liprais 2021-11-30 10:16:30 +08:00 via iPhone 1
大概损失 10%的 iops
|
16
tinkerer 2021-11-30 10:17:29 +08:00
|
17
yEhwG10ZJa83067x 2021-11-30 10:19:49 +08:00
我觉得你首先要考虑的是数据安全问题。丢失了可能就没有了
|
18
Muninn 2021-11-30 10:35:02 +08:00
之前有人研究过,有损耗但是损耗不大。但还有各种其他问题。开发测试随便,生产不建议。
|
19
nekoneko 2021-11-30 11:07:22 +08:00
linux 下无损耗
|
20
YUyu101 2021-11-30 11:10:00 +08:00
按理说除了网络之外应该没啥损耗的呀,但不见有很多人用
|
21
peyppicp 2021-11-30 11:19:04 +08:00
我司 mysql 数据库早就都放到 docker 上容易化了
|
22
VIVVACI 2021-11-30 11:38:50 +08:00
|
24
timethinker 2021-11-30 11:48:52 +08:00
容器化的目的是什么?更新频繁么?数据库这种软件要的就是稳定性,很少有频繁操作吧,那么容器话的目的是为了安装省事么?
|
25
yianing 2021-11-30 12:45:30 +08:00 via Android
@qwe520liao 资源和数据隔离,部署方便只是附带的
|
26
thevita 2021-11-30 14:34:44 +08:00 1
@tinkerer 很多同学看来对 docker 有很深的误解啊,docker storage 需要能支撑 分层( layer )的文件系统,这个层就对应是 docker image 那个层,修改都会在最新的一层里面, 有很多种可用的实现,但不管怎样,从原来来说,肯定是有损耗的,( io 可能要跨越多层,需要多次访存)
而 volume, 这个东西 一般使用 bind mount, 这个东西在 linux 下用的其实不少,问题不大 我觉着 mysql containerlize 最大的问题还是,和容器相容性多少有点不合适,毕竟不是这么设计的,随之而来很多运维和管理上会遇到一些 以前没有的问题等,或者需要自己搞写工具来解决,没明显收益话,划不来,mysql 面临的运维的问题仅仅 docker 是提供不了什么帮助的 最好, 我在非生产环境,和内部工具(团队协作等用的工具,访问量不大,也对数据安全要求不高)用 docker 里面跑 mysql 2 年+,没遇到什么什么坑,仅供参考,当时这么用也仅仅是为了方便,没有任何其他的考虑 |
27
Vegetable 2021-11-30 14:47:41 +08:00 2
面对大型项目时,MySQL 不仅需要独享物理机(或 ECS),甚至还要部署集群。这时候看起来,使用 docker 属于脱裤子放屁。
但是容器化的数据库非常适合小型项目。比如我最用的场景: 一个 docker-compose.yml 直接拉起完整的测试和预发布环境,包含了各种必要依赖,并把数据挂在宿主机,这时候容器化就非常必要了,因为这服务器上往往不只一套环境,提供的隔离和便利确实非常舒适。 |
28
twl007 2021-11-30 18:24:50 +08:00 via iPhone
放进去没问题 只是 docker 一升级就意味着你要重启整个 mysql 的集群
我不太认为把这种基础组件跟 docker 捆绑到一起能带来什么提升 |
29
lizytalk 2021-11-30 18:30:56 +08:00
@qwe520liao 和主机上的其他程序做隔离呀.
|
30
lizytalk 2021-11-30 18:35:00 +08:00
数据库跑在 docker 里基本没什么性能损耗吧. 虽然 docker 的 overlay 文件系统会比较慢, 但是只要用挂载的外部文件系统就好了. 然后网络之类也可以直接用 host.
|
31
Feiex 2021-11-30 22:11:03 +08:00
京东内部的弹性数据库,就是容器化的 mysql ,大规模使用起来也没什么问题
|
32
hefish 2021-11-30 22:20:35 +08:00
说的好像你们的业务都很繁忙似的,哈哈。。。
|
33
k9982874 2021-12-02 17:29:17 +08:00
测试环境 mysql 跑在 docker 里面,两个 mysql 容器,设置主从。
物理机重启主从就会坏掉。 |