主頁 > 知識庫 > Redis Sentinel的基本搭建

Redis Sentinel的基本搭建

熱門標(biāo)簽:北京400電話辦理收費標(biāo)準(zhǔn) 超呼電話機(jī)器人 日本中國地圖標(biāo)注 鄭州人工智能電銷機(jī)器人系統(tǒng) 山東外呼銷售系統(tǒng)招商 宿遷便宜外呼系統(tǒng)平臺 魔獸2青云地圖標(biāo)注 十堰營銷電銷機(jī)器人哪家便宜 貴州電銷卡外呼系統(tǒng)

Redis Sentinel的概念

   我們知道Redis主從模式下,一旦主節(jié)點由于故障不能提供服務(wù),需要人工將從節(jié)點晉升為主節(jié)點,同時還要通知應(yīng)用方更新主節(jié)點的地址。然后在很多應(yīng)用場景下這種故障處理的方式是無法接受的,應(yīng)用程序需要實時感知當(dāng)前的可用節(jié)點。為了解決這個問題,Redis Sentinel應(yīng)運而生,也稱之為"哨兵"。

   介紹sentinel之前,先來了解幾個redis的概念,

主節(jié)點master:Redis進(jìn)程,主服務(wù)

從節(jié)點slave:redis進(jìn)程,從服務(wù)

Redis數(shù)據(jù)節(jié)點:主節(jié)點和從節(jié)點

Sentinel節(jié)點:監(jiān)控Redis數(shù)據(jù)節(jié)點,獨立的sentinel進(jìn)程

Sentinel節(jié)點集合:若干Sentinel節(jié)點的抽象組合,若干sentinel節(jié)點進(jìn)程

Redis Sentinel:Redis高可用實現(xiàn)方案,sentinel節(jié)點集合和redis數(shù)據(jù)節(jié)點進(jìn)程

01 主從復(fù)制問題

前面的文章中我們講述了主從復(fù)制,可以將從節(jié)點作為主節(jié)點的災(zāi)備節(jié)點,今天我們來看主從復(fù)制帶來的問題:

1、一旦主節(jié)點發(fā)生故障,從節(jié)點晉升為主節(jié)點的過程和應(yīng)用調(diào)整新主節(jié)點的過程,都需要人為干預(yù)

2、主節(jié)點的寫能力容易受到單機(jī)的限制

3、主節(jié)點的存儲能力容易受到單機(jī)的限制

   一種常見的方法是使用腳本來觸發(fā)主從節(jié)點的角色切換,例如在一個一主兩從的結(jié)構(gòu)中,假設(shè)主節(jié)點master,從節(jié)點slave1,slave2,我們來看故障發(fā)生時架構(gòu)的狀態(tài):

1、主節(jié)點master故障,客戶端連接失敗,兩個從節(jié)點復(fù)制失敗

2、選擇一個主節(jié)點slave1,對其執(zhí)行slave of no one命令使其成為主節(jié)點master2

3、更新應(yīng)用程序連接的節(jié)點為slave1的IP地址

4、slave2以slave1為新的主節(jié)點,復(fù)制slave1上的命令

5、待原來的master恢復(fù)之后,讓它成為slave1的從節(jié)點。

上述過程可以做成自動化的過程,但是需要考慮三點:a、要確保判斷節(jié)點不可達(dá)的機(jī)制健全,否則容易出現(xiàn)誤判斷情況

b、如果有多個從節(jié)點,如果保證只有一個從節(jié)點被晉升為主節(jié)點是個關(guān)鍵的問題

c、通知客戶端新的主節(jié)點的機(jī)制是否足夠健壯

02 Redis Sentinel的高可用機(jī)制

   Sentinel能夠自動完成故障發(fā)現(xiàn)和故障轉(zhuǎn)移,并及時通知應(yīng)用方。這是它的核心價值所在。

   Redis Sentinel是一個分布式架構(gòu),其中包含若干個Sentinel和若干個Redis數(shù)據(jù)節(jié)點,每個Sentinel節(jié)點會對數(shù)據(jù)節(jié)點和其余Sentinel節(jié)點進(jìn)行監(jiān)控,當(dāng)它發(fā)現(xiàn)節(jié)點不可達(dá)時,會對節(jié)點做下線表示。如果被標(biāo)識的是主節(jié)點,它還會和其他的sentinel進(jìn)行協(xié)商,當(dāng)大多數(shù)sentinel節(jié)點都認(rèn)為主節(jié)點不可達(dá)時,他們會選舉出來一個sentinel節(jié)點來實現(xiàn)故障自動轉(zhuǎn)移,同時會將這個變化通知給Redis應(yīng)用方,整個過程是自動的,不需要人工介入。

Redis Sentinel與Redis主從復(fù)制模式只是多了若干個sentinel節(jié)點,并沒有對redis節(jié)點做特殊處理,這是很多redis開發(fā)和運維人員容易混淆的地方。

二者架構(gòu)圖如下:

在整個主服務(wù)故障到重新選擇主服務(wù)的過程中,sentinel主要干如下幾件事情:

1、監(jiān)控,sentinel節(jié)點會定期檢測redis數(shù)據(jù)節(jié)點,其余sentinel節(jié)點是否可達(dá)

2、通知,sentinel節(jié)點會將故障轉(zhuǎn)移的結(jié)果通知給應(yīng)用方。

3、主節(jié)點故障轉(zhuǎn)移:實現(xiàn)從節(jié)點晉升為主節(jié)點并維護(hù)后續(xù)正確的主從關(guān)系

4、配置提供者:在redis sentinel結(jié)構(gòu)中,客戶端在初始化的時候連接的是sentinel節(jié)點集合,從中獲取主節(jié)點信息

   上面的架構(gòu)圖中不難發(fā)現(xiàn)sentinel也是多個的,這樣的好處有兩個:

