濮阳杆衣贸易有限公司

主頁 > 知識(shí)庫 > Redis服務(wù)之高可用組件sentinel詳解

Redis服務(wù)之高可用組件sentinel詳解

熱門標(biāo)簽:臺(tái)灣電銷 一個(gè)地圖標(biāo)注多少錢 四川穩(wěn)定外呼系統(tǒng)軟件 400電話辦理的口碑 南京手機(jī)外呼系統(tǒng)廠家 廊坊外呼系統(tǒng)在哪買 地圖標(biāo)注工廠入駐 b2b外呼系統(tǒng) 高碑店市地圖標(biāo)注app

  前文我們了解了redis的常用數(shù)據(jù)類型相關(guān)命令的使用和說明,回顧請(qǐng)參考https://www.jb51.net/article/120364.htm 今天我們來聊一下redis的高可用組件sentinel;首先來回顧下redis的主從同步,主從同步最主要的作用是讓master的數(shù)據(jù)在其他服務(wù)器上實(shí)時(shí)存在副本,起到了備份的效果;對(duì)于redis的讀寫來說,主從架構(gòu)能夠讓讀的請(qǐng)求分散到多個(gè)從服務(wù)器上,從而降低了單臺(tái)redis讀請(qǐng)求的io壓力,同時(shí)也提高了redis讀請(qǐng)求的并發(fā)能力;通常為了數(shù)據(jù)的一致性,從服務(wù)器一旦成為某一臺(tái)redis的slave,那么從服務(wù)器上之前有的數(shù)據(jù)會(huì)被清空,然后把master發(fā)送過來的數(shù)據(jù)應(yīng)用到內(nèi)存,從而實(shí)現(xiàn)和master數(shù)據(jù)一致;除此之外slave通常會(huì)是只讀屬性,也就說slave端只能執(zhí)行讀操作,寫操作會(huì)被拒絕,所以寫請(qǐng)求始終是由master來完成;

那么問題來了,對(duì)于這種主從復(fù)制架構(gòu)的環(huán)境中,如果master宕機(jī)了,master宕機(jī)意味著整個(gè)系統(tǒng)將不能夠?qū)憯?shù)據(jù)到redis,很顯然這種情況我們應(yīng)該及時(shí)解決;怎么解決呢?有沒有這樣的一組件幫我們對(duì)master做實(shí)時(shí)的監(jiān)控,一旦發(fā)現(xiàn)master宕機(jī)就提升一個(gè)slave當(dāng)選新的master,如果原master還有其他slave,將其他slave都從屬于新的master;除此之外它還應(yīng)該讓系統(tǒng)在發(fā)生切換master時(shí)觸發(fā)報(bào)警通知,讓管理員盡快把壞掉的master修復(fù)上線;對(duì),sentinel就有我們上述的這些功能,它能夠監(jiān)控主從同步集群中的master節(jié)點(diǎn),在master發(fā)生宕機(jī)后能夠自動(dòng)故障轉(zhuǎn)移,將提升一臺(tái)slave作為新的master,然后通知管理員;

  Sentinel是一個(gè)分布式系統(tǒng),我們可以在一個(gè)架構(gòu)中運(yùn)行多個(gè)sentinel,這些sentinel進(jìn)程使用流言協(xié)議(gossipprotocols)來接收關(guān)于 Master是否下線的信息,并使用投票協(xié)議(Agreement Protocols)來決定是否執(zhí)行自動(dòng)故障遷移,以及選擇哪個(gè) Slave 作為新的 Master。每個(gè)sentinel進(jìn)程會(huì)向其他sentinel進(jìn)程、master、slave定時(shí)發(fā)送消息,以確保對(duì)方是否”活”著,如果發(fā)現(xiàn)對(duì)方在指定配置時(shí)間(可配置的)內(nèi)未得到回應(yīng),則暫時(shí)認(rèn)為對(duì)方已掉線,也就是所謂的”主觀認(rèn)為宕機(jī)” ,英文名稱:Subjective Down,簡稱 SDOWN。有主觀宕機(jī),肯定就有客觀宕機(jī)。

