1. 程式人生 > >Linux下redis主從同步

Linux下redis主從同步

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主從同步