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

266 天前
 yezheyu

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

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

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

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

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

这种问题如何解决呢?

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

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

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

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

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

局域网,上不了云存储, 除了一楼老哥介绍的 minio ,还有什么推荐的轻量化的网络存储服务吗
sujin190
266 天前
nfs 呗,直接挂载磁盘
morningtzh
266 天前
多节点的话 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
266 天前
@morningtzh #5

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

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

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


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

然后通过 SSHFS 进行挂载,比 SMB 、NFS 这种不稳定的玩意安全得多。

这是一个专为移动设备优化的页面(即为了让你能够在 Google 搜索结果里秒开这个页面),如果你希望参与 V2EX 社区的讨论,你可以继续到 V2EX 上打开本讨论主题的完整版本。

https://www.v2ex.com/t/1040367

V2EX 是创意工作者们的社区,是一个分享自己正在做的有趣事物、交流想法,可以遇见新朋友甚至新机会的地方。

V2EX is a community of developers, designers and creative people.

© 2021 V2EX