當(dāng)多個(gè)sentinel進(jìn)程中多數(shù)的sentinel進(jìn)程在對(duì) Master 做出 SDOWN 的判斷,并且通過 SENTINEL is-master-down-by-addr 命令互相交流之后,得出的 Master Server 下線判斷,這種方式就是“客觀宕機(jī)”,英文名稱是:Objectively Down, 簡稱 ODOWN。通過一定的 vote 算法,從剩下的 slave 從服務(wù)器節(jié)點(diǎn)中,選一臺(tái)提升為 Master 服務(wù)器節(jié)點(diǎn),然后自動(dòng)修改相關(guān)配置,并開啟故障轉(zhuǎn)移(failover)。

  配置使用sentinel

  環(huán)境說明

角色 ip地址 端口
master 192.168.0.41 6379
slave01 192.168.0.42 6379
slave02 192.168.0.43 6379
sentinel01 192.168.0.41 26379
sentinel02 192.168.0.42 26379
sentinel03 192.168.0.43 26379

  架構(gòu)圖

  提示:從上面的架構(gòu)圖可以知道,首先我們必須要有一個(gè)主從架構(gòu)的集群,然后在部署sentinel 來對(duì)主從同步集群做監(jiān)控;

  redis主從復(fù)制集群搭建

  1、在192.168.0.41/42/43上安裝redis,可以使用yum安裝,也可以使用編譯安裝,redis安裝請(qǐng)參考https://www.jb51.net/article/79096.htm

  2、配置192.168.0.41/42/43上的redis監(jiān)聽在非本機(jī)127.0.0.1上并配置42/43上的redis從屬于192.168.0.41

  master

  slave01

  slave02

  提示:redis支持在線修改配置,保存配置到配置文件;SLAVEOF 指令用于指定redismaster的ip地址和端口,表示把該redis配置成對(duì)應(yīng)master的slave角色;CONFIG REWRITE是把我們的配置保存到配置文件;

  在master上查看是否有兩個(gè)從節(jié)點(diǎn)連接到master

  驗(yàn)證:在master上寫數(shù)據(jù),看看是否能夠及時(shí)同步到兩個(gè)slave上?

  提示:可以看到在主庫上寫數(shù)據(jù),從庫上能夠及時(shí)的同步主庫上的數(shù)據(jù);到此redis的主從集群就搭建完畢了;

  配置sentinel,讓其監(jiān)控master

  提示:三個(gè)sentinel的配置都是一樣的,這里需要明確指定監(jiān)控主從同步集群的master的ip地址和端口,以及有效法定票數(shù),有效法定票數(shù)指的是至少有多少個(gè)sentinel主觀認(rèn)為master down了,然后才觸發(fā)選舉新master操作;通常在這種流言協(xié)議中,一般都是大于集群半數(shù),如果是3臺(tái)sentinel,至少要2臺(tái)主觀認(rèn)為master宕機(jī),才開始觸發(fā)選舉新master;如果是5臺(tái),那至少要3臺(tái);如果master配置的有認(rèn)證密碼,我們還需要在sentinel中指定認(rèn)證密碼;

  sentinel配置文件說明

  bind:該指令和redis配置文件中的bind是同樣的用法,用于指定sentinel的監(jiān)聽地址;默認(rèn)不指定,監(jiān)聽本機(jī)所有可用地址;

  protected-mode:指定是否開啟保護(hù)模式;

  port:用于指定sentinel的監(jiān)聽端口;默認(rèn)是26379

  daemonize:用于指定sentinel是否運(yùn)行為守護(hù)進(jìn)程,yes表示運(yùn)行為后臺(tái)守護(hù)進(jìn)程;no表示不運(yùn)行為守護(hù)進(jìn)程,直接在前臺(tái)運(yùn)行;

  pidfile:指定pid文件路徑;

  logfile:指定日志文件路徑;

  dir:指定sentinel的工作路徑;

  sentinel monitor master-name> ip> redis-port> quorum>:用于指定監(jiān)控master節(jié)點(diǎn)的ip地址和端口以及有效法定票數(shù);其中master-name>是給監(jiān)控的master一個(gè)名稱,可以隨便寫,起標(biāo)識(shí)的作用;quorum>表示sentinel集群的quorum機(jī)制,即至少有quorum個(gè)sentinel節(jié)點(diǎn)同時(shí)判定主節(jié)點(diǎn)故障時(shí),才認(rèn)為其真的故障;

  sentinel auth-pass master-name> password>:指定master認(rèn)證密碼;通常都需要設(shè)置密碼,并且master的密碼和slave的密碼應(yīng)該是一樣;

  sentinel down-after-milliseconds master-name> milliseconds>:配置監(jiān)控到指定的集群的主節(jié)點(diǎn)異常狀態(tài)持續(xù)多久方才將標(biāo)記為“故障”;

  sentinel parallel-syncs master-name> numslaves>:指在failover過程中,能夠被sentinel并行配置的從節(jié)點(diǎn)的數(shù)量;

  sentinel failover-timeout master-name> milliseconds>:sentinel必須在此指定的時(shí)長內(nèi)完成故障轉(zhuǎn)移操作,否則,將視為故障轉(zhuǎn)移操作失敗;

  sentinel notification-script master-name> script-path>:通知腳本,此腳本被自動(dòng)傳遞多個(gè)參數(shù);

  了解了sentinel的配置文件,接下我們把3臺(tái)sentinel都啟動(dòng)起來

  master

  slave01

  slave02

  提示:從上面的信息可以看到3個(gè)sentinel都監(jiān)控master的ip地址和端口,其實(shí)他們3個(gè)的配置文件都是一樣的;

  查看sentinel日志

  提示:從上面的日志信息可以了解到sentinel監(jiān)控的master是192.168.0.41:6379;并且有兩個(gè)slave分別是192.168.0.42:6379和192.168.0.43:6379;

  查看sentinel狀態(tài)

  提示:它提示我們開啟了保護(hù)模式;

  關(guān)閉保護(hù)模式

  重啟sentinel,再次查看sentinel狀態(tài)

