redis主從複製故障恢復及持久化的意義

redis主從複製故障恢復及持久化的意義
服務器配置:(centos7)

服務器IP 安裝組件 節點 備註
192.168.27.210 redis-5.0.5 master 一主兩從架構
192.168.26.112 redis-5.0.5 slave
192.168.26.206 redis-5.0.5 slave

最新版下載地址到各結點:Wget http://download.redis.io/releases/redis-5.0.5.tar.gz
redis主從複製故障恢復及持久化的意義
解壓壓縮包並配置:
redis主從複製故障恢復及持久化的意義
redis主從複製故障恢復及持久化的意義
切換用戶(生產環境少用ROOT用戶操作)
[jerry@master data]$ sudo chown -R jerry.root redis-5.0.5
redis主從複製故障恢復及持久化的意義
Cd /data/redis-5.0.5/src
make
192.168.27.210配置文件:vim /data/redis-5.0.5/redis-m-7000.conf
bind 0.0.0.0
port 7000
logfile "7000.log"
dbfilename "dump-7000.rdb"
daemonize yes
rdbcompression yes

192.168.26.112配置:
Cd /data/redis-5.0.5/src
make

[jerry@BDDB redis-5.0.5]$ vim /data/redis-5.0.5/redis-s-7000.conf
redis主從複製故障恢復及持久化的意義
bind 0.0.0.0
port 7000
logfile "7000.log"
dbfilename "dump-7000.rdb"
daemonize yes
rdbcompression yes
slaveof 192.168.27.210 7000

192.168.26.206配置:
Cd /data/redis-5.0.5/src
make
redis主從複製故障恢復及持久化的意義
bind 0.0.0.0
port 7000
logfile "7000.log"
dbfilename "dump-7000.rdb"
daemonize yes
rdbcompression yes
slaveof 192.168.27.210 7000
分別啓動各結點:
[jerry@master src]$ ./redis-server ../redis-m-7000.conf
redis主從複製故障恢復及持久化的意義
[jerry@BDDB src]$ sudo ln -s /data/redis-5.0.5/src/redis-server /usr/bin/redis-server
[jerry@BDDB src]$ redis-server ../redis-s-7000.conf
redis主從複製故障恢復及持久化的意義
[jerry@DGIDC src]$ sudo ln -s /data/redis-5.0.5/src/redis-server /usr/bin/redis-server
[jerry@DGIDC src]$ redis-server ../redis-s-7000.conf
[jerry@DGIDC src]$ ss -tnl
redis主從複製故障恢復及持久化的意義
看下三臺服務器主從狀態信息:
redis主從複製故障恢復及持久化的意義
接着我們創建鍵值,測試主從是否同步:
三個結點我們都創建一個鏈接,方便我們使用。
[jerry@master src]$ sudo ln -s /data/redis-5.0.5/src/redis-cli /usr/bin/redis-cli
[jerry@BDDB src]$ sudo ln -s /data/redis-5.0.5/src/redis-cli /usr/bin/redis-cli
[jerry@DGIDC src]$ sudo ln -s /data/redis-5.0.5/src/redis-cli /usr/bin/redis-cli
觀察主從信息狀態:
redis主從複製故障恢復及持久化的意義
info
redis主從複製故障恢復及持久化的意義
redis主從複製故障恢復及持久化的意義
重啓主後服務器觀察發現未保存的數據將丟失:
redis主從複製故障恢復及持久化的意義
redis主從複製故障恢復及持久化的意義
結論:
使用主從模式時應注意master節點的持久化操作,matser節點在未使用持久化的情況詳情下如果宕機,並自動重新拉起服務,從服務器會出現丟失數據的情況。數據丟失的原因:因爲master服務掛了之後,重啓服務後,slave節點會與master節點進行一次完整的重同步操作,所以由於master節點沒有持久化,就導致slave節點上的數據也會丟失掉。所以在配置了Redis的主從模式的時候,應該打開主服務器的持久化功能。
測試使用哨兵模式,自動監視Master節點,當前掛掉後,自動將Slaver節點變爲Master節點:
redis主從複製故障恢復及持久化的意義
然後手動切換從(26.206):
redis主從複製故障恢復及持久化的意義
127.0.0.1:7000> slaveof 192.168.26.112 7000
redis主從複製故障恢復及持久化的意義
127.0.0.1:7000> set name tom
redis主從複製故障恢復及持久化的意義
小結:

  1. Master可讀可寫,Slaver只能讀,不能寫
  2. Master可以對應多個Slaver,但是數量越多壓力越大,延遲就可能越嚴重
  3. Master寫入後立即返回,幾乎同時將寫入異步同步到各個Slaver,所以基本上延遲可以忽略
  4. 可以通過slaveof no one命令將Slaver升級爲Master(當Master掛掉時,手動將某個Slaver變爲Master)
  5. 可以通過sentinel哨兵模式監控Master,當Master掛掉時自動選舉Slaver變爲Master,其它Slaver自動重連新的Master(自動不成功有時需要使用手動切主,暫時還沒找到具體原因)
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章