vault backup: 2026-06-08 23:08:57

This commit is contained in:
hhs
2026-06-08 23:08:57 +08:00
parent d67831afe0
commit 51de196713
136 changed files with 26069 additions and 344 deletions
+21 -21
View File
@@ -29,11 +29,11 @@ Redis Cluster 选择了后者——Redis 本身就是一个高性能的单线程
Gossip 协议的核心思想可以归结为三步,每一步都体现了"少而精"的通信策略:
```mermaid
flowchart LR
A["节点 A<br/>有新消息"] -->|"1. 随机选择几个邻居"| B["节点 B, C, D"]
B -->|"2. 收到后继续转发"| E["节点 E, F"]
C -->|"2. 收到后继续转发"| G["节点 G, H"]
E -->|"3. 持续传播直到收敛"| I["所有节点"]
graph LR
A["节点 A: 有新消息"] -- "① 随机选择几个邻居" --> B["节点 B, C, D"]
B -- "② 收到后继续转发" --> E["节点 E, F"]
C -- "② 收到后继续转发" --> G["节点 G, H"]
E -- "③ 持续传播直到收敛" --> I["所有节点"]
```
具体到 Redis Cluster,传播方式如下:
@@ -45,12 +45,12 @@ sequenceDiagram
participant C as Node C
participant D as Node D
Note over A: 新状态: slot 0~5460 归我管
A->>B: PING (携带 A 的状态摘要 + 随机挑 3 个节点状态)
B->>A: PONG (携带 B 的状态摘要)
A->>C: PING (携带更新后的状态)
Note over A: 新状态 slot 0~5460 归我管
A->>B: PING 携带 A 的状态摘要 + 随机挑 3 个节点状态
B->>A: PONG 携带 B 的状态摘要
A->>C: PING 携带更新后的状态
C->>A: PONG
Note over A,B,C,D: 几轮之后<br/>所有节点都知道 slot 0~5460 归 A 管
Note over A: 几轮之后 所有节点都知道 slot 0~5460 归 A 管
```
### 收敛速度
@@ -104,17 +104,17 @@ sequenceDiagram
participant C as Node C
participant D as Node D
A->>A: 与 Node D 通信超时
Note over A: 标记 D 为 PFAIL<br/>(可能下线, 暂不处理)
A->>B: PING (携带: D is PFAIL)
A->>C: PING (携带: D is PFAIL)
B->>A: PONG (我这里 D 也超时了, PFAIL)
C->>A: PONG (D 对我正常, 无 PFAIL)
Note over A: 收集到集群半数以上<br/>Master 对 D 的 PFAIL 票
Note over A: D 从 PFAIL 升级为 FAIL<br/>广播 FAIL 消息
A->>B: FAIL(D)
A->>C: FAIL(D)
Note over B,C: 收到 FAIL 后<br/>触发 D 的 Slave 故障转移
Note over A: 与 Node D 通信超时
Note over A: 标记 D 为 PFAIL - 可能下线 暂不处理
A->>B: PING - D is PFAIL
A->>C: PING - D is PFAIL
B->>A: PONG - 我这里 D 也超时了 PFAIL
C->>A: PONG - D 对我正常 无 PFAIL
Note over A: 收集到集群半数以上 Master 对 D 的 PFAIL 票
Note over A: D 从 PFAIL 升级为 FAIL 广播 FAIL 消息
A->>B: FAIL - D
A->>C: FAIL - D
Note over B,C: 收到 FAIL 后 触发 D 的 Slave 故障转移
```
> [!IMPORTANT] 为什么要两阶段?