[root@master ~]# systemctl restart redis-sentinel.service
[root@master ~]# ss -tnl
State Recv-Q Send-Q Local Address:Port Peer Address:Port 
LISTEN 0 511 *:26379 *:* 
LISTEN 0 511 *:6379 *:* 
LISTEN 0 128 *:22 *:* 
LISTEN 0 100 127.0.0.1:25 *:* 
LISTEN 0 511 :::26379 :::* 
LISTEN 0 128 :::22 :::* 
LISTEN 0 100 ::1:25 :::* 
[root@master ~]# redis-cli -h 192.168.0.41 -p 26379 
192.168.0.41:26379> info sentinel
# Sentinel
sentinel_masters:1
sentinel_tilt:0
sentinel_running_scripts:0
sentinel_scripts_queue_length:0
sentinel_simulate_failure_flags:0
master0:name=mymaster,status=ok,address=192.168.0.41:6379,slaves=2,sentinels=3
192.168.0.41:26379> info clients
# Clients
connected_clients:3
client_longest_output_list:0
client_biggest_input_buf:0
blocked_clients:0
192.168.0.41:26379> CLIENT LIST
id=2 addr=192.168.0.42:59048 fd=14 name=sentinel-f60b324b-cmd age=38 idle=0 flags=N db=0 sub=0 psub=0 multi=-1 qbuf=0 qbuf-free=0 obl=0 oll=0 omem=0 events=r cmd=ping
id=3 addr=192.168.0.43:37480 fd=15 name=sentinel-eada229c-cmd age=38 idle=1 flags=N db=0 sub=0 psub=0 multi=-1 qbuf=0 qbuf-free=0 obl=0 oll=0 omem=0 events=r cmd=publish
id=4 addr=192.168.0.41:36706 fd=16 name= age=32 idle=0 flags=N db=0 sub=0 psub=0 multi=-1 qbuf=0 qbuf-free=32768 obl=0 oll=0 omem=0 events=r cmd=client
192.168.0.41:26379>

  提示:從上面的狀態(tài)信息可以看到當(dāng)前sentinel監(jiān)控的master是出于正常ok狀態(tài),有兩個(gè)slave和3個(gè)sentinel;對(duì)于192.168.0.41:26379目前有3個(gè)客戶端連接,二個(gè)是sentinel,一個(gè)本機(jī);到此3臺(tái)sentinel搭建啟動(dòng)完成;

  驗(yàn)證:把master宕機(jī),看看sentinel是否將在兩個(gè)從節(jié)點(diǎn)選舉一個(gè)為新master?是否將另外一個(gè)slave重新指向新master?

  在slave01上查看主從同步信息

  提示:第一次查看只是告訴我們master宕機(jī)了,第二次查看就告訴我們當(dāng)前節(jié)點(diǎn)為master,并且擁有一個(gè)slave節(jié)點(diǎn),這說明已經(jīng)完成了故障轉(zhuǎn)移,slave01已經(jīng)被提升為新的master了;

  在192.168.0.43上查看主從信息,看看是否指向新的master?

  提示:在slave02上看主從同步信息,可以看到slave02已經(jīng)從屬新master了;

  查看故障轉(zhuǎn)移時(shí) sentinel日志

  提示:從上面的日志信息可以了解到,在從sdown到odown后,就會(huì)觸發(fā)vote算法開始選舉leader;然后將原master降級(jí)為slave,然后將選舉出來的leader原salve屬性去除(slaveof no one);然后提升新master,然后將剩下的slave重新配置新master為主;最后是切換master,開始新的監(jiān)控;

  查看故障 轉(zhuǎn)移后的 redis 配置文件

  提示:故障轉(zhuǎn)移后 redis.conf 中的 slaveof 行的 master IP 會(huì)被修改,sentinel.conf 中的 sentinel monitor IP 會(huì)被修改。同時(shí)在sentinel配置文件的末尾還會(huì)有添加known-slave和known-sentinel等信息;

  修復(fù)舊master 讓其重新上線

  提示:把原master啟動(dòng)后,它自動(dòng)就成為了新主的slave;這主要是因?yàn)閟entinel在故障轉(zhuǎn)移時(shí)把其配置文件中的slaveof 修改成新的master地址了;

  在新master上查看主從同步信息

  提示:在沒有恢復(fù)原master時(shí),在新master上查看主從同步信息,只能看到一個(gè)salve,啟動(dòng)原master后,在看就有兩個(gè)slave是在線;

