mjs*_*lva 6 amazon-web-services redis autoscaling redis-sentinel devops
我们的设置
此设置在两个集群中复制,用于称为元数据和缓存.我们想要部署更多集群.
主持人
是我们构建的python守护程序,它订阅了sentinels pub/sub并侦听+ switch-master消息.以下是协调人采取的行动:
SENTINEL get-master-addr-by-name mymaster问题
因为奴隶每天可以根据交通进出多次,所以我们最终会遇到属于同一个奴隶争夺同一奴隶的哨兵的一些奴隶.这是因为IP池在集群之间共享,并且据我们所知,从属ID是它们的IP.
这是复制的方法:
哨兵陷入无休止的循环中,永远为这种资源而战.即使我们只有一个哨兵小组管理具有不同主名称的两个redis群集,这种情况也会发生.这使我们相信哨兵不了解不同群集之间的资源,而只是分别对每个群集执行合乎逻辑的操作.
解决方案我们试过
SENTINEL reset mymaster+ sdown事件后,尝试让哨兵忘记该节点.问题是,如果该集群正在执行主故障转移,它可能会生成竞争条件.我们成功地复制了这个假设,并且让哨兵不同步,其中一个指向一个主人,另外两个指向另一个.理想的解决方案
Redis哨兵提供SENTINEL removeslave 172.24.246.142 mymaster我们可以在每次有奴隶的+ sdown事件时运行.这将使该群集忘记那个奴隶曾经存在而不会产生副作用SENTINEL reset mymaster.
仅通过IP停止识别奴隶的唯一性.也许添加一个redis服务器启动时间戳或任何其他令牌,以防止关闭的从站和使用相同IP备份的新站点被视为同一节点.
题
您能想到任何其他解决方案,不涉及更改redis哨兵代码,并且不需要在群集之间隔离IP池吗?