1. 程式人生 > 其它 >Redis系列(三)-Redis replication 實現主從複製(讀寫分離)

Redis系列(三)-Redis replication 實現主從複製(讀寫分離)

Redis replication 是一種 master-slave 模式的複製機制,這種機制使得 slave 節點可以成為與 master 節點完全相同的副本。資料流是單向的,master到slave

replication 主要用於解決兩個問題:
1. 讀擴充套件
一個 master 用於寫,多個 slave 用於分攤讀的壓力。
2. 高可用
如果 master 掛掉了,可以提升(promote)一個 slave 為新的 master,進而實現故障轉移(failover)。

redis replication完整流程
(1)slave node啟動,僅僅儲存master node的資訊,包括master node的host和ip,但是複製流程沒開始(master host和ip在redis.conf裡面的slaveof配置)。


(2)slave node內部有個定時任務,每秒檢查是否有新的master node要連線和複製,如果發現,就跟master node建立socket網路連線
(3)slave node傳送ping命令給master node
(4)口令認證,如果master設定了requirepass,那麼salve node必須傳送masterauth的口令過去進行認證
(5)master node第一次執行全量複製,將所有資料發給slave node
(6)master node後續持續將寫命令,非同步複製給slave node

核心機制
第一次slave連線msater的時候,執行的全量複製。
(1)offset


master會在自身不斷累加offset,slave也會在自身不斷累加offset。
slave每秒都會上報自己的offset給master,同時master也會儲存每個slave的offset。
(2)backlog
master node有一個backlog,預設是1MB大小。
master node給slave node複製資料時,也會將資料在backlog中同步寫一份。
backlog主要是用來做全量複製中斷候的增量複製的。
(3)master run id
info server,可以看到master run id。
如果根據host+ip定位master node,是不靠譜的,如果master node重啟或者資料出現了變化,那麼slave node應該根據不同的run id區分,run id不同就做全量複製。

如果需要不更改run id重啟redis,可以使用redis-cli debug reload命令。

(4)psync
從節點使用psync從master node進行復制,psync runid offset。
master node會根據自身的情況返回響應資訊,可能是FULLRESYNC runid offset觸發全量複製,可能是CONTINUE觸發增量複製。


實操

參考Redis系列(一)-CentOS7下Redis單機安裝+自啟動 在兩臺器安裝redis。

伺服器列表

  • Master node1(192.168.2.221)
  • Slave node2(192.168.2.230)

1. 配置Master的redis配置檔案
開啟安全認證

requirepass 123456

2.配置Slave的redis配置檔案

slaveof node1 6379
slave-read-only yes 預設開啟
啟用安全認證
masterauth redis

3.驗證

在Master新增資料

在Slave節點查詢

主從部署成功。

說明

若失敗請檢查:

1.關閉防火牆

2.redis配置遠端訪問

3.開發redis埠

本篇內容是參考網路教程學習過程中的筆記
開發工作著,生活快樂著,留下總結,相互交流,共同進步