中文字幕av专区_日韩电影在线播放_精品国产精品久久一区免费式_av在线免费观看网站

溫馨提示×

溫馨提示×

您好,登錄后才能下訂單哦!

密碼登錄×
登錄注冊×
其他方式登錄
點擊 登錄注冊 即表示同意《億速云用戶服務條款》

Redis哨兵機制Sentinel的原理和應用

發布時間:2021-06-25 11:23:53 來源:億速云 閱讀:123 作者:chen 欄目:大數據

這篇文章主要介紹“Redis哨兵機制Sentinel的原理和應用”,在日常操作中,相信很多人在Redis哨兵機制Sentinel的原理和應用問題上存在疑惑,小編查閱了各式資料,整理出簡單好用的操作方法,希望對大家解答”Redis哨兵機制Sentinel的原理和應用”的疑惑有所幫助!接下來,請跟著小編一起來學習吧!

哨兵機制

什么是哨兵機制

在主從復制的模式下,主服務器宕機后,從服務器是不能自動轉為主服務器的,只能手動進行故障轉移

哨兵機制(Sentinel)就是Redis的高可用解決方案,由一個或多個Sentinel實例組成的Sentinel系統用來管理主服務器以及連接的所有從服務器。可以實現故障發現、故障自動轉移、配置中心和客戶端通知

  • 監控(Monitoring):Sentinel會不斷地檢查你的主服務器和從服務器是否運作正常

  • 提醒(Notification):當被監控的某個Redis服務器出現問題時,Sentinel可以通過API向管理員或者其他應用程序發送通知

  • 自動故障遷移(Automatic failover):當一個主服務器不能正常工作時, Sentinel會開始一次自動故障遷移操作,它會將失效主服務器的其中一個從服務器升級為新的主服務器,并讓失效主服務器的其他從服務器改為復制新的主服務器;當客戶端試圖連接失效的主服務器時,集群也會向客戶端返回新主服務器的地址,使得集群可以使用新主服務器代替失效服務器

Redis哨兵機制Sentinel的原理和應用

看了上圖,我們可以理解哨兵機制就是在復制基礎上的一套監管系統,能及時的進行故障轉移。那么就先了解下,Redis是如何故障判定和故障轉移的

故障判定

故障判定,也就是Sentinel在做的任務,當一個Sentinel啟動后會定期的去執行以下的任務

  • 每個Sentinel進程會以每秒一次的頻率向已知的主服務器、從服務器以及其他的Sentinel實例發送一個PING命令

  • 每個實例(instance)距離最后一次有效回復PING命令的時間超過down-after-milliseconds選項所指定的值,那么該實例會被標記為主觀下線。一個有效回復可以是:+PONG-LOADING或者-MASTERDOWN

  • 如果一個Master主服務器被標記為主觀下線,那么監視該主服務器的所有的Sentinel會以每秒一次的頻率確認主服務器的確是進入主線下線狀態

  • 如果有足夠數量的Sentinel(至少達到配置文件指定的數量)在指定時間范圍內確認一個Master主服務器為主觀下線狀態,那么該主服務器被標記為客觀下線

  • 一般情況下,每個Sentinel會每10秒一次的頻率向已知的主服務器和從服務器發送INFO命令,當一個主服務器被標記為客觀下線時,發送INFO命令的頻率會改為每秒一次

  • 沒有足夠數量的Sentinel同意主服務器下線,主服務器的客觀下線狀態會被移除;當主服務器重新向Sentinel的PING命令返回有效回復,主服務器的主觀下線狀態就會被移除

主觀下線(Subjectively Down,SDOWN) 指單個Sentinel實例對服務器做出下線判斷

客觀下線(Objectively Down,ODOWN) 指多個Sentinel實例對服務器做出SDOWN判斷, 并且通過 SENTINEL is-master-down-by-addr命令互相交流之后,,得出的服務器下線判斷

搭建哨兵實例

準備

我這里是準備了3個虛擬機,1主2從的Redis服務器和3個哨兵實例。官網上是推薦至少部署3個Sentinel實例保證健壯性,具體的地址端口如下

服務ipport
Redis(master)192.168.249.206379
Redis192.168.249.216379
Redis192.168.249.226379
Sentinel192.168.249.2026379
Sentinel192.168.249.2126379
Sentinel192.168.249.2226379

1主2從的Redis服務的配置如下,修改一下redis.conf文件

# 設置為后臺運行
daemonize yes
# 綁定的主機地址,這里注釋掉,開放ip連接
#bind 127.0.0.1

# 主服務上可以設置密碼
requirepass 123456

在從服務器上添加主服務器的地址信息

# 設置主服務器的地址
# replicaof <masterip> <masterport>
replicaof 192.168.249.20 6379
# 設置主服務器的密碼
# masterauth <master-password>
masterauth 123456

3個哨兵的配置都是一樣的,可以從Redis的安裝目錄拷貝一份sentinel.conf,修改內容如下,主要是配置下主服務器的地址

