Redis哨兵(Sentinel)模式
主從切換技術的方法是:當主服務器宕機後,需要手動把一臺從服務器切換爲主服務器,這就需要人工干預,費事費力,還會造成一段時間內服務不可用。這不是一種推薦的方式,更多時候,我們優先考慮哨兵模式
哨兵模式是一種特殊的模式,首先Redis提供了哨兵的命令,哨兵是一個獨立的進程,作爲進程,它會獨立運行。其原理是哨兵通過發送命令,等待Redis服務器響應,從而監控運行的多個Redis實例
通過發送命令,讓Redis服務器返回監控其運行狀態,包括主服務器和從服務器
當哨兵監測到master宕機,會自動將slave切換成master,然後通過發佈訂閱模式通知其他的從服務器,修改配置文件,讓它們切換主機
然而一個哨兵進程對Redis服務器進行監控,可能會出現問題,爲此,我們可以使用多個哨兵進行監控。各個哨兵之間還會進行監控,這樣就形成了多哨兵模式
用文字描述一下故障切換(failover)的過程。假設主服務器宕機,哨兵1先檢測到這個結果,系統並不會馬上進行failover過程,僅僅是哨兵1主觀的認爲主服務器不可用,這個現象成爲主觀下線。當後面的哨兵也檢測到主服務器不可用,並且數量達到一定值時,那麼哨兵之間就會進行一次投票,投票的結果由一個哨兵發起,進行failover操作。切換成功後,就會通過發佈訂閱模式,讓各個哨兵把自己監控的從服務器實現切換主機,這個過程稱爲客觀下線。這樣對於客戶端而言,一切都是透明的
搭建環境
一主(server1)二從(server2、server3)
具體流程
Redis主從複製
https://blog.csdn.net/zhangyukai9579/article/details/101624792
操作流程
server1–master
Redis主目錄裏拷貝sentinel.conf配置文件到 /etc/redis
vim /etc/redis/sentinel.conf
17 protected-mode no
關閉保護模式
84 sentinel monitor server1--master(ip) 2
2個sentinel認爲master下線,就認爲該master客觀下線
啓動failover並選舉產生新的master
通常最後一個參數不能多於啓動的sentinel實例數
113 sentinel down-after-milliseconds mymaster 10000
單位時間內連接不上認爲主機離線,單位是ms
在server1上將配置好之後的sentinel.conf文件給server2–slave與server3–slave節點各傳送一份
注意要在開啓sentinel進程之前發送文件,否則文件內容會發生變化
redis-server --help
redis-server /etc/redis/sentinel.conf --sentinel
server1上開啓sentinel進程
server2–slave
redis-server /etc/redis/sentinel.conf --sentinel
在server2上開啓sentinel進程
server3–slave
redis-server /etc/redis/sentinel.conf --sentinel
在server3上開啓sentinel進程
測試
真實主機
真機連接server1
redis-cli
info
可以看到server1是master節點,server2和server3是slave節點
shutdown
shutdown掉server1的redis服務
ps -aux | grep redis
查看進程,可以看到server1的redis-server進程已經關閉
server1的redis-sentinel進程依然正常運行,可以參加選舉
server2–slave(master)
在server2上可以看到將master由server1切換爲server2
真實主機
真機使用命令遠程登陸server2
redis-cil -h server2
server2是master,server3是slave
server1–master(slave)
ps -aux | grep redis
server1查看進程,redis-server進程沒有開啓
vim /etc/redis/6379.conf
server1作爲slave節點,master節點是server2
replicaof server2 6379
/etc/init.d/redis_6379.conf restart
重啓server1上的redis服務
ps -aux | grep redis
進程恢復
server2–slave(master)
redis-cli
info
server2是master節點,server1和server3是slave節點
get test
"usename:leon | password:123456"