1、可以保證sentinel的健壯性,一個sentinel掛了,不影響整個集群的功能。

2、對于節(jié)點的故障判斷是多個sentinel同時判斷出來的,有效的防止了誤判

    sentinel節(jié)點本身其實就是獨立的redis節(jié)點,只不過它們不存處數(shù)據(jù),只支持部分命令。

    接下來,我們來看sentinel的部署和配置文件內(nèi)容。

03 sentinel部署

    sentinel部署之前,需要先有master和兩個slave的一主兩從架構(gòu):

127.0.0.1:6379> info replication
# Replication
role:master
connected_slaves:2
slave0:ip=127.0.0.1,port=6380,state=online,offset=169,lag=1
slave1:ip=127.0.0.1,port=6381,state=online,offset=169,lag=1
master_repl_offset:183
repl_backlog_active:1
repl_backlog_size:1048576
repl_backlog_first_byte_offset:2
repl_backlog_histlen:182

  sentinel的部署配置文件:

[root@VM_48_10_centos redis]# cat redis-sentinel-26379.conf 
port 26379
daemonize yes
logfile "26379.log"
dir "/usr/local/redis-3.0.7"
sentinel monitor mymaster 127.0.0.1 6379 2

  其中,sentinel monitor mymaster代表sentinel要監(jiān)控主節(jié)點6379,2代表判斷主節(jié)點失敗至少需要2個sentinel節(jié)點同意。

  其余兩個sentinel的配置文件和這個大同小異,只需要修改對應(yīng)端口和日志文件即可。sentinel啟動命令如下:

[root@VM_48_10_centos redis]# redis-sentinel redis-sentinel-26379.conf 
[1] 7311
[root@VM_48_10_centos redis]# redis-sentinel redis-sentinel-26380.conf 
[1] 7366
[root@VM_48_10_centos redis]# redis-sentinel redis-sentinel-26381.conf 
[2] 7380
[root@VM_48_10_centos redis]# 
[root@VM_48_10_centos redis]# ps -ef|grep sentinel
root      7312     1  0 22:51 ?        00:00:00 redis-sentinel *:26379 [sentinel]
root      7367     1  0 22:52 ?        00:00:00 redis-sentinel *:26380 [sentinel]
root      7381     1  0 22:52 ?        00:00:00 redis-sentinel *:26381 [sentinel]
root      7405  5850  0 22:52 pts/7    00:00:00 grep --color=auto sentinel

此時,重新查看26379這個sentinel的配置文件,會發(fā)現(xiàn)里面多了一些內(nèi)容:

[root@VM_48_10_centos redis]# cat redis-sentinel-26379.conf 
port 26379
daemonize yes
logfile "26379.log"
dir "/usr/local/redis-3.0.7"
sentinel monitor mymaster 127.0.0.1 6379 2
sentinel config-epoch mymaster 0
sentinel leader-epoch mymaster 0
sentinel known-slave mymaster 127.0.0.1 6380
# Generated by CONFIG REWRITE
sentinel known-slave mymaster 127.0.0.1 6381
sentinel known-sentinel mymaster 127.0.0.1 26381 0a2c77616ef88282fa12ef7c8aca142a2473cd5a
sentinel known-sentinel mymaster 127.0.0.1 26380 3ad6460bf5f4b01f277fdce3aa423d596993eec5
sentinel current-epoch 0

   可以發(fā)現(xiàn),sentinel之間已經(jīng)進(jìn)行了交互,并寫入了配置文件中一些已經(jīng)獲取到的內(nèi)容。

使用命令info sentinel查看當(dāng)前sentinel集群的信息:

[root@VM_48_10_centos redis]# redis-cli -h 127.0.0.1 -p 26379 info sentinel
# Sentinel
sentinel_masters:1
sentinel_tilt:0
sentinel_running_scripts:0
sentinel_scripts_queue_length:0
master0:name=mymaster,status=ok,address=127.0.0.1:6379,slaves=2,sentinels=3

以上就是Redis Sentinel的使用的詳細(xì)內(nèi)容,更多關(guān)于Redis Sentinel的資料請關(guān)注腳本之家其它相關(guān)文章!

您可能感興趣的文章:
  • 淺析Redis Sentinel 與 Redis Cluster
  • 基于SpringCloud手寫一個簡易版Sentinel
  • Spring Cloud Alibaba之Sentinel實現(xiàn)熔斷限流功能
  • Sentinel實現(xiàn)動態(tài)配置的集群流控的方法
  • 解決redis sentinel 頻繁主備切換的問題
  • Redis Sentinel的使用方法
  • Spring Cloud Alibaba 使用 Feign+Sentinel 完成熔斷的示例
  • Java之SpringCloudAlibaba Sentinel組件案例講解

標(biāo)簽:果洛 吉安 江蘇 北京 大慶 朝陽 臺州 楊凌

巨人網(wǎng)絡(luò)通訊聲明:本文標(biāo)題《Redis Sentinel的基本搭建》,本文關(guān)鍵詞  Redis,Sentinel,的,基本,搭建,;如發(fā)現(xiàn)本文內(nèi)容存在版權(quán)問題,煩請?zhí)峁┫嚓P(guān)信息告之我們,我們將及時溝通與處理。本站內(nèi)容系統(tǒng)采集于網(wǎng)絡(luò),涉及言論、版權(quán)與本站無關(guān)。
  • 相關(guān)文章
  • 下面列出與本文章《Redis Sentinel的基本搭建》相關(guān)的同類信息!
  • 本頁收集關(guān)于Redis Sentinel的基本搭建的相關(guān)信息資訊供網(wǎng)民參考!
  • 推薦文章