redis的舊版復(fù)制
了解舊版復(fù)制命令SLAVEOF
從機(jī)使用命令SLAVEOF 可以復(fù)制另一臺(tái)服務(wù)器的數(shù)據(jù)
如: 172.18.0.100:6379 172.18.0.101:6379
redis-cli -h 172.18.0.100 -p 6379
172.18.0.100:6379:> SLAVEOF 172.18.0.101 6379
執(zhí)行完畢后垦沉,
172.18.0.100:6379
與172.18.0.101:6379
一致
172.18.0.100:6379成為
172.18.0.101:6379`從機(jī),并保持?jǐn)?shù)據(jù)一致仍劈。
從機(jī)使用SYNC命令復(fù)制數(shù)據(jù)
1.redis舊版的sync命令復(fù)制(同步功能)
1.從服務(wù)器向主服務(wù)器發(fā)送SYNC命令
2.主服務(wù)器收到 命令后厕倍,執(zhí)行BGSAVE命令。在后臺(tái)生成一個(gè)RDB贩疙,并使用緩沖區(qū)記錄從現(xiàn)在開始執(zhí)行的所有寫命令 讹弯。
3.主服務(wù)器的BGSAVE執(zhí)行完畢后况既,將生成的RDB文件發(fā)送給從服務(wù)器,從服務(wù)器接收并載入RDB文件组民,將自己的 數(shù)據(jù)庫(kù)狀態(tài)更新至服務(wù)器執(zhí)行BGSAVR命令時(shí)的狀態(tài)棒仍。
4.主服務(wù)器將記錄在緩沖區(qū)里面的所有寫命令發(fā)送給從服務(wù)器,從服務(wù)器執(zhí)行這些寫命令臭胜,將從服務(wù)器的狀態(tài)更新至主服務(wù)器當(dāng)前所處的狀態(tài) 莫其。
圖示
2.redis命令傳播
對(duì)同步命令SYNC執(zhí)行完畢后,主從數(shù)據(jù)庫(kù)狀態(tài)一致耸三。
每當(dāng)主服務(wù)器執(zhí)行客戶端的寫命令后乱陡,主數(shù)據(jù)庫(kù)修改,導(dǎo)致主從不一致仪壮。
為了讓同步后的主從數(shù)據(jù)庫(kù)一致憨颠,主服務(wù)器對(duì)從服務(wù)器進(jìn)行命令傳播操作。
主從命令傳播的操作步驟
1.主服務(wù)器將自己執(zhí)行的寫命令發(fā)送給從服務(wù)器积锅。
2.從服務(wù)器接收到主服務(wù)器發(fā)送的寫命令后爽彤,自己也執(zhí)行一下。
3.執(zhí)行完成缚陷,回歸一致适篙。
PS: DEL 命令也是屬于寫命令
3.舊版復(fù)制功能的缺點(diǎn)
1.初次復(fù)制時(shí),進(jìn)行完整的同步和命令傳播
2.斷線后復(fù)制,同樣進(jìn)行完整的同步和命令傳播蹬跃,但是效率很低匙瘪。
斷線后復(fù)制的步驟
1.主從服務(wù)器斷開
2.從機(jī)嘗試重連 (N次)
3.從機(jī)連接
4.從機(jī)使用SYNC命令復(fù)制數(shù)據(jù)(查看同步功能圖示)
問題所在
1.再次使用SYNC命令后消耗主服務(wù)器大量的資源(CPU,Memory,磁盤IO,網(wǎng)絡(luò)帶寬)
會(huì)影響客戶端命令的響應(yīng)時(shí)間。
2.接收到RDB文件載入后蝶缀,從機(jī)會(huì)阻塞而沒有辦法處理命令請(qǐng)求丹喻。
3.斷線的時(shí)間越短,期間需要傳播的寫命令就越少翁都。對(duì)較少的寫命令來對(duì)從機(jī)進(jìn)行一個(gè)完整的復(fù)制是沒有必要的