1. 程式人生 > >redis主備同步配置方法

redis主備同步配置方法

1. 配置主備

假設主機ip:10.136.16.146 port:6789
備機ip:10.136.30.144

我們有兩種方式為其配置備機

方法1:修改備機配置檔案

redis.conf中增加

daemonize yes
slaveof 10.136.16.146 6789
# 如果主機有密碼,則修改下面一行即可
# masterauth <master-password>

在備機上啟動redis

redis-server ./tmp/redis.conf

連線上備機reids,執行info replication, 可以看到下面的結果

127.0.0.1:9303
> info replication # Replication role:slave master_host:10.136.16.146 master_port:6789 master_link_status:up master_last_io_seconds_ago:0 master_sync_in_progress:0 ...

此時,我們的主備就已配好。資料會自動同步(包括主機之前的資料),如果之前主機中有資料,此時已可以在備機中讀取。

連線主機,執行info replication,可以看到下面結果

10.136.16.146:6789> info replication
# Replication
role:master connected_slaves:1 slave1:ip=10.136.30.144,port=9303,state=online,offset=40383758059,lag=0 master_repl_offset:40383983932 ...

可以看到,主機上已連線一臺備份redis,正是我們剛剛啟動的那臺。

方法2:動態修改備機配置

當然,有時你可能沒有許可權修改備機redis配置檔案或重啟redis-server。這時,如果你想配置主備,只需要連上備機redis,執行:

slaveof 10.136.16.146 6789

#主機有密碼,還要執行這條
#config set masterauth <password>

同樣可以達到配置主備的目的

2.取消主備

有兩種方法取訊息主備
1. 直接在配置檔案中去掉slaveof的配置,然後重啟redis-server
2. 連入備機,執行

slaveof no one

取消主備後,在備機上執行info replication, 會看到

127.0.0.1:9303> info replication
# Replication
role:master
connected_slaves:0
master_repl_offset:0
repl_backlog_active:0
repl_backlog_size:1048576
repl_backlog_first_byte_offset:0
repl_backlog_histlen:0

當前機器的角色已不再是slave, 而是master

3. 幾個可能用到的引數

  1. slave-read-only:兩個值,yes/no,用於控制slave是否為只讀
  2. slave-serve-stale-data: 用於控制當slave和master失去連線或正在進行同步時,slave的行為。
    • yes(預設):仍然正常處理客戶端請求,但資料可能是舊的
    • no:向客戶端回覆SYNC with master in progress

4. 建議

如果配置了主備,建議master開啟資料持久化,或者至少不要讓master在掛掉後可以自動重啟。

可以想象這樣一個場景:master未開啟持久化,master掛了後被監控重啟。這時,master中沒有任何資料,slave由於和master同步,上面的資料也將被清空!