redis我爱编程

【译】Redis集群规范 (Redis Cluster Spec

2018-04-16  本文已影响668人  近路

Redis Cluster Specification

1 设计目标和理由

1.1 Redis Cluster goals

1.2 Clients and Servers roles in the Redis Cluster protocol

1.3 Write safety

1.4 可用性(Availability)

2.1.5 性能(Performance)

1.6 为何要避免合并(merge)操作

2 Redis Cluster主要模块介绍

2.1 分布式Keys模型

2.2 Keys hash tags

2.3 Cluster nodes属性

2.4 Cluster总线

2.5 集群拓扑

2.6 节点握手

3 Redirection and resharding

3.1 MOVED Redirection

3.2 Cluster live reconfiguration

3.2.1 CLUSTER SETSLOT命令

3.3 ASK重定向

3.4 客户端首次连接和对重定向的处理

3.5 多key操作

3.6 用slave节点扩展读操作

4 容错

4.1 心跳包和gossip消息

4.2 心跳包内容

4.3 故障检测

5 配置执行,传播,和故障转移 (Configuration handling,propagation, and failovers)

5.1 集群当前代(cluster current epoch)

5.2 配置代(Configuration epoch)

5.3 Slave选举和晋升

5.4 Slave排序

5.5 Masters回复slave选举请求

  1. 如果一个master在上一轮选举中投票过,那么它在NODE_TIMEOUT*2时间窗内,不会为该master的任意slave再次投票。这不是严格的需求,因为两个slave不可能在一个相同的epoch中同时获胜。然而,在实践中,它保证了当一个slave被选举后,它拥有足够的时间通知其他slave并避免其他slave赢得新一轮选举的可能性,否则这会造成有一次没有必要的failover。
  2. master不会做任何尝试来保证选出最好的slave。如果slave的master处于FAIL状态,且master没有在当前的term(任期,代?)中投票过,那么它一定会将授予自己的投票。最好的slave总是更可能启动一次选举并在其他slave之前赢得选举,因为由于它拥有更高的排名,它总是会先于其他slave发起选举。
  3. 当一个master拒绝为某个slave投票,那么它会简单地忽略该请求,而不会发出一个负面的响应。
  4. master不会投票给这样的slaves,它们发送的configEpoch小于master表中为slave宣称的slot服务的master的configEpoch。记得之前提起过,slave发送的消息中使用它的master的configEpoch,以及它的master服务的slots。这意味着请求选票的slave必须拥有它打算failover的master的slot配置,并且这个配置需要比授权选票的master更新或至少相等。

5.6 一个分区问题中epoch配置有效性实际例子

5.7 Hash slots配置传播

5.8 UPDATE消息,a closer look

5.9 节点如何重新加入集群

5.10 备份迁移(Replica migration)

5.11 备份迁移算法

5.12 configEpoch冲突解决算法

5.13 节点reset

5.14 从集群移除节点

6. Publish/Subscribe

上一篇下一篇

猜你喜欢

热点阅读