# 設置為后臺運行
daemonize yes
logfile "26379.log"
# 設置主服務器的地址,quorum為2表示當有2個或以上的哨兵認為主服務器不可用時,才進行故障轉移操作
# sentinel monitor <master-name> <ip> <redis-port> <quorum>
sentinel monitor mymaster 192.168.249.20 6379 2
# 設置服務器密碼
# sentinel auth-pass <master-name> <password>
sentinel auth-pass mymaster 123456

# 指定了 Sentinel 認為服務器已經斷線所需的毫秒數
# sentinel down-after-milliseconds <master-name> <milliseconds>
sentinel down-after-milliseconds mymaster 30000
# 指定了在執行故障轉移時,最多可以有多少個從服務器同時對新的主服務器進行同步, 這個數字越小,完成故障轉移所需的時間就越長。但是如果這個數字越大,就意味著越多的slave因為replication而不可用。
# 可以通過將這個值設為 1 來保證每次只有一個slave 處于不能處理命令請求的狀態
# sentinel parallel-syncs <master-name> <numreplicas>
sentinel parallel-syncs mymaster 1
# 指定故障轉移超時時間
# sentinel failover-timeout <master-name> <milliseconds>
sentinel failover-timeout mymaster 180000

Sentinel可用通過Redis實例的發布/訂閱功能自動發現同樣在監控主服務器的其他Sentinel,以及可以通過主服務器獲取其他從服務器的信息,所以我們只需配置主服務器的地址即可

啟動

啟動順序分別是:主服務器,從服務器,然后是3個哨兵進程

啟動Redis服務

./redis-server ../redis.conf

Sentinel其實也是一個Redis服務,可以看做一個特殊模式的Redis服務,啟動的命令有兩種

./redis-server ../sentinel.conf --sentinel

./redis-sentinel ../sentinel.conf

這兩種方式啟動哨兵的效果都是一樣的,在啟動運行時必須要使用配置文件,因為系統需要這個文件來保存當前狀態,以便重啟時加載

查看主機狀態

我們可以用客戶端連接哨兵,使用sentinel master <master-name>查看其監視的主服務器的狀態

$ ./redis-cli -h 192.168.249.20 -p 26379
192.168.249.20:26379> sentinel master mymaster
 1) "name"
 2) "mymaster"
 3) "ip"
 4) "192.168.249.20"
 5) "port"
 6) "6379"
 7) "runid"
 8) "2a58b746fe9c963e69887efbc877aa3143eb6ec6"
 9) "flags"
10) "master"
11) "link-pending-commands"
12) "0"
13) "link-refcount"
14) "1"
15) "last-ping-sent"
16) "0"
17) "last-ok-ping-reply"
18) "167"
19) "last-ping-reply"
20) "167"
21) "down-after-milliseconds"
22) "30000"
23) "info-refresh"
24) "2941"
25) "role-reported"
26) "master"
27) "role-reported-time"
28) "2006632"
29) "config-epoch"
30) "0"
31) "num-slaves"
32) "2"
33) "num-other-sentinels"
34) "2"
35) "quorum"
36) "2"
37) "failover-timeout"
38) "180000"
39) "parallel-syncs"
40) "1"

我們看到關于主服務器的一些監控信息

num-slaves為從服務器的數量;num-other-sentinels其他哨兵的數量;flags標記為master,當主機掉線了,會變為s_down或o_down

另外,想查看其他從服務器和其他哨兵的狀態,可以用以下的命令

sentinel slaves <master-name>
sentinel sentinels <master-name>

故障轉移

我們可以手動模擬一下,當主服務器掛了,故障故障轉移情況。

想要獲取當前主服務器的地址信息,客戶端可以使用sentinel get-master-addr-by-name <master-name>命令

192.168.249.20:26379> sentinel get-master-addr-by-name mymaster
1) "192.168.249.20"
2) "6379"

可以看到當前的主服務地址為192.168.249.20,這時我們手動關閉該服務,或者使用以下命令讓服務器睡眠40秒

$ ./redis-cli -h 192.168.249.20  -p 6379
192.168.249.20:6379> auth 123456
OK
192.168.249.20:6379> debug sleep 40
OK
(40.01s)

這個時候我們再次查看主服務的地址時,應該是可以看到不同信息

192.168.249.20:26379> sentinel get-master-addr-by-name mymaster
1) "192.168.249.22"
2) "6379"

到此,關于“Redis哨兵機制Sentinel的原理和應用”的學習就結束了,希望能夠解決大家的疑惑。理論與實踐的搭配能更好的幫助大家學習,快去試試吧!若想繼續學習更多相關知識,請繼續關注億速云網站,小編會繼續努力為大家帶來更多實用的文章!

向AI問一下細節

免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。

AI

榕江县| 巧家县| 四会市| 玉环县| 平武县| 定边县| 黄平县| 五莲县| 横峰县| 故城县| 宣武区| 镇康县| 莱州市| 龙江县| 清水河县| 惠安县| 邵武市| 姜堰市| 司法| 庆元县| 惠州市| 扶风县| 澄城县| 平陆县| 永济市| 武乡县| 偏关县| 江阴市| 集安市| 林甸县| 广宗县| 平山县| 金沙县| 台江县| 龙岩市| 北辰区| 明星| 双流县| 清丰县| 嘉黎县| 江门市|