redis主備同步配置方法
阿新 • • 發佈:2018-12-25
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. 幾個可能用到的引數
- slave-read-only:兩個值,yes/no,用於控制slave是否為只讀
- slave-serve-stale-data: 用於控制當slave和master失去連線或正在進行同步時,slave的行為。
- yes(預設):仍然正常處理客戶端請求,但資料可能是舊的
- no:向客戶端回覆SYNC with master in progress
4. 建議
如果配置了主備,建議master開啟資料持久化,或者至少不要讓master在掛掉後可以自動重啟。
可以想象這樣一個場景:master未開啟持久化,master掛了後被監控重啟。這時,master中沒有任何資料,slave由於和master同步,上面的資料也將被清空!