【问题标题】:Redis failover in a K8s clusterK8s 集群中的 Redis 故障转移
【发布时间】:2020-06-16 08:22:28
【问题描述】:

我正在尝试让 Redis 故障转移在 Kubernetes 中与工作节点故障场景一起工作。我有一个由一个主节点和两个工作节点组成的 K8s 集群。主节点不调度 Pod。 Redis 的清单是这样的,在一个有状态集中有一个主实例和一个从属实例,在另一个有状态集中有 3 个哨兵。清单具有引导 pod 在单独的工作节点上调度的亲和力。如果我耗尽具有主实例和一个哨兵的工作节点,故障转移就像一个冠军。

但是,如果有 2 个哨兵被主实例驱逐,则不会选出任何主节点,并且在剩余的工作节点上重新启动的 2 个哨兵报告:-failover-abort-no-good-slave master jnpr-ipb-redis-masters 10.244.1.209 7380。日志消息中的那个 IP 地址是前从属的 IP 地址(我希望它被提升为新的主控)。

是否有一些魔法可以使这项工作发挥作用?这是一个有效的集群配置吗?不太确定我应该看什么才能了解​​正在发生的事情。

【问题讨论】:

    标签: kubernetes redis failover


    【解决方案1】:

    你想要的是一个 PodDisruptionBudget。这将使自愿驱逐至少不会破坏事物。除此之外,您还可以使用硬反关联性来强制将 pod 安排在不同的节点上。但是,如果您同时丢失两个节点,Sentinel 可能会不同步,但仍然可能发生故障。这也是 Redis Sentinel 不再用于集群模式的很大一部分原因。

    【讨论】:

    • 如果我只有 2 名工人,而我失去了一名工人,就没有自愿驱逐这回事。
    • 自愿驱逐来自kubectl drain。正如我所提到的,故障仍然可能发生,这是 Redis Sentinel 的一个已知结构问题。
    • 我正在尝试模拟节点故障;不能留下任何豆荚。似乎吊舱中断预算会使模拟产生偏差。
    猜你喜欢
    • 2016-03-19
    • 2014-06-14
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2020-02-14
    • 2017-08-31
    • 2016-10-10
    相关资源
    最近更新 更多