• 进入"运维那点事"后,希望您第一件事就是阅读“关于”栏目,仔细阅读“关于Ctrl+c问题”,不希望误会!

Python操作Redis哨兵(三)

Redis 彭东稳 7年前 (2017-07-13) 27320次浏览 已收录 0个评论

Sentinel的客户端

如果要做到应用程序(客户端)对Redis的failover透明Transparent),客户端需要监控sentinel的频道信息,并自动连接新的主节点。官方提供了一个专门的topic来讲解这个问题:Guidelines for Redis clients with support for Redis Sentinel,而一些常用的开发语言也已经有了整合sentinel的redis driver:

Python:Redis

Java:Jedis

这里以Python为例,首先安装redis-py。

简单连接

哨兵支持

然后可以从Sentinel实例创建Redis客户端连接,可以连接到Redis Master(用于写入操作)或Redis Slave(用于只读操作)。

如果Redis有密码,在这里需要改成这样:

master对象和slave对象是正常的StrictRedis实例,其连接池绑定到Sentinel实例。当Sentinel支持的客户端尝试建立连接时,它首先查询Sentinel服务器以确定要连接的适当主机。如果没有找到服务器,则会引发MasterNotFoundError或SlaveNotFoundError,这两个异常都是ConnectionError的子类。当尝试连接到从站客户端时,Sentinel连接池将遍历从站列表,直到找到可以连接的从站。如果没有从站可以连接,则与主站建立连接。

下面使用Python驱动来测试Redis高可用以及Sentinel高可用,环境为一主一从两个哨兵:

测试程序如下:

测试结果:

一、发生主从切换时,业务大概会有1-2s的中断后恢复正常。

二、当哨兵挂掉一个时(两个哨兵),业务无感知,但是是建立在主从不会切换的情况下(此时一个哨兵无法完成故障转移)。


如果您觉得本站对你有帮助,那么可以支付宝扫码捐助以帮助本站更好地发展,在此谢过。
喜欢 (5)
[资助本站您就扫码 谢谢]
分享 (0)

您必须 登录 才能发表评论!