我们有两个数据中心,每个数据中心都有两个redis实例。通常它们被复制为链。
NY1 (Master) --> NY2 (Slave) --> CO1 (Slave) --> CO2 (Slave)
NY是纽约,CO是科罗拉多州,我们的备份数据中心。为了节省WAN上的带宽,我们不希望CO1 和二氧化碳连接到NY1。相反,我们想要一种链式配置,其中只有一个从属设备直接连接到主设备,而其他设备都是奴隶的奴隶"。
使用Sentinel可以维护这种复制布局吗?或者所有奴隶都必须是主人的奴隶,而不是奴隶的奴隶?
答案 0 :(得分:0)
目前 Sentinel 无法进行这种类型的设置,因为 Sentinel 会重写所有受监控 Redis 系统的配置。
例如,如果您按照您的描述设置了一个系统并且有哨兵监控所有主机,如果主服务器出现故障并强制进行故障转移,每个 Redis 主机都将被重新配置。其中一个副本(其中任何一个)将成为新的主节点,其他副本将成为新主节点的副本。当旧 master 重新上线时,它会被重新配置为新 master 的副本。
但是,通常您可以让 Redis 以您想要的方式工作。通过将 replicaof
配置值设置为副本,您可以根据需要拥有任意数量的副本。
就我个人而言,我仍然会使用 Sentinel 来监视主副本和“主要”副本(从主副本本身复制的副本)。这可能会导致主要副本之一成为新的主副本,因此我将启用通知选项。这告诉哨兵在发生故障转移时调用脚本。在该脚本中,您可以发送电子邮件、点击 Slack 网络钩子,或者您想做的任何其他事情。当我得到它时,我会手动将主机重新配置回我想要的格式,但使用新的主机。这样做会很痛苦,但我仍然会自动故障转移主副本和主要副本,因此我的应用程序将继续工作。