Linux下redis主從同步
阿新 • • 發佈:2018-12-08
bfile daemon stat 從庫 圖片 新的 conf get 調用
redis主從同步
原理 :
1. 從服務器像主服務器發送SYNC命令.
2. 接到SYNC命令的主服務器會調用BGSAVE命令, 創建一個RDB文件, 並使用緩沖區記錄接下來執行的所有命令.
3. 當主服務器執行完BGSAVE命令時, 它會向從服務器發送RDB文件. 而從服務器則會接受並載入這個文件.
4. 主服務器將緩沖區存儲的所有寫命令發送給從服務器執行.
-------------------------------
1. 在開啟主從復制的時候, 使用的是RDB方式同步主從數據的.
2. 同步開始之後, 通過主庫命令傳播的方式, 主動的復制方式實現.
3. 2.8以後實現PSYNC的機制, 實現斷線重連.
實驗環境準備
準備兩個或兩個以上的redis實例 :
mkdir /data/638{0..2} # 創建6380, 6381, 6382文件夾
配置文件實例 :
# vim /data/6380/redis.conf port 6380 daemonize yes pidfile /data/6380/redis.pid loglevel notice logfile "/data/6380/redis.log" dbfilename dump.rdb dir /data/6380 protected-mode no
# vim /data/6381/redis.conf port 6381 daemonize yes pidfile /data/6381/redis.pid loglevel notice logfile "/data/6381/redis.log" dbfilename dump.rdb dir /data/6381 protected-mode no
# vim /data/6382/redisconf port 6382 daemonize yes pidfile /data/6382/redis.pid loglevel notice logfile "/data/6382/redis.log" dbfilename dump.rdb dir /data/6382 protected-mode no
啟動三個redis實例 :
redis-server /data/6380/redis.conf redis-server /data/6381/redis.conf redis-server /data/6382/redis.conf
預主從規劃 :
主節點:6380
從節點:6381、6382
查看redis的身份信息, 通過info參數() 此時還未配置主從, 因此身份都是master身份 :
redis-cli -p 6382 info Replication redis-cli -p 6381 info Replication redis-cli -p 6380 info Replication
配置主從身份, 通過命令指明master節點信息 :
redis-cli -p 6381
127.0.0.1:6381> SLAVEOF 127.0.0.1 6380
----------------------------------------------------------
redis-cli -p 6382
127.0.0.1:6382> SLAVEOF 127.0.0.1 6380
測試寫入數據, 主庫寫入數據, 檢查從庫數據 :
主 127.0.0.1:6380> set name chaoge 從 127.0.0.1:6381>get name
手動進行主從復制故障切換 :
#關閉主庫6380 redis-cli -p 6380 shutdown
檢查從庫主從信息, 此時master_link_status:down :
redis-cli -p 6381 info replication redis-cli -p 6382 info replication
既然主庫掛了, 就要在從庫內選一個新的主庫 :
1. 將6381關閉從庫身份 :
redis-cli -p 6381
info replication
slaveof no one
2. 將6382設為6381的從庫 :
6382連接到6381: [root@db03 ~]# redis-cli -p 6382 127.0.0.1:6382> SLAVEOF no one 127.0.0.1:6382> SLAVEOF 127.0.0.1 6381
Linux下redis主從同步