總結(jié)

到此這篇關(guān)于Redis服務(wù)之高可用組件sentinel的文章就介紹到這了,更多相關(guān)Redis服務(wù)之高可用組件sentinel內(nèi)容請(qǐng)搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!

您可能感興趣的文章:
  • 淺談Redis在微服務(wù)架構(gòu)中的幾種應(yīng)用場(chǎng)景
  • redis三種高可用方式部署的實(shí)現(xiàn)
  • Redis5之后版本的高可用集群搭建的實(shí)現(xiàn)
  • 詳解三分鐘快速搭建分布式高可用的Redis集群
  • Redis為什么快如何實(shí)現(xiàn)高可用及持久化
  • Redis Sentinel實(shí)現(xiàn)高可用配置的詳細(xì)步驟
  • 解析高可用Redis服務(wù)架構(gòu)分析與搭建方案

標(biāo)簽:拉薩 定州 河源 泰州 畢節(jié) 伊春 甘南 南寧

巨人網(wǎng)絡(luò)通訊聲明:本文標(biāo)題《Redis服務(wù)之高可用組件sentinel詳解》,本文關(guān)鍵詞  Redis,服務(wù),之高,可用,組件,;如發(fā)現(xiàn)本文內(nèi)容存在版權(quán)問題,煩請(qǐng)?zhí)峁┫嚓P(guān)信息告之我們,我們將及時(shí)溝通與處理。本站內(nèi)容系統(tǒng)采集于網(wǎng)絡(luò),涉及言論、版權(quán)與本站無關(guān)。
  • 相關(guān)文章
  • 下面列出與本文章《Redis服務(wù)之高可用組件sentinel詳解》相關(guān)的同類信息!
  • 本頁收集關(guān)于Redis服務(wù)之高可用組件sentinel詳解的相關(guān)信息資訊供網(wǎng)民參考!
  • 推薦文章
    凭祥市| 陇川县| 北安市| 宕昌县| 邵阳县| 绥江县| 开化县| 汶上县| 玉树县| 苏尼特左旗| 慈利县| 灵寿县| 虞城县| 太仆寺旗| 镇原县| 万山特区| 常德市| 金湖县| 道真| 景德镇市| 拜城县| 泰来县| 绥棱县| 博罗县| 哈密市| 错那县| 马鞍山市| 锦州市| 霍邱县| 伊川县| 永德县| 宜兰县| 阿拉尔市| 西乡县| 微山县| 清远市| 兴安盟| 岳阳县| 积石山| 旌德县| 岚皋县|