服務器配置:(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
解壓壓縮包並配置:
切換用戶(生產環境少用ROOT用戶操作)
[jerry@master data]$ sudo chown -R jerry.root redis-5.0.5
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
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
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
[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
[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
看下三臺服務器主從狀態信息:
接着我們創建鍵值,測試主從是否同步:
三個結點我們都創建一個鏈接,方便我們使用。
[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
觀察主從信息狀態:
info
重啓主後服務器觀察發現未保存的數據將丟失:
結論:
使用主從模式時應注意master節點的持久化操作,matser節點在未使用持久化的情況詳情下如果宕機,並自動重新拉起服務,從服務器會出現丟失數據的情況。數據丟失的原因:因爲master服務掛了之後,重啓服務後,slave節點會與master節點進行一次完整的重同步操作,所以由於master節點沒有持久化,就導致slave節點上的數據也會丟失掉。所以在配置了Redis的主從模式的時候,應該打開主服務器的持久化功能。
測試使用哨兵模式,自動監視Master節點,當前掛掉後,自動將Slaver節點變爲Master節點:
然後手動切換從(26.206):
127.0.0.1:7000> slaveof 192.168.26.112 7000
127.0.0.1:7000> set name tom
小結:
- Master可讀可寫,Slaver只能讀,不能寫
- Master可以對應多個Slaver,但是數量越多壓力越大,延遲就可能越嚴重
- Master寫入後立即返回,幾乎同時將寫入異步同步到各個Slaver,所以基本上延遲可以忽略
- 可以通過slaveof no one命令將Slaver升級爲Master(當Master掛掉時,手動將某個Slaver變爲Master)
- 可以通過sentinel哨兵模式監控Master,當Master掛掉時自動選舉Slaver變爲Master,其它Slaver自動重連新的Master(自動不成功有時需要使用手動切主,暫時還沒找到具體原因)