![Redis sentinel:强制切换到另一个主服务器](https://linux22.com/image/733763/Redis%20sentinel%EF%BC%9A%E5%BC%BA%E5%88%B6%E5%88%87%E6%8D%A2%E5%88%B0%E5%8F%A6%E4%B8%80%E4%B8%AA%E4%B8%BB%E6%9C%8D%E5%8A%A1%E5%99%A8.png)
语境:
我有 3 个 redis 节点和 3 个 sentinel。故障转移工作正常。当我关闭主节点时,会选出另一个主节点。
需要:
我需要一种方法来测试行为,以确保一切按预期运行。我希望可以强制哨兵选择一个特定的 redis 节点作为主节点。
我想我可以通过关闭两个不应该是主节点的节点来做到这一点,但我希望我可以向其中一个哨兵发出命令来解决我的问题。
总结:
我可以指示我的哨兵选择一个特定的 redis 节点作为主节点吗?
答案1
你可以让两个你不想作为主服务器的 Redis 服务器挂起,我认为(未经测试)Sentinel 会选择剩下的一个。可能需要两次选举...
模拟 Redis 服务器挂起:
redis-cli DEBUG sleep 30
或者
redis-cli DEBUG segfault
然后强制故障转移:
SENTINEL failover
或许更好的方法是使用优先选项。
从https://redis.io/topics/sentinel
从属优先级
Redis 实例有一个名为“slave-priority”的配置参数。此信息由 Redis 从属实例在其 INFO 输出中公开,Sentinel 使用它来从可用于故障转移主服务器的从属服务器中挑选一个:
如果从属优先级设置为 0,则从属永远不会晋升为主。 Sentinel 优先选择优先级较低的从属。
比如说,如果在当前主服务器的同一个数据中心里有一个从服务器 S1,而在另一个数据中心里有一个从服务器 S2,那么可以将 S1 的优先级设置为 10,将 S2 的优先级设置为 100,这样,如果主服务器发生故障,并且 S1 和 S2 都可用,则会优先使用 S1。
有关从站选择方式的更多信息,请检查本文档的从站选择和优先级部分。