看到一篇容器化 redis 的文章,有一个哨兵模式数据丢失的问题完全不能理解

2020-03-26 10:02:39 +08:00
 SkSk666
https://www.infoq.cn/article/cS_Pp9r8Gjd9bpGpjTTv
携程的 redis 容器化

其中有一段写到:Master 挂了不希望 K8S 立刻把它拉起来,希望哨兵来感知到它,因为 K8S 如果在哨兵感知前拉起了它,导致哨兵还没切换 Master/Slave,Master 就活过来并且数据都丢失,这时候一同步到 Slave 上数据也全没有了,等于执行了一个清空操作,这对于业务和 DBA 来说是不能接受的。

这种情况出现的原理是什么? Master 在挂了重新被拉起来,为什么数据会全部丢失?看上去这里的意思是指 Master 里的数据一点都没有了,不是指在 Master 挂了的时刻没有持久化的数据没有了。百思不得其解。。。。
5812 次点击
所在节点    Redis
5 条回复
fancy111
2020-03-26 10:06:35 +08:00
。。。。 master 挂了内存清空当然没数据了啊,然后由于哨兵未切换,导致 master 还是 master,然后再把 master 同步到 slave,这样两个都空了
dilu
2020-03-26 10:08:37 +08:00
就算不容器化,redis 的主库挂了也不能立刻重启,我记得好像是 aof 文件如果有问题会导致 master 把 slave 的全部数据冲掉
具体原理忘记了,反正一定要确保 aof 文件正常再重启
julyclyde
2020-03-26 10:35:08 +08:00
@fancy111 “master 同步到 slave”这个操作不是按每个命令在 slave 重新执行一遍来实现的吗?我记得不是复制整体内容啊?
SkSk666
2020-03-26 10:45:26 +08:00
如果这个哨兵集群没有开启持久化,master 挂了,k8s 在哨兵感知前把 master 拉起来,此时 master 数据已经清空,导致同步到 slave 也清空。这个说得通。
如果开启了持久化,k8s 重新拉起 master,此时哨兵还没有感知到 master 挂了,根本就不会切换 master,看上去只有 master 挂了的时刻没有持久化的数据会丢失

不知道这样理解对不对
PiersSoCool
2020-03-26 17:56:51 +08:00
@SkSk666 我觉得也是,没有设置持久化就会丢失所有数据

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

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

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

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

© 2021 V2EX