V2EX = way to explore
V2EX 是一个关于分享和探索的地方
现在注册
已注册用户请  登录
Geekerstar
V2EX  ›  Docker

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

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

    以前用 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  
       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 容器的目录挂载没有性能损耗啊
    liprais
        15
    liprais  
       2021-11-30 10:16:30 +08:00 via iPhone   ❤️ 1
    大概损失 10%的 iops
    justrand
        17
    justrand  
       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 18: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   ·   我们的愿景   ·   实用小工具   ·   5915 人在线   最高记录 6543   ·     Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 · 28ms · UTC 02:02 · PVG 10:02 · LAX 19:02 · JFK 22:02
    Developed with CodeLauncher
    ♥ Do have faith in what you're doing.