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

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

  •  
  •   Geekerstar · 54 天前 · 3705 次点击
    这是一个创建于 54 天前的主题,其中的信息可能已经有所发展或是发生改变。

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

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

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

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

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

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

    数据库的性能瓶颈来自 IO ,二次虚拟化带来的 CPU 的性能影响其实对数据库影响不大
    makelove
        9
    makelove  
       54 天前
    @Quarter 按理说 mysql 这种文件格式应该是设计成了不受崩溃影响的吧,否则断电写了一半怎么办
    Veneris
        10
    Veneris  
       54 天前
    对于大多数业务场景来说,业务有限,但仍不建议在 docker 中跑,docker 适合跑需要横向扩展得无状态的服务
    Vegetable
        11
    Vegetable  
       54 天前
    都说的很有道理,但是 Linux 的 Docker 挂载目录有额外的 IO 开销吗?
    killva4624
        12
    killva4624  
       54 天前
    非生产环境随便弄,用商业云的话生产环境直接用 MYSQL 云实例吧。
    BeautifulSoap
        13
    BeautifulSoap  
       54 天前 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  
       54 天前
    docker 容器的目录挂载没有性能损耗啊
    liprais
        15
    liprais  
       54 天前 via iPhone   ❤️ 1
    大概损失 10%的 iops
    justrand
        17
    justrand  
       54 天前
    我觉得你首先要考虑的是数据安全问题。丢失了可能就没有了
    Muninn
        18
    Muninn  
       54 天前
    之前有人研究过,有损耗但是损耗不大。但还有各种其他问题。开发测试随便,生产不建议。
    nekoneko
        19
    nekoneko  
       54 天前
    linux 下无损耗
    YUyu101
        20
    YUyu101  
       54 天前
    按理说除了网络之外应该没啥损耗的呀,但不见有很多人用
    peyppicp
        21
    peyppicp  
       54 天前
    我司 mysql 数据库早就都放到 docker 上容易化了
    VIVVACI
        23
    VIVVACI  
       54 天前   ❤️ 1
    @VIVVACI 引用一下之前老哥发的 pdf 链接,看起来没有什么影响
    qwe520liao
        24
    qwe520liao  
       54 天前
    容器化的目的是什么?更新频繁么?数据库这种软件要的就是稳定性,很少有频繁操作吧,那么容器话的目的是为了安装省事么?
    yianing
        25
    yianing  
       54 天前 via Android
    @qwe520liao 资源和数据隔离,部署方便只是附带的
    thevita
        26
    thevita  
       54 天前   ❤️ 1
    @tinkerer 很多同学看来对 docker 有很深的误解啊,docker storage 需要能支撑 分层( layer )的文件系统,这个层就对应是 docker image 那个层,修改都会在最新的一层里面, 有很多种可用的实现,但不管怎样,从原来来说,肯定是有损耗的,( io 可能要跨越多层,需要多次访存)

    而 volume, 这个东西 一般使用 bind mount, 这个东西在 linux 下用的其实不少,问题不大

    我觉着 mysql containerlize 最大的问题还是,和容器相容性多少有点不合适,毕竟不是这么设计的,随之而来很多运维和管理上会遇到一些 以前没有的问题等,或者需要自己搞写工具来解决,没明显收益话,划不来,mysql 面临的运维的问题仅仅 docker 是提供不了什么帮助的

    最好, 我在非生产环境,和内部工具(团队协作等用的工具,访问量不大,也对数据安全要求不高)用 docker 里面跑 mysql 2 年+,没遇到什么什么坑,仅供参考,当时这么用也仅仅是为了方便,没有任何其他的考虑
    Vegetable
        27
    Vegetable  
       54 天前   ❤️ 2
    面对大型项目时,MySQL 不仅需要独享物理机(或 ECS),甚至还要部署集群。这时候看起来,使用 docker 属于脱裤子放屁。
    但是容器化的数据库非常适合小型项目。比如我最用的场景:
    一个 docker-compose.yml 直接拉起完整的测试和预发布环境,包含了各种必要依赖,并把数据挂在宿主机,这时候容器化就非常必要了,因为这服务器上往往不只一套环境,提供的隔离和便利确实非常舒适。
    twl007
        28
    twl007  
       54 天前 via iPhone
    放进去没问题 只是 docker 一升级就意味着你要重启整个 mysql 的集群

    我不太认为把这种基础组件跟 docker 捆绑到一起能带来什么提升
    lizytalk
        29
    lizytalk  
       54 天前
    @qwe520liao 和主机上的其他程序做隔离呀.
    lizytalk
        30
    lizytalk  
       54 天前
    数据库跑在 docker 里基本没什么性能损耗吧. 虽然 docker 的 overlay 文件系统会比较慢, 但是只要用挂载的外部文件系统就好了. 然后网络之类也可以直接用 host.
    Feiex
        31
    Feiex  
       54 天前
    京东内部的弹性数据库,就是容器化的 mysql ,大规模使用起来也没什么问题
    hefish
        32
    hefish  
       54 天前
    说的好像你们的业务都很繁忙似的,哈哈。。。
    k9982874
        33
    k9982874  
       52 天前
    测试环境 mysql 跑在 docker 里面,两个 mysql 容器,设置主从。
    物理机重启主从就会坏掉。
    关于   ·   帮助文档   ·   API   ·   FAQ   ·   我们的愿景   ·   广告投放   ·   感谢   ·   实用小工具   ·   980 人在线   最高记录 5497   ·     Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 · 29ms · UTC 21:12 · PVG 05:12 · LAX 13:12 · JFK 16:12
    ♥ Do have faith in what you're doing.