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

数据库到底能不能部署在容器中?

  •  
  •   spr1ngs · 2023-02-08 16:31:56 +08:00 · 3600 次点击
    这是一个创建于 691 天前的主题,其中的信息可能已经有所发展或是发生改变。

    知乎的文章都是抄过来抄过去,还很老

    最根本的 决定能不能部署在容器中的原因是什么

    23 条回复    2023-04-17 10:00:05 +08:00
    scyuns
        1
    scyuns  
       2023-02-08 16:58:44 +08:00 via Android
    数据库可以部署到容器中,开发环境经常这样干。
    生产环境没有试过,开发摸不到线上的机器。
    建议问一下专业运维的意见。
    opengps
        2
    opengps  
       2023-02-08 16:59:31 +08:00
    能,不提倡。因为磁盘性能被打了一层折扣,当你 io 用的多的时候会明显慢,承载能力下降
    AS4694lAS4808
        3
    AS4694lAS4808  
       2023-02-08 17:06:44 +08:00
    主要还是考虑 I/O 效率和容器编排吧,dev 和 stage 环境用 k8s 部署集群那效率真是爽歪歪。
    但是生产不敢这么用,缩容扩容都得小心翼翼的。如果有能力从底层优化数据库,比如 AWS ,AZURE 的云平台,肯定是容器化数据库效率更高。或者使用类似 Mysql Operator 这样的插件管理,但还是有风险的。
    lambdaq
        4
    lambdaq  
       2023-02-08 17:10:08 +08:00
    有的数据库为了性能连文件系统都要用专用的。LZ 理解一下。
    loading
        5
    loading  
       2023-02-08 17:14:30 +08:00
    文件都挂载在外部,数据是安全的,主要就是 io 性能。
    如果是 redis 或者其他内存为主的,问题不大。
    Tinet
        6
    Tinet  
       2023-02-08 18:17:55 +08:00
    性能方面,如果数据库的数据是存放在 pvc 中的,而 pvc 的后端是腾讯云或者阿里云的云盘,那 IO 这块也没什么损耗,跟你在虚拟机上挂个云硬盘性能差不多。所以我觉得数据库运行在 k8s 中相比于直接运行在虚拟机上在公有云的场景下不存在什么性能问题。事实上我们公司的生产环境数据库早已经运行在 k8s 中了。
    运维方面,部署在容器和虚拟机上差别还是很大的,很多 dba 可能都还不太适应。
    长远来看,我认为会有越来越多的公司选择把数据库(有状态服务)运行在 k8s 中。DBA 也会越来越习惯于运维容器中的数据库。
    Illusionary
        7
    Illusionary  
       2023-02-08 18:21:53 +08:00
    我们非生产环境的数据库都是 K8s 部署,存储用 ceph ,备份用 PVC 快照

    生产环境用阿里云 RDS MySQL
    paranoiagu
        8
    paranoiagu  
       2023-02-08 18:22:42 +08:00 via Android
    为啥不能
    hhjswf
        9
    hhjswf  
       2023-02-08 18:44:58 +08:00 via Android
    @Illusionary 阿里的云服务万一也是部在容器呢
    lovelylain
        10
    lovelylain  
       2023-02-08 18:45:08 +08:00 via Android
    @opengps 磁盘性能为什么打折了啊,bind 映射外部目录到容器会有不可忽略的性能损失吗?
    cpstar
        11
    cpstar  
       2023-02-08 18:48:01 +08:00
    跟 DBMS 有关,像 Oracle 这种,某种程度上就是 OS 。还容器?而 mysql 之类的甚至 nosql ,本质上容器与否,就看数据尺寸、性能需求以及运维难度了。
    Tink
        12
    Tink  
       2023-02-08 20:15:37 +08:00 via Android
    当然能呀,数据文件挂载出来
    nkidgm
        13
    nkidgm  
       2023-02-08 20:36:10 +08:00
    容器部署数据库真的爽歪歪,数据库的容器数据 volume 都是外挂的,用的还是企业级 ssd ,怕毛。

    至于云主机都可以选择高 iops 的 ssd 云盘作为数据卷。
    IvanLi127
        14
    IvanLi127  
       2023-02-08 20:39:32 +08:00 via Android
    我感觉,少做少错,不做不错。。。不过我自己玩都是丢容器,省事。
    蹲运维大佬解答
    fuxinya
        15
    fuxinya  
       2023-02-08 21:36:41 +08:00 via Android
    我都是 docker 一把梭,运维?追求极致性能?不存在的
    lingly02
        16
    lingly02  
       2023-02-08 21:46:46 +08:00
    这个要根据应用的规模,访问的数据量大小,访问频率等来说吧。一般的企业应用,不是那种非常高强度存取的,部署在容器没啥问题。主要是挂载到本地磁盘,不要用 NFS 之类的就行了。互联网应用当然不建议这么干。
    lingly02
        17
    lingly02  
       2023-02-08 21:55:26 +08:00
    再说性能问题应该用发展的眼光去看,SAS 盘损失一点性能和以前的 SCSI ,SATA 比,还是快得多,更不用说 SSD 盘了。纠结那点性能损失没意义。还不如优化一下索引和 SQL 语句来的实在。当然稳定性方面是否有影响,目前也没看到有明确的测试报告。
    adoal
        18
    adoal  
       2023-02-08 23:27:15 +08:00
    https://www.talkwithtrend.com/Article/253491

    这篇讲得比较现实。

    个人浅见,在考虑这个问题时,需要问自己的实际问题:为什么要部署到容器?想针对传统方式的什么痛点(这里只说生产环境,开发环境一句命令拉起来的便利性是另外一回事)?部署到容器后解决痛点了吗?需要为容器化的数据库运维改变什么思维方式和配套工具,这些付出否合算?
    kingjpa
        19
    kingjpa  
       2023-02-08 23:27:23 +08:00
    用当然是可以用,测试环境没问题啊。

    但是到了生产环境,会涉及扩容 读写分离 增量备份什么的, 那维护难度和复杂程度就大大提升了。有点因小失大的感觉
    wxyrrcj
        20
    wxyrrcj  
       2023-02-09 09:18:54 +08:00
    本地开发环境 docker 一把梭
    julyclyde
        21
    julyclyde  
       2023-02-09 10:23:15 +08:00
    @adoal 很少有人问为什么
    superchijinpeng
        22
    superchijinpeng  
       2023-02-09 13:13:24 +08:00
    现在不都是
    hyperbin
        23
    hyperbin  
       2023-04-17 10:00:05 +08:00 via Android
    @cpstar Oracle 有官方 docker 镜像
    关于   ·   帮助文档   ·   博客   ·   API   ·   FAQ   ·   实用小工具   ·   1084 人在线   最高记录 6679   ·     Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 · 29ms · UTC 19:11 · PVG 03:11 · LAX 11:11 · JFK 14:11
    Developed with CodeLauncher
    ♥ Do have faith in what you're doing.