8

问候溢出者,

在 Redis sentinel/cluster setup 中,我们是否可以使用 WAIT 命令和从站总数来确保 Redis 服务器之间的强一致性?为什么不?

亲切的问候

4

1 回答 1

19

WAIT为 Redis 实现同步复制。同步复制是必需的,但不足以实现强一致性。强一致性实际上是两件事的总和:

  1. 同步复制到分布式系统上的大多数节点。
  2. 一种协调领导层变更(基本上是故障转移)的方法,以保证只有保留前领导者中已确认操作的完整历史的节点才能被选举。

WAIT 不提供“2”。Redis 中的复制过程由 Sentinel 或 Redis Cluster 执行,无法提供属性2(由于 Redis 中的同步复制是例外而不是规则,因此没有过多关注这方面)。然而,Redis 复制所做的是尝试提升似乎保留最大数据量的从属服务器。虽然这不会改变 Redis 故障转移的理论保证,但仍然会丢失已确认的写入,这意味着如果您使用WAIT,有更多的从服务器在它们的内存中执行给定的操作,反过来,在发生故障转移时,该操作更有可能被保留。然而,虽然这将使丢弃已确认操作的故障模式难以触发,但始终存在具有此属性的故障模式。

TLDR: WAIT不会使 Redis 线性化,它所做的是确保指定数量的从属服务器将接收写入,这反过来使故障转移更加健壮,但没有任何硬性保证。

于 2015-11-10T12:58:56.730 回答