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

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

  •  
  •   SkSk666 · 2020-03-26 10:02:39 +08:00 · 6001 次点击
    这是一个创建于 1739 天前的主题,其中的信息可能已经有所发展或是发生改变。
    https://www.infoq.cn/article/cS_Pp9r8Gjd9bpGpjTTv
    携程的 redis 容器化

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

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

    不知道这样理解对不对
    PiersSoCool
        5
    PiersSoCool  
       2020-03-26 17:56:51 +08:00
    @SkSk666 我觉得也是,没有设置持久化就会丢失所有数据
    关于   ·   帮助文档   ·   博客   ·   API   ·   FAQ   ·   实用小工具   ·   2866 人在线   最高记录 6679   ·     Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 · 127ms · UTC 14:00 · PVG 22:00 · LAX 06:00 · JFK 09:00
    Developed with CodeLauncher
    ♥ Do have faith in what you're doing.