V2EX = way to explore
V2EX 是一个关于分享和探索的地方
现在注册
已注册用户请  登录
V2EX 提问指南
yezheyu
V2EX  ›  问与答

请教个关于 docker 数据持久化的问题

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

    遇到一个问题,翻了下 docker 的文档,没看找到解决方案,想请教下大家

    我使用 docker service 运行了一个 app(分配在 node1 上),并在启动时挂载了配置文件

    之后在 app 在运行一段时间后,修改了配置文件,配置文件会自动持久化到 node1 上

    此时 node1 机器宕机,容器因为使用 docker service 部署的,会自动从 node1 迁移到 node2

    而 node2 上新生成容器默认会挂载的最初配置文件,那配置文件中变化的数据不就会丢失吗?

    这种问题如何解决呢?

    是所使用把配置数据保存在数据库中,这样变化的数据就不会丢失。 但如果需要持久化的是二进制数据呢?感觉又不太合适

    还是挂载时不要挂载本地文件夹,而是使用 nfs 这样的网络存储吗?

    9 条回复    2024-05-14 15:29:04 +08:00
    hefish
        1
    hefish  
       36 天前
    最后一句是个办法。
    另外,既然都用上 docker ,用上迁移的,开发的时候就得有点那个云服务概念, 对于存储这样的服务,单机肯定不行了。可以考虑 minio 啊,或者各大云服务商的存储服务啊。。。。
    laminux29
        2
    laminux29  
       36 天前
    宕机时自动迁移节点并且保证数据不丢失,无论是 docker 还是虚拟化,都没办法帮你 100% 做到,这种要求,是需要从架构上入手的,基于业务层来做 HA ,才能实现单物理节点宕机后,100% 不丢数据。

    如果你不需要 100% 保证不丢失数据,并且你不愿意自己改造 docker ,那么你直接上虚拟化就行了,VMware ESXi 集群就有 HA 功能。

    如果你不需要 100% 保证不丢失数据,并且你愿意自己改造 docker ,可以在 docker 内部使用实时同步,或者挂载网络存储。
    yezheyu
        3
    yezheyu  
    OP
       36 天前
    @hefish @laminux29 首先谢谢两位的回答

    局域网,上不了云存储, 除了一楼老哥介绍的 minio ,还有什么推荐的轻量化的网络存储服务吗
    sujin190
        4
    sujin190  
       36 天前 via Android
    nfs 呗,直接挂载磁盘
    morningtzh
        5
    morningtzh  
       36 天前   ❤️ 4
    多节点的话 k8s 得了解一下,ingress / 存储 都给你解决了
    存储可以使用:nfs / scsi / ceph 等,直接使用 pvc 管理很方便;

    k8s 缩减版 k3s 挺适合家用的,只有一个二进制文件,我在单节点 NAS 上也用 k3s ,自带 traefik ingress 很方便。如果 runtime 喜欢 docker ,也可以用 docker (默认是 containerd )

    但你这有个问题,想要单独搞存储又涉及到了存储放什么服务器上的问题,你都是高可用的,那存储也得是高可用的,单节点你肯定不乐意。所以如果你还用 hostpath ,可以考虑起个 rsync 进行存储的双机热备,这样服务起哪里都无所谓了


    之前写了 blog 记录了一下
    https://blog.morningtzh.com/post/数字家庭/nas 容器化/
    Int100
        6
    Int100  
       36 天前
    @morningtzh #5

    文章一看,惊为天人,让我来好好学习一波。感谢分享。🙏
    1358208301
        7
    1358208301  
       36 天前
    看了博客,内容不错
    @morningtzh
    yezheyu
        8
    yezheyu  
    OP
       35 天前
    @morningtzh 首先谢谢老哥

    项目中只是一个很小的集群,只有一两台机器。
    最开始技术选型时,对 k8s 不熟悉,感觉其比较重。
    就用了比较熟悉的 docker(k3s 没想到)。

    现在换 k3s 已经不太可能了,否则好多东西要推倒重来


    所以目前来看还是用 minio 这种自带高可用的存储服务更加方便点?
    要不然用 NFS 还需要起两个副本,且进行数据同步。
    laminux29
        9
    laminux29  
       35 天前
    @yezheyu 轻量化的网络存储服务,可以选择 ZFS ,地球上单机最强 FS 。

    然后通过 SSHFS 进行挂载,比 SMB 、NFS 这种不稳定的玩意安全得多。
    关于   ·   帮助文档   ·   博客   ·   API   ·   FAQ   ·   实用小工具   ·   4584 人在线   最高记录 6679   ·     Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 · 29ms · UTC 04:02 · PVG 12:02 · LAX 21:02 · JFK 00:02
    Developed with CodeLauncher
    ♥ Do have faith in what you're doing.