Redis分佈式集羣--Redis哨兵(Sentinel)模式

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"
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章