如何从sentinel url创建redis python客户端?

时间:2017-08-25 16:34:03

标签: python redis client sentinel

我有网址

BROKER_URL = 'sentinel://192.168.10.1:26379/0;sentinel://192.168.10.2:26379/0;sentinel://192.168.10.3:26379/0'

在此,redis正在192.168.10.1192.168.10.2192.168.10.3上投放。一个节点是主节点,其他节点是从节点。如果master关闭,其他节点就会成为master。

我检查了redis客户端,但它没有方法,我们可以像我给的那样提供网址。

我们必须提供主机名和端口。在我的情况下,主人将成为这3人的任何人。

2 个答案:

答案 0 :(得分:5)

要完成上一个答案,如果您有需要密码的身份验证设置,请执行以下操作:

from redis.sentinel import Sentinel
sentinel = Sentinel([('192.168.10.1', 26379),
                     ('192.168.10.2',26379),
                     ('192.168.10.3',26379)],
                   sentinel_kwargs={'password': YOUR_REDIS_PASSWORD})
# you will need to handle yourself the connection to pass again the password
# and avoid AuthenticationError at redis queries
host, port = sentinel.discover_master(YOUR_REDIS_DB_MASTER)
redis_client = redis.StrictRedis(
            host=host,
            port=port,
            password= YOUR_REDIS_PASSWORD
        )

您可以使用

之类的简单查询直接对其进行测试
redis_client.exists("mykey")

如果安装失败,则可能会遇到MasterNotFoundError(如果信号发现失败)或AuthenticationError(如果未在正确的位置传递正确的密码或password参数)

答案 1 :(得分:4)

检查https://github.com/andymccurdy/redis-py/blob/master/README.rst#sentinel-support

处的redis-py codebase readme.md

像这样:

from redis.sentinel import Sentinel
sentinel = Sentinel([('192.168.10.1', 26379), ('192.168.10.2',26379), ('192.168.10.3',26379)], socket_timeout=0.1)

master = sentinel.master_for('master-name', socket_timeout=0.1)
  

主对象和从属对象是普通的StrictRedis实例,其连接池绑定到Sentinel实例。当Sentinel支持的客户端尝试建立连接时,它首先查询Sentinel服务器以确定要连接的适当主机。如果未找到服务器,则引发MasterNotFoundError或SlaveNotFoundError。

实际情况是,如果为redis群集构建Sentinel,则无需直接连接redis服务器。如上所述,首先连接到Sentinel,然后使用master_for查询要连接的适当主机。只有这样,如果主服务器关闭,您的客户端才能被定向到新主服务器。

上面代码中的master-name,您应该在sentinel.conf中指定 在

sentinel monitor <master-group-name> <ip> <port> <quorum>

像这样:

sentinel monitor mymaster 127.0.0.1 6379 2