【问题标题】:Redis Cluster: No automatic failover for master failureRedis 集群:主节点故障没有自动故障转移
【发布时间】:2016-03-19 19:15:54
【问题描述】:

我正在尝试使用 6 台机器实现 Redis 集群。 我有一个由六台机器组成的流浪集群:

192.168.56.101
192.168.56.102
192.168.56.103
192.168.56.104
192.168.56.105
192.168.56.106

所有正在运行的 redis-server

我编辑了上述所有服务器的 /etc/redis/redis.conf 文件添加了这个

cluster-enabled yes
cluster-config-file nodes.conf
cluster-node-timeout 5000
cluster-slave-validity-factor 0
appendonly yes

然后我在六台机器中的一台上运行它;

./redis-trib.rb create --replicas 1 192.168.56.101:6379 192.168.56.102:6379 192.168.56.103:6379 192.168.56.104:6379 192.168.56.105:6379 192.168.56.106:6379

Redis 集群已启动并正在运行。我通过在一台机器上设置值手动检查它显示在另一台机器上。

$ redis-cli -p 6379 cluster nodes
3c6ffdddfec4e726f29d06a6da550f94d976f859 192.168.56.105:6379 master - 0 1450088598212 5 connected
47d04bc98ab42fc793f9f382855e5c54ab8f2e20 192.168.56.102:6379 slave caf2cec45114dc8f4cbc6d96c6dbb20b62a39f90 0 1450088598716 7 connected
040d4bb6a00569fc44eec05440a5fe0796952ccf 192.168.56.101:6379 myself,slave 5318e48e9ef0fc68d2dc723a336b791fc43e23c8 0 0 4 connected
caf2cec45114dc8f4cbc6d96c6dbb20b62a39f90 192.168.56.104:6379 master - 0 1450088599720 7 connected 0-10922
d78293d0821de3ab3d2bca82b24525e976e7ab63 192.168.56.106:6379 slave 5318e48e9ef0fc68d2dc723a336b791fc43e23c8 0 1450088599316 8 connected
5318e48e9ef0fc68d2dc723a336b791fc43e23c8 192.168.56.103:6379 master - 0 1450088599218 8 connected 10923-16383

我的问题是,当我在任何一台机器上关闭或停止 redis-server master 时,整个集群都会关闭,但如果所有三个从服务器都死了,集群仍然可以正常工作。

如果主人失败,我应该怎么做才能让奴隶变成主人(容错)?

我假设 redis 可以处理所有这些事情,并且在部署集群后我不必担心它。我是对的还是我必须自己做?

另一个问题是假设我有六台 16GB RAM 的机器。在这个具有三个主设备和三个从设备的 Redis 集群上,我可以处理多少总数据?

谢谢。

【问题讨论】:

  • 关闭为什么?这个问题有什么问题?一些 cmets 会很好。
  • // , 谁关闭了这个?

标签: redis redis-cluster


【解决方案1】:

cluster-slave-validity-factor 0 的设置可能是这里的罪魁祸首。

from redis.conf

# A slave of a failing master will avoid to start a failover if its data
# looks too old.

在您的设置中,已终止主节点的从节点认为自己不适合被选为主节点,因为它上次联系主节点的时间大于以下计算值:

(node-timeout * slave-validity-factor) + repl-ping-slave-period

因此,即使有冗余从属设备,集群状态也会更改为 DOWN 并变得不可用。

您可以尝试使用不同的值,例如建议的默认值

cluster-slave-validity-factor 10

这将确保集群能够容忍一个随机的 redis 实例故障。 (它可以是从属或主实例)

对于您的第二个问题:每台 16GB RAM 的六台机器将能够充当由 3 个主实例和 3 个从属实例组成的 Redis 集群。所以理论上最大是 16GB x 3 数据。如果打开cluster-require-full-coverage,这样的集群最多可以容忍一个节点故障。否则它可能仍然能够提供在运行实例中仍然可用的分片中的数据。

【讨论】:

  • 这个答案是错误的,0 禁用了该功能并确保从属设备将始终尝试作为主设备进行故障转移。
猜你喜欢
  • 2013-04-25
  • 1970-01-01
  • 2014-06-14
  • 2020-06-16
  • 2015-03-21
  • 1970-01-01
  • 1970-01-01
  • 2011-05-28
相关资源
最近更新 更多