Redis 故障转移,哨兵不工作
Redis fail over with sentinel not working
我正在尝试为故障转移支持设置 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 哨兵配置
机器 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 的从机。复制工作 fine.But 当机器 1 关闭时,其他机器不会发生主切换。他们仍然充当奴隶。我的设置有任何配置问题吗?
在我给出更好的答案之前的一些问题:
- redis 实例上是否有认证运行ning?
- 哨兵真的检测到 pod 的拓扑结构了吗?
如果上面的sentinel配置完成,说明sentinel还没有真正依附到master上。 Sentinel 重写配置文件以存储发现的拓扑结构,因此您最初配置它的内容将伴随它发现的内容。特别是我们也会看到从条目。
另一种可能是达到法定人数的足够哨兵没有成功连接到主服务器。如果 Redis 配置为需要身份验证,则还需要使用 sentinel set
命令告诉哨兵身份验证令牌。
如果你能post完整的配置,以及当你关闭主服务器时哨兵的日志,我们可以提供更具体的操作。
在相关说明中,在生产中我建议不要使用这种设置。使用您拥有的那个,您可以结束所谓的裂脑。如果 master 所在的机器与其他机器隔离,但仍然 运行ning,则另外两台机器将选举一个新的 master,此时您将拥有两个 master。如果客户端仍然能够连接到 master,现有连接将保留在原始连接上,但使用 sentinel 获取 master 的新连接将连接到第二个 master。
通过 运行在不同的机器上设置哨兵可以降低这种风险。如果您的客户端机器数量有限,并且可以 运行 那里的哨兵,您几乎可以或完全消除这种可能性。
我正在尝试为故障转移支持设置 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 哨兵配置
机器 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 的从机。复制工作 fine.But 当机器 1 关闭时,其他机器不会发生主切换。他们仍然充当奴隶。我的设置有任何配置问题吗?
在我给出更好的答案之前的一些问题:
- redis 实例上是否有认证运行ning?
- 哨兵真的检测到 pod 的拓扑结构了吗?
如果上面的sentinel配置完成,说明sentinel还没有真正依附到master上。 Sentinel 重写配置文件以存储发现的拓扑结构,因此您最初配置它的内容将伴随它发现的内容。特别是我们也会看到从条目。
另一种可能是达到法定人数的足够哨兵没有成功连接到主服务器。如果 Redis 配置为需要身份验证,则还需要使用 sentinel set
命令告诉哨兵身份验证令牌。
如果你能post完整的配置,以及当你关闭主服务器时哨兵的日志,我们可以提供更具体的操作。
在相关说明中,在生产中我建议不要使用这种设置。使用您拥有的那个,您可以结束所谓的裂脑。如果 master 所在的机器与其他机器隔离,但仍然 运行ning,则另外两台机器将选举一个新的 master,此时您将拥有两个 master。如果客户端仍然能够连接到 master,现有连接将保留在原始连接上,但使用 sentinel 获取 master 的新连接将连接到第二个 master。
通过 运行在不同的机器上设置哨兵可以降低这种风险。如果您的客户端机器数量有限,并且可以 运行 那里的哨兵,您几乎可以或完全消除这种可能性。