1. 程式人生 > 實用技巧 >Redis主從複製

Redis主從複製

一、什麼是主從複製

  主從複製就是主機更新資料之後,根據配置和策略,自動同步到從機的機制,其中Master以寫為主,從機以讀為主.

二、主從複製的目的

  讀寫分離、效能擴充套件.

  容災快速恢復.

三、主從複製原理

  1、每次從機連通後都會給主機發送sync(同步)指令

  2、主機接收到指令之後,立即進行存檔操作,傳送RDB檔案給從機

  3、從機接收到RDB檔案之後,進行全盤載入

  4、載入完成之後,以後主機每次進行寫操作,都會立刻將相同的命令傳送給從機,從機執行相同的命令進行資料備份

四、案例演示

  1、一主二從模式演示

  一、主從複製配置

  準備好配置檔案redis-6379.conf、redis-6380.conf、redis-6381.conf

  redis-6379.conf配置檔案

// 沿用Redis原生出廠的配置檔案的內容
include /usr/local/myredis/bin/redis.conf

=====下面這些配置會覆蓋掉出廠預設的配置檔案內容=====
// 保護模式關閉
protected-mode no

// 埠6379
port 6379

// 允許後臺啟動
daemonize yes

// 生成的日誌檔案路徑和名稱
logfile /usr/local/myredis/bin/log/redis-6379.log

// 生成的RDB檔名稱
dbfilename dump-6379.rdb

// 生成的RDB檔案路徑
dir /usr/local/myredis/bin/dump/

  redis-6380.conf配置檔案

include /usr/local/myredis/bin/redis.conf
protected-mode no
port 6380
daemonize yes
logfile /usr/local/myredis/bin/log/redis-6380.log
dbfilename dump-6380.rdb
dir /usr/local/myredis/bin/dump/

  redis-6381.conf配置檔案

include /usr/local/myredis/bin/redis.conf
protected-mode no
port 6381
daemonize yes
logfile /usr/local/myredis/bin/log/redis-6381.log
dbfilename dump-6381.rdb
dir /usr/local/myredis/bin/dump/

  二、同時啟動redis-6379.conf、redis-6379.conf、redis-6379.conf三臺伺服器.

  三、使用命令slaveof <masterip> <masterport> 來建立主從關係,並且使用info replication來檢視主從關係.

  四、通過下圖可以看到6379、6380、6381三臺服務均已正常啟動,並且6379作為主機,而6380、6381作為從機.

.

  五、一主二從模式相關測試案例步驟

    開啟埠為6379的主機---->設定key1、key2----->6380、6381和6379建立主從關係---->6380和6381查詢keys *,結果存在key1、key2---->手動down掉主機6379---->使用info replication查詢6380、6381的狀態,發現他們的主機依然是6379,只不過狀態是down.

    1、切入點問題,slave1、slave2是從頭開始備份主機資料,還是從切入點開始複製資料.?

      開始6379並沒有與6380和6381建立主從關係就設定了key1、key2,他們建立主從關係之後能查到key1、key2說明只要他們建立關係,就直接能全盤複製到主機的資料,和切入時機沒有關係.

    2、主機的讀寫許可權、從機的讀寫許可權?

      從下圖中可以看到如下資訊:(error) READONLY You can't write against a read only replica.說明從機只能讀不能寫,主機可以寫也可以讀,但是主機一般只做與寫有關的操作.

    3、主機shutdown後情況如何,從機是尚未還是原地待命?

      從下圖中可以看出,主機6379shutdown之後,從機6380和6381的角色並沒有轉變,還是slave,並且主機都是6379.

 

    4、主機回來之後,主機新增記錄,從機還能順利複製嗎?

      主機回來之後,新增記錄,從機會繼續複製主機資料.

    5、其中一臺從機down掉之後,他依舊 能跟上大部隊嗎?

      從機6381shutdown之後,重新開啟6381伺服器,這個時候6381的角色變成了master,它不再作為6379的從了,如果想繼續建立主從關係需要再次使用命令slaveof 127.0.0.1 6379這個時候從機6381又會繼續全盤載入6379RDB中的全部資料.