redis的主從模式復制的具體步驟
在分布式系統(tǒng)中,希望使用多個服務器來部署redis,存在以下幾種redis的部署方式:
1.主從模式 2.主從模式+哨兵模式 3.集群模式
主從模式的優(yōu)點:可以實現(xiàn)讀寫分離,數(shù)據備份,還能提高讀并發(fā)。
讀取數(shù)據都在多個從節(jié)點中進行讀
多個從節(jié)點都是主節(jié)點的備份,如果主節(jié)點掛了,就可以根據從節(jié)點進行數(shù)據恢復。
因為服務器多了,不再像之前的單點服務器,在高并發(fā)場景下,也能進行讀取數(shù)據。
主從模式:
假如此時有3臺機器,分別部署了redis-server進程。之前一臺機器掛了,redis就掛了,但是現(xiàn)在3臺機器同時掛的概率就小了,redis也就不容易掛了。
此時就可以把其中一個節(jié)點作為“主節(jié)點”,另外兩個作為“從節(jié)點”。從節(jié)點就是主節(jié)點的一個備份,主節(jié)點這邊有什么數(shù)據修改,都會把這樣的修改同步到從節(jié)點上。(從節(jié)點就是主節(jié)點的副本)
注意:redis在主從模式中,是不允許修改從節(jié)點的,只能從從節(jié)點讀取數(shù)據。
主從模式的作用:主要針對“讀操作”進行 并發(fā)量和可用性的提高。
寫操作依賴主節(jié)點。但是主節(jié)點只有一個(如果有多個主節(jié)點,同步數(shù)據是很麻煩的),在業(yè)務場景中,讀操作往往就是比寫操作更頻繁。
主從數(shù)據的同步:
redis提供了psync命令,完成了數(shù)據同步的過程。
psync不需要咱們手動執(zhí)行,redis服務器會在建立好主從同步關系之后,自動進行psync。
從節(jié)點主動執(zhí)行psync,從主節(jié)點這邊拉取數(shù)據。
pysnc replicationid offset
replicationid 是主節(jié)點生成的,主節(jié)點每次重啟,生成的replicationid都是不同的,當從節(jié)點和主節(jié)點建立復制關系的時候,就會從主節(jié)點這邊獲取到replicationid。
offset 偏移量,主節(jié)點和從節(jié)點都會維護 偏移量(整數(shù))
主節(jié)點的偏移量:主節(jié)點會收到修改操作的命令,這些命令都會占用幾個字節(jié),然后主節(jié)點就會把這些修改命令,字節(jié)數(shù)進行累加。
從節(jié)點的偏移量:描述了現(xiàn)在從節(jié)點的數(shù)據同步到什么位置了。
pysnc這里可以從主節(jié)點獲取全量數(shù)據,也可以獲取一部分數(shù)據。
如果offset這里寫的是-1,就是獲取全量數(shù)據。
如果offset這里寫的是具體的數(shù)字,就是從當前偏移量位置來進行獲取。
全量復制具體步驟:

1.從節(jié)點發(fā)送psync命令給主節(jié)點進行數(shù)據同步,因為是第一次進行復制,從節(jié)點沒有主節(jié)點的運行ID和復制偏移量,所以發(fā)送psync ?-1。
2.主節(jié)點根據命令,解析出要進行全量復制,回復+FULLRESYNC響應。
3.從節(jié)點接收主節(jié)點的運行信息進行保存。
4.主節(jié)點執(zhí)行bgsave進行RDB文件的持久化。
5.主節(jié)點發(fā)送RDB文件給從節(jié)點。從節(jié)點保存RDB數(shù)據到本地硬盤。
6.主節(jié)點將在生成rdb到接收完成期間執(zhí)行的寫命令,在緩沖區(qū)中,等到從節(jié)點把RDB文件保存完之后,主節(jié)點再將緩沖區(qū)內的數(shù)據補發(fā)給從節(jié)點。補發(fā)的數(shù)據扔然按照RDB的二進制格式追加寫入到已經接收到的rdb文件中,保持主從一致性。
7.從節(jié)點清空自身原有的舊數(shù)據。
8.從節(jié)點加載RDB文件得到與主節(jié)點的一致的數(shù)據。
9.如果從節(jié)點加載了RDB文件之后,并且開啟了AOF持久化功能,它會進行bgrewriteaof操作,得到最近的AOF文件。
部分復制的具體步驟:

1.當主從節(jié)點之間出現(xiàn)網絡中斷時,如果超過repi-timeout時間,主節(jié)點會認為從節(jié)點故障并終止復制連接。
2.主從連接中斷期間主節(jié)點依然響應命令,但這些復制命令都因網絡中斷無法及時發(fā)送給從節(jié)點,所以暫時將這些命令滯留在復制積壓緩沖區(qū)中。
3.當主從節(jié)點網絡恢復后,從節(jié)點再次連上主節(jié)點。
4.從節(jié)點將之前保存的replicationid和復制偏移量作為psync的參數(shù)發(fā)送給主節(jié)點。請求進行部分復制。
5.主節(jié)點接到psync請求后,進行必要的驗證,隨后根據offset去復制積壓緩沖區(qū)查找合適的數(shù)據,并響應+COUNTINUE給從節(jié)點。
6.主節(jié)點將需要從節(jié)點同步的數(shù)據發(fā)送給從節(jié)點,最終完成一致性。
實時復制:
從節(jié)點和主節(jié)點已經同步好了數(shù)據,但是主節(jié)點會源源不斷的進行收到新的修改數(shù)據的請求。
主節(jié)點上的數(shù)據就會隨之改變。也需要能夠同步到從節(jié)點。從節(jié)點和主節(jié)點會建立TCP的長連接。
然后主節(jié)點把自己收到的修改數(shù)據的請求,通過上述連接,發(fā)給從節(jié)點,從節(jié)點再根據這些請求,修改內存中的數(shù)據。
主從復制的問題:當主節(jié)點掛了,只剩下從節(jié)點的時候,雖然能夠提供讀取數(shù)據的操作,但是從節(jié)點不能自動升級成主節(jié)點。此時就需要程序員手動恢復主節(jié)點。
到此這篇關于redis的主從模式復制的具體步驟的文章就介紹到這了,更多相關redis主從模式復制內容請搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關文章希望大家以后多多支持腳本之家!

