Skip to content

Commit c046f33

Browse files
代码风水师代码风水师
authored andcommitted
添加了Redis故障转移与高可用
1 parent 1e40d04 commit c046f33

File tree

1 file changed

+37
-1
lines changed

1 file changed

+37
-1
lines changed

resource/markdown/cache/Replication.md

Lines changed: 37 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -54,4 +54,40 @@ Redis 数据复制是单向的,而且一个节点只能从属一个master节
5454

5555
![Redis注册复制原理](https://i.loli.net/2019/02/12/5c62226abbf3d.png)
5656

57-
首先,通过上述配置主从复制,从节点保存主节点的信息,然后建立 socket 连接。Redis的ping命令是用于客户端检测服务端是否正常运作或消息延时的一种命令,是一种心跳机制,在这里从节点就是客户端,主节点就是服务端。从节点发送ping命令至主节点,如果主节点正常运作则返回pong,这样才能表示双方网络通达。紧接着,如果主节点开启 `requirepass foobared` 参数(foobared 可以认为是安全校验密码),主节点会对从节点进行权限校验。密码正确后,才进行数据同步,最后不断的、陆陆续续的、持续复制后面的数据,实现这一持续复制数据的实现方式就是复制其操作命令。
57+
首先,通过上述配置主从复制,从节点保存主节点的信息,然后建立 socket 连接。Redis的ping命令是用于客户端检测服务端是否正常运作或消息延时的一种命令,是一种心跳机制,在这里从节点就是客户端,主节点就是服务端。从节点发送ping命令至主节点,如果主节点正常运作则返回pong,这样才能表示双方网络通达。紧接着,如果主节点开启 `requirepass foobared` 参数(foobared 可以认为是安全校验密码),主节点会对从节点进行权限校验。密码正确后,才进行数据同步,最后不断的、陆陆续续的、持续复制后面的数据,实现这一持续复制数据的实现方式就是复制其操作命令。
58+
59+
60+
61+
---
62+
63+
<h3 style="padding-bottom:6px; padding-left:20px; color:#ffffff; background-color:#E74C3C;">故障转移</h3>
64+
65+
对于单个节点而言,有可能出现故障(fail),为了保证该服务的可用性,需要使用其他冗余或备用节点来接替该节点工作,这种拯救方式就是 **故障转移(Failover)**
66+
67+
比如一个 **一主两从** 的高可用方案,主节点工作,从节点作备用:
68+
69+
![一主两从](https://i.loli.net/2019/02/16/5c67baed29b4a.png)
70+
71+
如果主节点(master节点)出现故障,那么服务不可用,从节点(slave节点)也无法从master节点持续复制数据,如何实现故障转移呢?下面是基于客户端的实现。
72+
73+
1. 客户端使用心跳机制,定时检测 master、slave节点活性,比如使用ping命令;
74+
75+
2. 如果master节点在一定时间内无回复,则认为master节点此时不可用;
76+
77+
3. 从slave节点中随机选择或选择一个ping-pong网络较好的一个节点晋升为master,比如6380节点;
78+
79+
4. 6380节点和6381节点先与6379断开复制关系 `slaveof no one`;
80+
81+
5. 然后以6380为master节点,6381为salve节点建立复制关系;
82+
83+
![建立新的主从复制](https://i.loli.net/2019/02/16/5c67c5a831a15.png)
84+
85+
6. 通过心跳检测6379节点故障恢复后,作为salve节点与master节点建立主从复制关系;
86+
87+
![屏幕快照 2019-02-16 下午4.10.30.png](https://i.loli.net/2019/02/16/5c67c61676337.png)
88+
89+
7. 故障转移完成。(其实到了第3步选取6380为主节点后,服务就可用了)
90+
91+
92+
93+
客户端为了高可用,也可以做成多节点,在Redis的master节点出现故障时,客户端多节点通过选举方式来产生新的master节点。从Redis 2.8 版本开始,新加入了 Redis Sentinel 来实现高可用。

0 commit comments

Comments
 (0)