使用 Docker 部署 MySQL 对性能有没有损耗呢? - V2EX
V2EX = way to explore
V2EX 是一个关于分享和探索的地方
现在注册
已注册用户请  登录
Geekerstar
V2EX    Docker

使用 Docker 部署 MySQL 对性能有没有损耗呢?

  •  
  •   Geekerstar 2021-11-30 09:05:06 +08:00 8069 次点击
    这是一个创建于 1412 天前的主题,其中的信息可能已经有所发展或是发生改变。

    以前用 Docker 部署 MySQL 到云服务器,总感觉比二进制安装的访问要慢,不知道是不是错觉。

    新的生产项目想用 Docker 来部署,要把数据及配置挂载到宿主机上,另外还要弄个一主多从,读写分离。有没有什么性能损耗或注意事项呢?用的阿里云服务器

    33 条回复    2021-12-02 17:29:17 +08:00
    liuliangyz
        1
    liuliangyz  
       2021-11-30 09:09:53 +08:00   1
    肯定有啊,数据库这东西能直接安装就直接安装,用什么 docker 呀
    echo1937
        2
    echo1937  
       2021-11-30 09:15:41 +08:00
    一般开发测试环境用 docker ,生产很少主要是 IO 损耗。
    ArJun
        3
    ArJun  
       2021-11-30 09:16:20 +08:00
    影响有限
    Mindzy
        4
    Mindzy  
       2021-11-30 09:23:52 +08:00
    非大型项目咋搞都行的
    xiaoz
        5
    xiaoz  
       2021-11-30 09:24:46 +08:00
    选择 host 网络,网络性能更好。
    securityCoding
        6
    securityCoding  
       2021-11-30 09:30:38 +08:00
    挂载目录做好备份
    Quarter
        7
    Quarter &bsp;
       2021-11-30 09:30:50 +08:00 via Android
    之前我的调查结果是

    1. 使用 Docker 安装 MySQL 会影响 MySQL 的读写速度,MySQL 作为一个依赖 IO 的数据库服务,在 Docker 中还是受到了影响到的

    2. 不推荐使用 Docker 安装 MySQL ,在 Docker 中运行的 MySQL ,容易受到容器的影响,容器一旦崩溃出错,即使使用了持久化数据文件,也容易导致数据文件损坏,无法进行数据恢复

    第一点我是可以理解的,第二点暂时还没遇到,但现在我已经不把 MySQL 放到 Docker 里面了
    alanying
        8
    alanying  
       2021-11-30 09:31:41 +08:00
    貌似阿里云的 POLARDB 这种大型生产商用数据库,给租户都是用容器隔离的。

    数据库的性能瓶颈来自 IO ,二次虚拟化带来的 CPU 的性能影响其实对数据库影响不大
    makelove
        9
    makelove  
       2021-11-30 09:36:17 +08:00
    @Quarter 按理说 mysql 这种文件格式应该是设计成了不受崩溃影响的吧,否则断电写了一半怎么办
    Veneris
        10
    Veneris  
       2021-11-30 09:39:00 +08:00
    对于大多数业务场景来说,业务有限,但仍不建议在 docker 中跑,docker 适合跑需要横向扩展得无状态的服务
    Vegetable
        11
    Vegetable  
       2021-11-30 09:43:05 +08:00
    都说的很有道理,但是 Linux 的 Docker 挂载目录有额外的 IO 开销吗?
    killva4624
        12
    killva4624  
       2021-11-30 09:45:17 +08:00
    非生产环境随便弄,用商业云的话生产环境直接用 MYSQL 云实例吧。
    BeautifulSoap
        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 也很拉跨的结论吧。。。
    arrando
        14
    arrando  
       2021-11-30 10:09:43 +08:00
    docker 容器的目录挂载没有性能损耗啊
    F281M6Dh8DXpD1g2
        15
    F281M6Dh8DXpD1g2  
       2021-11-30 10:16:30 +08:00 via iPhone   1
    大概损失 10%的 iops
    yEhwG10ZJa83067x
        17
    yEhwG10ZJa83067x  
       2021-11-30 10:19:49 +08:00
    我觉得你首先要考虑的是数据安全问题。丢失了可能就没有了
    Muninn
        18
    Muninn  
       2021-11-30 10:35:02 +08:00
    之前有人研究过,有损耗但是损耗不大。但还有各种其他问题。开发测试随便,生产不建议。
    nekoneko
        19
    nekoneko  
       2021-11-30 11:07:22 +08:00
    linux 下无损耗
    YUyu101
        20
    YUyu101  
       2021-11-30 11:10:00 +08:00
    按理说除了网络之外应该没啥损耗的呀,但不见有很多人用
    peyppicp
        21
    peyppicp  
       2021-11-30 11:19:04 +08:00
    我司 mysql 数据库早就都放到 docker 上容易化了
    VIVVACI
        22
    VIVVACI  
       2021-11-30 11:38:50 +08:00
    VIVVACI
        23
    VIVVACI  
       2021-11-30 11:39:20 +08:00   1
    @VIVVACI 引用一下之前老哥发的 pdf 链接,看起来没有什么影响
    timethinker
        24
    timethinker  
       2021-11-30 11:48:52 +08:00
    容器化的目的是什么?更新频繁么?数据库这种软件要的就是稳定性,很少有频繁操作吧,那么容器话的目的是为了安装省事么?
    yianing
        25
    yianing  
       2021-11-30 12:45:30 +08:00 via Android
    @qwe520liao 资源和数据隔离,部署方便只是附带的
    thevita
        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 年+,没遇到什么什么坑,仅供参考,当时这么用也仅仅是为了方便,没有任何其他的考虑
    Vegetable
        27
    Vegetable  
       2021-11-30 14:47:41 +08:00   2
    面对大型项目时,MySQL 不仅需要独享物理机(或 ECS),甚至还要部署集群。这时候看起来,使用 docker 属于脱裤子放屁。
    但是容器化的数据库非常适合小型项目。比如我最用的场景:
    一个 docker-compose.yml 直接拉起完整的测试和预发布环境,包含了各种必要依赖,并把数据挂在宿主机,这时候容器化就非常必要了,因为这服务器上往往不只一套环境,提供的隔离和便利确实非常舒适。
    twl007
        28
    twl007  
       2021-11-30 1:24:50 +08:00 via iPhone
    放进去没问题 只是 docker 一升级就意味着你要重启整个 mysql 的集群

    我不太认为把这种基础组件跟 docker 捆绑到一起能带来什么提升
    lizytalk
        29
    lizytalk  
       2021-11-30 18:30:56 +08:00
    @qwe520liao 和主机上的其他程序做隔离呀.
    lizytalk
        30
    lizytalk  
       2021-11-30 18:35:00 +08:00
    数据库跑在 docker 里基本没什么性能损耗吧. 虽然 docker 的 overlay 文件系统会比较慢, 但是只要用挂载的外部文件系统就好了. 然后网络之类也可以直接用 host.
    Feiex
        31
    Feiex  
       2021-11-30 22:11:03 +08:00
    京东内部的弹性数据库,就是容器化的 mysql ,大规模使用起来也没什么问题
    hefish
        32
    hefish  
       2021-11-30 22:20:35 +08:00
    说的好像你们的业务都很繁忙似的,哈哈。。。
    k9982874
        33
    k9982874  
       2021-12-02 17:29:17 +08:00
    测试环境 mysql 跑在 docker 里面,两个 mysql 容器,设置主从。
    物理机重启主从就会坏掉。
    关于     帮助文档     自助推广系统     博客     API     FAQ     Solana     2817 人在线   最高记录 6679       Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 28ms UTC 13:31 PVG 21:31 LAX 06:31 JFK 09:31
    Do have faith in what you're doing.
    ubao snddm index pchome yahoo rakuten mypaper meadowduck bidyahoo youbao zxmzxm asda bnvcg cvbfg dfscv mmhjk xxddc yybgb zznbn ccubao uaitu acv GXCV ET GDG YH FG BCVB FJFH CBRE CBC GDG ET54 WRWR RWER WREW WRWER RWER SDG EW SF DSFSF fbbs ubao fhd dfg ewr dg df ewwr ewwr et ruyut utut dfg fgd gdfgt etg dfgt dfgd ert4 gd fgg wr 235 wer3 we vsdf sdf gdf ert xcv sdf rwer hfd dfg cvb rwf afb dfh jgh bmn lgh rty gfds cxv xcv xcs vdas fdf fgd cv sdf tert sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf shasha9178 shasha9178 shasha9178 shasha9178 shasha9178 liflif2 liflif2 liflif2 liflif2 liflif2 liblib3 liblib3 liblib3 liblib3 liblib3 zhazha444 zhazha444 zhazha444 zhazha444 zhazha444 dende5 dende denden denden2 denden21 fenfen9 fenf619 fen619 fenfe9 fe619 sdf sdf sdf sdf sdf zhazh90 zhazh0 zhaa50 zha90 zh590 zho zhoz zhozh zhozho zhozho2 lislis lls95 lili95 lils5 liss9 sdf0ty987 sdft876 sdft9876 sdf09876 sd0t9876 sdf0ty98 sdf0976 sdf0ty986 sdf0ty96 sdf0t76 sdf0876 df0ty98 sf0t876 sd0ty76 sdy76 sdf76 sdf0t76 sdf0ty9 sdf0ty98 sdf0ty987 sdf0ty98 sdf6676 sdf876 sd876 sd876 sdf6 sdf6 sdf9876 sdf0t sdf06 sdf0ty9776 sdf0ty9776 sdf0ty76 sdf8876 sdf0t sd6 sdf06 s688876 sd688 sdf86