<Redis> 入門六 主從複製方式的叢集
1.叢集如何操作
現在有三臺虛擬機器,ip分別為100,105,106,將100作為master,其他兩臺作為slave
1.vim redis.conf
以前的版本是 slaveof <masterip> <masterport>
我使用的是redis 5.0.3
所以是 replicaof <masterip><masterport> 分別代表主節點ip和主節點埠
2.修改兩個從節點,配置為如下,設定 eplicaof <masterip><masterport>
3.完成配置
2.檢查是否配置成功
重啟三臺伺服器,然後在從節點下輸入指令: info replication
可以看到role是slave,以及主機ip、埠,狀態等資訊,即代表配置成功。
master傳送命令
在slave端獲取
無法在從節點上進行寫的操作
3.主從複製的原理
3.1 全量同步
1.slave 第一次連線 或 重連 到 master 上以後,會向 master 傳送 sync 的命令
2.master收到 sync 命令,執行 bgsave 生成 rbd 快照,新的命令會寫進緩衝區
3.master執行完bgsave後,將 rbd 檔案傳送給各slave節點
4.slave接收到 rbd 檔案,丟棄舊的 rbd 資料,執行新的rbd快照
5.master傳送完rbd快照後,將緩衝區資料傳送到slave
6.slave完成對rbd的載入後,執行master緩衝區的寫命令
3.2 增量同步
slave伺服器完成初始化,工作正常,主伺服器發生寫操作同步到從伺服器
增量同步主要是:主伺服器每執行一條寫命令就會向從伺服器傳送相同的寫命令,從伺服器接收並執行收到的命令
3.3 部分同步
當master伺服器斷線後,從伺服器需要重新發送sync命令,這樣會消耗大量伺服器 cpu、記憶體、磁碟,並且傳送rdb還會消耗網路資源等
在redis2.8版本後,部分同步 psync 來執行同步的命令。
master在記憶體中給每個slave維護了一份同步日誌和同步標識。每個slave和master同步都會攜帶自己的同步標識和上次同步的最後位置
當master斷線重連後,slave帶著自己的同步標識,和上次同步的最後位置去找master,如果slave的偏移量在master同步日誌中
那麼slave從偏移量開始的位置繼續同步,無需進行全量同步。
3.4 同步策略
第一次連線,進行全量同步,全量同步結束後,進行增量同步。
如果斷開,嘗試部分同步,不行的話,依然採用全量同步。
3.5 部分命令
通過replconf listening-port 6379
sync,去向主伺服器傳送同步命令,此時進入通過輸出模式,並不斷髮送ping包
master寫入資料
slave 就會輸出從緩衝區來的資料
replica-server-stale-data yes 意味著必須完成 master 同步之後才能做接下來的操作。可以防止資料不一致的情況
缺點:主從複製時,當 master 宕機後,從伺服器沒辦法進行動態選舉,從只能讀取就的資料。