通过哨兵自动发现主人

时间:2017-04-13 12:49:52

标签: python redis redis-sentinel redis-py

可以使用以下命令通过哨兵发现redis master:

from redis.sentinel import Sentinel
sentinel = Sentinel([('127.0.0.1', 26379)])
master_server = sentinel.master_for('mymaster')

现在将数据写入主节点:

master_server.setex(key, 120, value)
# do something
master_server.setex(key, 120, new_value)

现在,在# do something期间,如果master_server崩溃,sentinel将通过投票促使奴隶掌握。因此,master_server.setex(key, 120, new_value)将抛出 MasterNotFoundError

解决方法是 try-catch 此块;有没有办法让redis自动处理主发现?由于在代码中的任何地方放置 try-catch 都会使代码变得冗余和混乱。

1 个答案:

答案 0 :(得分:0)

Redis sentinel实际上 会自动重新发现master,因为它使用SentinelConnectionPool。虽然它确实有一些问题 - 请参阅我的recent question - 这听起来像是你的redis设置没有成功选出一个新的主人。

你是否有一个奇数的哨兵有适当的法定人数?

https://redis.io/topics/sentinel

查看redis sentinel页面,确保您没有遇到一些常见的陷阱。