遇到一个问题,翻了下 docker 的文档,没看找到解决方案,想请教下大家
我使用 docker service 运行了一个 app(分配在 node1 上),并在启动时挂载了配置文件
之后在 app 在运行一段时间后,修改了配置文件,配置文件会自动持久化到 node1 上
此时 node1 机器宕机,容器因为使用 docker service 部署的,会自动从 node1 迁移到 node2
而 node2 上新生成容器默认会挂载的最初配置文件,那配置文件中变化的数据不就会丢失吗?
这种问题如何解决呢?
是所使用把配置数据保存在数据库中,这样变化的数据就不会丢失。 但如果需要持久化的是二进制数据呢?感觉又不太合适
还是挂载时不要挂载本地文件夹,而是使用 nfs 这样的网络存储吗?
1
hefish 186 天前
最后一句是个办法。
另外,既然都用上 docker ,用上迁移的,开发的时候就得有点那个云服务概念, 对于存储这样的服务,单机肯定不行了。可以考虑 minio 啊,或者各大云服务商的存储服务啊。。。。 |
2
laminux29 186 天前
宕机时自动迁移节点并且保证数据不丢失,无论是 docker 还是虚拟化,都没办法帮你 100% 做到,这种要求,是需要从架构上入手的,基于业务层来做 HA ,才能实现单物理节点宕机后,100% 不丢数据。
如果你不需要 100% 保证不丢失数据,并且你不愿意自己改造 docker ,那么你直接上虚拟化就行了,VMware ESXi 集群就有 HA 功能。 如果你不需要 100% 保证不丢失数据,并且你愿意自己改造 docker ,可以在 docker 内部使用实时同步,或者挂载网络存储。 |
4
sujin190 186 天前 via Android
nfs 呗,直接挂载磁盘
|
5
morningtzh 186 天前 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 容器化/ |
6
Int100 186 天前
|
7
1358208301 186 天前
看了博客,内容不错
@morningtzh |
8
yezheyu OP @morningtzh 首先谢谢老哥
项目中只是一个很小的集群,只有一两台机器。 最开始技术选型时,对 k8s 不熟悉,感觉其比较重。 就用了比较熟悉的 docker(k3s 没想到)。 现在换 k3s 已经不太可能了,否则好多东西要推倒重来 所以目前来看还是用 minio 这种自带高可用的存储服务更加方便点? 要不然用 NFS 还需要起两个副本,且进行数据同步。 |