3

我有网址

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.1,192.168.10.2192.168.10.3. 一个节点是主节点,其他节点是从节点。如果master宕机了,其他节点代替master。

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

我们必须提供主机名和端口。就我而言,主人将是这三个中的任何人。

4

2 回答 2

8

在https://github.com/andymccurdy/redis-py/blob/master/README.rst#sentinel-support检查 redis-py 代码库 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)

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

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

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

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

像这样:

sentinel monitor mymaster 127.0.0.1 6379 2

于 2017-08-25T16:49:29.917 回答
8

要连接python redis 客户端,如果您需要使用密码进行身份验证设置,则可以执行以下操作:

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")

当然,如果你没有设置密码,你可以删除你的 redis_client 实例中的sentinel_kwargs={'password': YOUR_REDIS_PASSWORD}andpassword属性。

如果设置失败,您可能会遇到 MasterNotFoundError(如果发送发现失败)或 AuthenticationError 如果您没有在正确的位置传递正确的密码或密码参数

于 2020-01-21T14:04:15.527 回答