首页 文章

Redis群集:主故障无自动故障转移

提问于
浏览
1

我正在尝试用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群集上,我能够处理多少总数据?

谢谢 .

1 回答

  • 0

    设置 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实例失败 . (它可以是slave或master实例)

    对于您的第二个问题:六台16GB RAM的机器将能够用作Redis Cluster的3个Master实例和3个Slave实例 . 因此理论最大值为16GB x 3数据 . 如果 cluster-require-full-coverage 打开,则此类群集最多可以容忍一个节点故障 . 否则它仍然可以在功能实例中仍然可用的分片中提供数据 .

相关问题