W3Cschool
恭喜您成為首批注冊用戶
獲得88經(jīng)驗值獎勵
Redis 的復制功能分為同步(sync)和命令傳播(command propagate)兩個操作:
本節(jié)接下來將對同步和命令傳播兩個操作進行詳細的介紹。
當客戶端向從服務器發(fā)送 SLAVEOF 命令, 要求從服務器復制主服務器時, 從服務器首先需要執(zhí)行同步操作, 也即是, 將從服務器的數(shù)據(jù)庫狀態(tài)更新至主服務器當前所處的數(shù)據(jù)庫狀態(tài)。
從服務器對主服務器的同步操作需要通過向主服務器發(fā)送 SYNC 命令來完成, 以下是 SYNC 命令的執(zhí)行步驟:
圖 IMAGE_SYNC 展示了 SYNC 命令執(zhí)行期間, 主從服務器的通信過程。
表 TABLE_SYNC_EXAMPLE 展示了一個主從服務器進行同步的例子。
時間 | 主服務器 | 從服務器 |
---|---|---|
T0 | 服務器啟動。 | 服務器啟動。 |
T1 | 執(zhí)行 SET k1 v1 。 |
|
T2 | 執(zhí)行 SET k2 v2 。 |
|
T3 | 執(zhí)行 SET k3 v3 。 |
|
T4 | 向主服務器發(fā)送 SYNC 命令。 | |
T5 | 接收到從服務器發(fā)來的 SYNC 命令, 執(zhí)行 BGSAVE 命令, 創(chuàng)建包含鍵 k1 、 k2 、 k3 的 RDB 文件, 并使用緩沖區(qū)記錄接下來執(zhí)行的所有寫命令。 |
|
T6 | 執(zhí)行 SET k4 v4 , 并將這個命令記錄到緩沖區(qū)里面。 |
|
T7 | 執(zhí)行 SET k5 v5 , 并將這個命令記錄到緩沖區(qū)里面。 |
|
T8 | BGSAVE 命令執(zhí)行完畢, 向從服務器發(fā)送 RDB 文件。 | |
T9 | 接收并載入主服務器發(fā)來的 RDB 文件 , 獲得 k1 、 k2 、 k3 三個鍵。 |
|
T10 | 向從服務器發(fā)送緩沖區(qū)中保存的寫命令 SET k4 v4 和 SET k5v5 。 |
|
T11 | 接收并執(zhí)行主服務器發(fā)來的兩個 SET 命令, 得到 k4 和 k5 兩個鍵。 |
|
T12 | 同步完成, 現(xiàn)在主從服務器兩者的數(shù)據(jù)庫都包含了鍵 k1 、k2 、 k3 、 k4 和 k5 。 |
同步完成, 現(xiàn)在主從服務器兩者的數(shù)據(jù)庫都包含了鍵 k1 、 k2 、k3 、 k4 和 k5 。 |
在同步操作執(zhí)行完畢之后, 主從服務器兩者的數(shù)據(jù)庫將達到一致狀態(tài), 但這種一致并不是一成不變的 —— 每當主服務器執(zhí)行客戶端發(fā)送的寫命令時, 主服務器的數(shù)據(jù)庫就有可能會被修改, 并導致主從服務器狀態(tài)不再一致。
舉個例子, 假設一個主服務器和一個從服務器剛剛完成同步操作, 它們的數(shù)據(jù)庫都保存了相同的五個鍵 k1
至 k5
, 如圖 IMAGE_CONSISTENT 所示。
如果這時, 客戶端向主服務器發(fā)送命令 DEL k3
, 那么主服務器在執(zhí)行完這個 DEL 命令之后, 主從服務器的數(shù)據(jù)庫將出現(xiàn)不一致: 主服務器的數(shù)據(jù)庫已經(jīng)不再包含鍵 k3
, 但這個鍵卻仍然包含在從服務器的數(shù)據(jù)庫里面, 如圖 IMAGE_INCONSISTENT 所示。
為了讓主從服務器再次回到一致狀態(tài), 主服務器需要對從服務器執(zhí)行命令傳播操作: 主服務器會將自己執(zhí)行的寫命令 —— 也即是造成主從服務器不一致的那條寫命令 —— 發(fā)送給從服務器執(zhí)行, 當從服務器執(zhí)行了相同的寫命令之后, 主從服務器將再次回到一致狀態(tài)。
在上面的例子中, 主服務器因為執(zhí)行了命令 DEL k3
而導致主從服務器不一致, 所以主服務器將向從服務器發(fā)送相同的命令 DEL k3
: 當從服務器執(zhí)行完這個命令之后, 主從服務器將再次回到一致狀態(tài) —— 現(xiàn)在主從服務器兩者的數(shù)據(jù)庫都不再包含鍵 k3
了, 如圖 IMAGE_PROPAGATE_DEL_k3 所示。
Copyright©2021 w3cschool編程獅|閩ICP備15016281號-3|閩公網(wǎng)安備35020302033924號
違法和不良信息舉報電話:173-0602-2364|舉報郵箱:jubao@eeedong.com
掃描二維碼
下載編程獅App
編程獅公眾號
聯(lián)系方式:
更多建議: