Redis 主從同步的過程
配置好 slave 伺服器連接配接的master後, slave 會建立和 master 的連接配接,然後發送 sync 指令。無論是第一次同步建立的連接配接還是連接配接斷開後的重新連接配接, master 都會啟動一個背景程序,将資料庫快照儲存到檔案中.同時 master 主程序會開始收集新的寫指令并緩存起來。當背景程序完成寫檔案後, master 就将快照檔案發送給 slave , slave 将檔案儲存到磁盤上,然後加載到記憶體将資料庫快照 恢複 到 slave 上。slave完成快照檔案的恢複後, master 就會把緩存的指令都轉發給 slave,slave更新記憶體資料庫 。後續 master 收到的寫指令都會通過開始建立的連接配接發送給 slave 。從 master 到 slave 的同步資料的指令和從 client到master 發送的指令使用相同的協定格式。當 master 和 slave 的連接配接斷開時, slave 可以自動重建立立連接配接。如果 master 同時收到多個 slave 發來的同步連接配接指令,隻會使用啟動一個程序來寫資料庫鏡像,然後發送給所有 slave 。
Redis 主從同步的特點
主從同步具有明顯的分布式緩存特點,主要包括這些方面:
1 )一個 master 可以有多個 slave,一個slave也可以有多個slave ;
2 ) slave 不僅可以連接配接到 master , slave 也可以連接配接其他 slave 形成樹狀結構;
3 )主從同步不會阻塞 master,但是會阻塞slave 。也就是說當一個或多個 slave 與 master 進行初次同步資料時, master 可以繼續處理 client 發來的請求。相反 slave 在初次同步資料時則會阻塞不能處理 client 的請求;
4 )主從同步可以用來提高系統的可伸縮性,我們可以用多個 slave 專門處理 client 的讀請求, 也可以用來做簡單的資料備援或者隻在slave上進行持久化進而提升叢集的整體性能。
主從複制優化要點:
Master最好不要做任何持久化工作,包括記憶體快照和AOF日志檔案,特别是不要啟用記憶體快照做持久化。
如果資料比較關鍵,某個Slave開啟AOF備份資料,政策為每秒同步一次。
為了主從複制的速度和連接配接的穩定性,Slave和Master最好在同一個區域網路内。
為了Master的穩定性,主從複制不要用圖狀結構,用單向連結清單結構更穩定,即主從關系為:Master<--Slave1<--Slave2<--Slave3
Redis主從配置步驟:
1、編輯主從配置檔案
主配置檔案:
include ./redis.conf
daemonize yes
pidfile /var/run/redis.pid
port 6379
bind 192.168.10.128
logfile /opt/redis/logs/redis.log
requirepass 123456
從配置檔案:
include ./redis.conf
daemonize yes
pidfile /var/run/redis2.pid
port 6380
bind 192.168.10.128
logfile /opt/redis/logs/redis2.log
slaveof 192.168.10.128 6379
masterauth 123456
requirepass 234567
2、啟動主Redis:
cd /opt/redis/bin
redis-server ./local-redis.conf
tail -f /opt/redis/logs/redis.log檢視日志
3、啟動從Redis:
cd /opt/redis/bin2
redis-server ./local-redis.conf
tail -f /opt/redis/logs/redis2.log檢視日志
4、測試資料同步:
終端一:
cd /opt/redis/bin
redis-cli -h 192.168.10.128 -p 6379 -a 123456
set cjm 123
get cjm
終端二:
cd /opt/redis/bin2
redis-cli -h 192.168.10.128 -p 6380 -a 234567
get cjm
主從切換的步驟:
停止主Redis
redis-cli -h 192.168.10.128 -p 6379 -a 123456
shutdown
将從redis設成主redis
redis-cli -h 192.168.10.128 -p 6380 -a 234567
slaveof NO ONE
測試從redis是否切換為主redis
set cjm 111
get cjm
原來的主redis恢複正常了,要重新切換回去
将現在的主redis的資料進行儲存
redis-cli -h 192.168.10.128 -p 6380 -a 234567
save
将現在的主redis根目錄下dump.rdb檔案拷貝覆寫到原來主redis的根目錄
cp -frp /opt/redis/bin2/dump.rdb /opt/redis/bin/dump.rdb
啟動原來的主redis
redis-server ./local-redis.conf
tail -f /opt/redis/logs/redis.log
在現在的主redis中切換
slaveof 192.168.10.128 6379