redis 有两种处理 HA 的方法 - sentinel 和 redis cluster。
哨兵
如果 master 没有按预期工作,Sentinel 可以启动故障转移
一个slave被提升为master的过程,另一个附加的
从站被重新配置为使用新的主站,并且应用程序
使用 Redis 服务器时获知要使用的新地址
连接
问:由于可能存在连接问题,我想配置哨兵以允许大脑分裂以实现高可用性
这是使用 sentinel 的反模式。这是一个类似的例子,文档中解释了偶数个节点
示例 1:只有两个哨兵,不要这样做
在上面的配置中我们创建了两个master(假设S2可以
未经授权的故障转移)以完全对称的方式。
客户端可能会无限期地给双方写信,没有办法
了解分区何时恢复正确的配置
一,为了防止永久性的脑裂状况。所以,请
始终在三个不同的盒子中部署至少三个哨兵。
问:现在的问题是子网连接恢复后会发生什么。哨兵会检测到脑裂和两个主人?
这些数据将永远丢失,因为当分区恢复时,
master 将被重新配置为新 master 的 slave,丢弃
它的数据集。
问:来自幸存 master 的数据将被推送到降级的 master,他需要删除在连接问题期间获得的所有数据差异?
是的
问:我可以配置一些东西来合并数据吗?
你不能,redis 永远不会合并任何东西
Redis 集群
beast 是干什么用的?
能够在多个节点之间自动拆分数据集。
当节点的子集出现时继续操作的能力
遇到故障或无法与其他人沟通
集群。
所以它基本上是一个多写入器解决方案。但是不支持合并操作either
Redis Cluster 设计避免了相同键值的版本冲突
在多个节点中配对,就像在 Redis 数据模型的情况下一样
并不总是可取的。 Redis 中的值通常非常大;它是
常见于包含数百万个元素的列表或排序集。还
数据类型在语义上很复杂。转移和合并这些
类型的值可能是主要瓶颈和/或可能需要
应用程序端逻辑的重要参与,额外的内存
存储元数据等。
回到你的场景
引用here
部署前需要了解的有关 Sentinel 的基本知识
您需要至少三个 Sentinel 实例才能进行强大的部署。
三个 Sentinel 实例应放入计算机或
被认为以独立方式发生故障的虚拟机。所以
例如在不同的物理服务器或虚拟机上执行
不同的可用区。
请注意,您也可以在客户端计算机上放置哨兵 - 这种方法在 redis 演示 https://redis.io/topics/sentinel
中大量使用
您也可以使用 cluster 解决方案,但它更难配置 + 它对多键操作有一些限制,您仍然需要提供多数节点数量,以防其中一个子网出现某种 HA 故障