我有一个 Redis 集群,其中有 2 个主服务器和 4 个从服务器(每个主服务器有 2 个从服务器)。在我手动使主服务器崩溃后,从redis-cli -p 6379 debug segfault
服务器不执行任何操作。它们检测到主服务器出现问题,但它们什么也没做(我等了 20 分钟)。
以下是集群节点输出(即redis-cli cluster nodes
):
08dfd1bdd470a8831b33b7b0409a40bf45ee22d0 192.168.0.15:6379 myself,slave 55787eb63780365a0c7d4a0ed72cac4b97a55ed0 0 0 1 connected
7fedf234aba8d906dca5a4725a54d1cc5c979c18 192.168.0.18:6379 slave a739cfbcd9b804345808bb3a78b6a00b2d6050f9 0 1477865886164 2 connected
a739cfbcd9b804345808bb3a78b6a00b2d6050f9 192.168.0.14:6379 master,fail? - 1477865551940 1477865548392 0 disconnected 8192-16383
5dcc0a0a3f13ea9343171a13fbf0ec7054dfc2ab 192.168.0.19:6379 slave a739cfbcd9b804345808bb3a78b6a00b2d6050f9 0 1477865884135 5 connected
55787eb63780365a0c7d4a0ed72cac4b97a55ed0 192.168.0.16:6379 master - 0 1477865885150 2 connected 0-8191
601a5e0dd9d40d8c01119714e89be63eaee87900 192.168.0.17:6379 slave 55787eb63780365a0c7d4a0ed72cac4b97a55ed0 0 1477865882100 3 connected
我们在这里看到的是一个失败的主节点,192.168.0.14:6379
标记为master,fail
?。我不知道为什么它显示一个问号。但我等了 20 分钟,什么都没有改变。为什么从属节点不接管主节点?
答案1
您需要至少有 3 个主服务器才能形成 redis 集群。如果大多数主服务器同时死亡,集群将变得不可用。如果大多数主服务器不可用,则不会发生故障转移。
答案2
因为纯 redis 本身无法实现故障转移。redis 中的 master 和 slave 只是为了负载均衡。您必须使用 Sentinel(redis 默认自带的模块)来实现自动故障转移。