單台redis會遇到單點故障的問題,為瞭解決redis的高可用,主從複製應該是學習的第二個步驟。本文想達到的目的是,一個master帶一個slave,而slave又帶了一個slave,這樣的好處是,當master故障後,直接把slaver1改為master,其他的配置不需要修改,服務又可以正常使用。
作為master的redis設定檔不需要修改,此處只修改slave1和slave12的設定檔,對於slave1隻需在redis.conf中找到# slaveof <masterip> <masterport>並修改為 slaveof192.168.1.18 6379 然後儲存即可,而slave12則修改為slaveof 192.168.10.10 6379 ,這樣就可以了,啟動slave1和slave12試試吧。
在192.168.1.18上執行redis-cli,使用info命令,在# Replication處能看到
role:master
connected_slaves:1
slave0: 192.168.10.10,6379,online
在192.168.10.10上的redis-cli中可以看到:
# Replication
role:slave
master_host: 192.168.1.18
master_port:6379
master_link_status:up
master_last_io_seconds_ago:7
master_sync_in_progress:0
slave_priority:100
slave_read_only:1
connected_slaves:1
slave0: 192.168.12.12,6379,online
在192.168.12.12上可以看到:
# Replication
role:slave
master_host: 192.168.10.10
master_port:6379
master_link_status:up
master_last_io_seconds_ago:3
master_sync_in_progress:0
slave_priority:100
slave_read_only:1
connected_slaves:0
此時我們想實現的目標已經實現,但是發現在兩個slave上無法插入資料,當master故障後,需要在slave1上首先執行slaveof no one命令,再次執行info Replication時,它已經轉為master了,此時slave12不受影響。
redis 192.168.10.10:6379> slaveof no one
OK
redis 192.168.10.10:6379> infoReplication
# Replication
role:master
connected_slaves:1
slave0:127.0.0.1,6382,online
redis 192.168.10.10:6379>
至此,已經完成了主從複製,細心的網友可能已經發現,只需配置master的地址和連接埠,就可以作為slave存在,這樣資料就被別人盜取了!!!
目前是的,在下一節會解決這個問題。