使用 Redis 与 Sentinel 和 redis-py 时如何故障转移到新的主节点?

011*_*000 1 python failover high-availability redis redis-py

订阅Sentinel故障转移,Channel的名称是什么,如何在订阅的函数中检测到需要刷新master?

我有一个使用 Redis Sentinel 实现高可用性和故障转移的多节点 Redis 设置。

我需要为 Redis 设置一个 Pub/Sub 来检测 Redis Master 何时发生故障并且系统何时选举了新的 Master。

_sentinel = redis.sentinel.Sentinel([(app.config["REDIS_HOSTNAME"],app.config["REDIS_SENTINEL_PORT"])])
_master = _sentinel.master_for(app.config["REDIS_SERVICE_NAME"])

def _sentinel_message_handler(message):
    #TODO how do I detect that there is a new Redis Master?

_pubsub = _master.pubsub()
_pubsub.subscribe(**{app.config["TODO"]:_sentinel_message_handler})
Run Code Online (Sandbox Code Playgroud)

dav*_*p14 5

为了实现这一点,您需要订阅哨兵,而不是主节点。您正在寻找的频道是"+switch-master"。Sentinel 文档将通道指示为"switch-master"“不带 +”,但从 3.2.4 开始,包含 +。

Redis Sentinel Pub/Sub 消息文档

其余的您应该能够参考 redis-py 文档。 Redis-py 文档


更新

您也可以考虑使用该client-reconfig-script设置。

当主服务器因故障转移而发生更改时,可以调用脚本来执行特定于应用程序的任务,以通知客户端配置已更改并且主服务器位于不同的地址。

http://download.redis.io/redis-stable/sentinel.conf

希望有帮助