圖解Redis,Redis主從復制與Redis哨兵機制
大家好,我是哪吒。
上一篇分享了??離譜!面試為啥都問Redis?趕緊補一下??,完成了Redis的初體驗。
今天分享一下Redis主從復制與Redis哨兵機制相關的知識點,實現快速入門,豐富個人簡歷,提高面試level,給自己增加一點談資,秒變面試小達人,BAT不是夢。
一、Redis復制是什么?
Redis復制就是主從復制,當主服務器數據發生變化時,自動將新的數據同步到從數據庫。
讀數據庫可以進行讀寫操作,從數據庫一般指用于讀操作。
Redis復制可以保證主數據庫崩潰時可以進行數據恢復。
二、Redis復制能干嘛?
- 讀寫分離
- 容災恢復
- 數據備份
- 水平擴容支撐高并發
三、Redis復制的缺點
1、復制延遲
由于所有的寫操作都發生在master數據庫,然后同步到slave數據庫中,所以會有一定的數據延遲,當系統負擔過重時,延遲越大,slave機器的增加也會增加數據延遲的時間。
2、master宕機
如果master宕機了,默認情況下不會將salve數據庫自動升級為master數據庫。
四、樂觀復制策略
Redis采用樂觀復制策略,容忍一段時間內主從數據庫不一致,但保證最終一致性。這個策略保證了性能,在復制的時候,主數據庫不會阻塞,可以繼續提供服務。
五、Redis復制常用命令
1、info replication
查看節點的主從關系和配置信息。
2、replicaof 主庫Ip 主庫port
在從數據庫的redis.conf中配置。
3、slaveof 主庫IP 主庫port
在運行期間修改slave節點的信息,如果該數據庫已經是其它主數據庫的從數據庫了,那么它會停止與其的主從關系,轉而成為新配置的主庫的從數據庫。
4、slaveof no one
使當前數據庫停止與其它數據庫的同步,升級為主數據庫。
六、Redis復制工作流程
1、slave啟動成功后,會連接master數據庫,發送一個sync命令,同步數據;如果是第一次連接,則會進行一次全量復制,slave自身的數據會被master數據覆蓋清除。
2、master數據庫收到sync命令后,通過RDB開始保存快照,同時將所有接收到的用于修改數據庫的命令緩存起來,master數據庫執行完RDB持久化后,master將RBD文件和所有緩存的命令發送到所有的slave數據庫,完成一次數據同步。
3、slave收到RDB文件和命令緩存后,將其加載到內存中,從而完成復制初始化。
4、repl-ping-replica-period 10,表示master發出ping包的周期默認是10秒。
5、完成首次數據全量同步后,master繼續將新的收集到的修改命令定期傳給slave數據庫,完成數據同步。
6、如果從機重啟了,master的backlog中會記錄offset,master會將offset后面的數據復制給slave。
七、Redis哨兵是什么?
Redis提供了哨兵sentinel機制來監控Redis的性能,如果主數據庫宕機了,根據投票數自動將某一個從數據庫提升為主數據庫,繼續對外提供服務。
1、Redis哨兵的作用
- 主從監控,監控主從數據庫是否運行正常;
- 消息通知,哨兵可以將故障信息發送給客戶端;
- 故障轉移,如果master異常。哨兵會進行主備切換,將其中一個slave轉為master;
- 配置中心,客戶端通過連接哨兵獲取Redis服務集群的主節點信息;
2、使用哨兵的注意事項:
八、實戰演練
1、搭建3個哨兵服務器
監控Redis主從服務器,不存放數據。
2、sentinel.conf參數選項說明
設置要監控的master服務器,quorum表示至少有幾個哨兵認為客觀下線,同意故障轉移的法定票數,因此哨兵服務器一般為奇數個。
sentinel monitor <master-name> 127.0.0.1 6379 <quorum>。
master服務器設置了密碼:
sentinel auth-pass <master-name> <password>。
通過命令,完成哨兵sentinel的啟動,兩種方式,任選其一:
- redis-sentinel /path/to/sentinel.conf
- redis-server /path/to/sentinel.conf --sentinel
九、哨兵運行流程和選舉原理
當一個主從配置中的master失效后,sentinel會選舉出一個新的master用于接替原master的工作,其它slave服務器自動指向新master,實現數據同步。
1、主觀下線
指定多少毫秒之后,主節點沒有應答哨兵,此時哨兵會主觀上認為主節點已經下線。
sentinel down-after-millisecnds <master-name> <millisecnds>
2、客觀下線
多個哨兵sentinel進行投票,根據投票結果才能確認一個master客觀上已經宕機。
3、選舉master三步走:
(1)先選出一個master服務器
當master數據庫宕機后,各個哨兵sentinel節點會進行協商,先通過Raft算法選舉出一個領導者哨兵節點,再由領導者進行master的選舉。
- 根據Redis.conf中,優先級slave-priority或者replica-priority最高的從節點(數字越小優先級越高)。
- 復制偏移位置offset最大的從節點。
- 最小Run ID的從節點。
(2)其它slave服務器連接到master服務器
執行slaveof no one命令會選舉出新的master,并通過slaveof命令將其它從節點成為新master服務器的從節點。
(3)如果舊master服務器恢復正常了,也要成為新master服務器的slave從服務器。
十、總結
介紹了Redis復制、Redis復制的工作流程、Redis哨兵、Redis的實戰演練、Redis哨兵運行流程和選舉原理,文章通俗易懂,值得回味,哈哈。
本文轉載自微信公眾號「哪吒編程」,可以通過以下二維碼關注。轉載本文請聯系哪吒編程公眾號。