Redis實戰——redis主從復制和集群實現原理


出自:https://blog.csdn.net/nuli888/article/details/52136822

 

redis主從復制
redis主從配置比較簡單,基本就是在從節點配置文件加上:slaveof 192.168.33.130 6379
主要是通過master server持久化的rdb文件實現的。master server 先dump出內存快照文件,然后將rdb文件傳給slave server,slave server 根據rdb文件重建內存表。
redis復制過程如下:
1、slave server啟動連接到master server之后,salve server主動發送SYNC命令給master server
2、master server接受SYNC命令之后,判斷,是否有正在進行內存快照的子進程,如果有,則等待其結束,否則,fork一個子進程,子進程把內存數據保存為文件,並發送給slave server
3、master server子進程進程做數據快照時,父進程可以繼續接收client端請求寫數據,此時,父進程把新寫入的數據放到待發送緩存隊列中
4、slave server 接收內存快照文件之后,清空內存數據,根據接收的快照文件,重建內存表數據結構
5、master server把快照文件發送完畢之后,發送緩存隊列中保存的子進程快照期間改變的數據給slave server,slave server做相同處理,保存數據一致性
6、master server 后續接收的數據,都會通過步驟1建立的連接,把數據發送到slave server
需要注意:slave server如果因為網絡或其他原因斷與master server的連接,當slave server重新連接時,需要重新獲取master server的內存快照文件,slave server的數據會自動全部清空,然后再重新建立內存表,這樣會讓slave server 啟動恢復服務比較慢,同時也給master server帶來較大壓力,可以看出redis的復制沒有增量復制的概念,這是redis主從復制的一個主要弊端,在實際環境中,盡量規避中途增加從庫
redis2.8之前不支持增量,到2.8之后就支持增量了!


redis cluster(集群)
3.0之后的功能,至少需要3(Master)+3(Slave)才能建立集群,是無中心的分布式存儲架構,可以在多個節點之間進行數據共享,解決了Redis高可用、可擴展等問題。

redis集群提供了以下兩個好處
1、將數據自動切分(split)到多個節點
2、當集群中的某一個節點故障時,redis還可以繼續處理客戶端的請求。
一個 redis 集群包含 16384 個哈希槽(hash slot),數據庫中的每個數據都屬於這16384個哈希槽中的一個。集群使用公式 CRC16(key) % 16384 來計算鍵 key 屬於哪個槽。集群中的每一個節點負責處理一部分哈希槽。
集群中的主從復制
集群中的每個節點都有1個至N個復制品,其中一個為主節點,其余的為從節點,如果主節點下線了,集群就會把這個主節點的一個從節點設置為新的主節點,繼續工作。這樣集群就不會因為一個主節點的下線而無法正常工作
注意:
1、如果某一個主節點和他所有的從節點都下線的話,redis集群就會停止工作了。redis集群不保證數據的強一致性,在特定的情況下,redis集群會丟失已經被執行過的寫命令
2、使用異步復制(asynchronous replication)是redis 集群可能會丟失寫命令的其中一個原因,有時候由於網絡原因,如果網絡斷開時間太長,redis集群就會啟用新的主節點,之前發給主節點的數據就會丟失。


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM