我正在尝试为故障转移支持设置redis-sentinel配置。以下是我的配置,
machine1 : IP : 10.0.0.1 6379 with redis-sentinel port 26379
machine2 : IP : 10.0.0.2 6379 with redis-sentinel port 26379
machine3 : IP : 10.0.0.3 6379 with redis-sentinel port 26379
Redis sentinel config
机器1:
sentinel monitor mymaster 10.0.0.1 6379 2
sentinel down-after-milliseconds mymaster 60000
sentinel failover-timeout mymaster 180000
sentinel parallel-syncs mymaster 1
机器2:
sentinel monitor mymaster 10.0.0.1 6379 2
sentinel down-after-milliseconds mymaster 60000
sentinel failover-timeout mymaster 180000
sentinel parallel-syncs mymaster 1
机器3:
sentinel monitor mymaster 10.0.0.1 6379 2
sentinel down-after-milliseconds mymaster 60000
sentinel failover-timeout mymaster 180000
sentinel parallel-syncs mymaster 1
添加机器2和机器3作为机器1的从机。复制工作正常。但是当机器1关闭时,主开关不会在其他机器上发生。他们仍然像奴隶一样行事。我的设置有任何配置问题吗?
在我给出更好的答案之前还有一些问题:
- 在redis实例上是否有身份验证运行? 哨兵真的检测到pod的拓扑结构了吗?
如果上述哨兵配置完成,哨兵实际上没有连接到主服务器。Sentinel重写配置文件以存储发现的拓扑,因此您最初配置它的内容将伴随着它发现的内容。特别地,我们也会看到从条目。
另一种可能性是,没有足够的哨兵达到法定人数,没有成功地连接到主服务器。如果Redis配置了需要的身份验证,你还需要使用sentinel set
命令告诉哨兵身份验证令牌。
如果你可以发布完整的配置,以及当你关闭主时哨兵的日志,我们可以提供更具体的操作。
与此相关的是,在生产环境中,我不建议使用这种设置。如果你有一个,你可能会以所谓的脑裂而告终。如果主机所在的机器与其他机器隔离,但仍在运行,其他两台机器将选举一个新的主机,此时您将拥有两台主机。如果客户端仍然能够连接到主服务器,那么现有的连接将保持在原来的连接上,但是使用sentinel获取主服务器的新连接将连接到第二个主服务器。通过在不同的机器上运行哨兵,可以降低这种风险。如果您的客户机数量有限,并且可以在那里运行sentinel,则可以几乎或完全消除这种可能性。