内射老阿姨1区2区3区4区_久久精品人人做人人爽电影蜜月_久久国产精品亚洲77777_99精品又大又爽又粗少妇毛片

Redis哨兵機(jī)制以及發(fā)布訂閱-創(chuàng)新互聯(lián)

Redis哨兵機(jī)制
      • 1 哨兵Sentinel機(jī)制
      • 2 哨兵架構(gòu)原理
      • 3 搭建哨兵架構(gòu)
      • 4 通過(guò)springboot操作哨兵
    • Redis發(fā)布訂閱

成都創(chuàng)新互聯(lián)專注于企業(yè)成都全網(wǎng)營(yíng)銷、網(wǎng)站重做改版、湖北網(wǎng)站定制設(shè)計(jì)、自適應(yīng)品牌網(wǎng)站建設(shè)、H5建站商城網(wǎng)站建設(shè)、集團(tuán)公司官網(wǎng)建設(shè)、成都外貿(mào)網(wǎng)站建設(shè)公司、高端網(wǎng)站制作、響應(yīng)式網(wǎng)頁(yè)設(shè)計(jì)等建站業(yè)務(wù),價(jià)格優(yōu)惠性價(jià)比高,為湖北等各大城市提供網(wǎng)站開(kāi)發(fā)制作服務(wù)。1 哨兵Sentinel機(jī)制

Sentinel(哨兵)是Redis 的高可用性解決方案:由一個(gè)或多個(gè)Sentinel 實(shí)例組成的Sentinel 系統(tǒng)可以監(jiān)視任意多個(gè)主服務(wù)器,以及這些主服務(wù)器屬下的所有從服務(wù)器,并在被監(jiān)視的主服務(wù)器進(jìn)入下線狀態(tài)時(shí),自動(dòng)將下線主服務(wù)器屬下的某個(gè)從服務(wù)器升級(jí)為新的主服務(wù)器。簡(jiǎn)單的說(shuō)哨兵就是帶有自動(dòng)故障轉(zhuǎn)移功能的主從架構(gòu)。

無(wú)法解決:1.單節(jié)點(diǎn)并發(fā)壓力問(wèn)題 2.單節(jié)點(diǎn)內(nèi)存和磁盤(pán)物理上限

主從切換技術(shù)的方法是:當(dāng)主服務(wù)器宕機(jī)后,需要手動(dòng)把一臺(tái)從服務(wù)器切換為主服務(wù)器,這就需要人工干預(yù),費(fèi)事費(fèi)力,還會(huì)造成一段時(shí)間內(nèi)服務(wù)不可用。這不是一種推薦的方式,更多時(shí)候,我們優(yōu)先考慮哨兵模式。

2 哨兵架構(gòu)原理

在這里插入圖片描述

單機(jī)單個(gè)哨兵

在這里插入圖片描述

哨兵的作用:

  • 通過(guò)發(fā)送命令,讓Redis服務(wù)器返回監(jiān)控其運(yùn)行狀態(tài),包括主服務(wù)器和從服務(wù)器。
  • 當(dāng)哨兵監(jiān)測(cè)到master宕機(jī),會(huì)自動(dòng)將slave切換成master,然后通過(guò)發(fā)布訂閱模式通知其他的從服務(wù)器,修改配置文件,讓它們切換主機(jī)。

然而一個(gè)哨兵進(jìn)程對(duì)redis服務(wù)器進(jìn)行監(jiān)控,可能會(huì)出現(xiàn)問(wèn)題,為此,我們可以使用多個(gè)哨兵進(jìn)行監(jiān)控。各個(gè)哨兵之間還會(huì)進(jìn)行監(jiān)控,這樣就形成了多哨兵模式。

在這里插入圖片描述

假設(shè)主服務(wù)器宕機(jī),哨兵1先檢測(cè)到這個(gè)結(jié)果,系統(tǒng)并不會(huì)立馬進(jìn)行failover過(guò)程,僅僅是哨兵1主觀的認(rèn)為主服務(wù)器不可用,這個(gè)現(xiàn)象稱為主觀下線。當(dāng)后面的哨兵也檢測(cè)到主服務(wù)器不可用,并且達(dá)到一定數(shù)量,那么哨兵之間會(huì)進(jìn)行一次投票,投票的結(jié)果由一個(gè)哨兵發(fā)起,進(jìn)行failover(故障轉(zhuǎn)移操作)。q切換成功后,通過(guò)發(fā)布訂閱模式,讓各個(gè)哨兵把自己的監(jiān)控的從服務(wù)器實(shí)現(xiàn)切換主機(jī),這個(gè)過(guò)稱為客觀下線。

哨兵的核心配置

sentinel monitor mymaster 127.0.0.1 6379 1
  • 數(shù)字1表示 :當(dāng)一個(gè)哨兵主觀認(rèn)為主機(jī)斷開(kāi),就可以客觀認(rèn)為主機(jī)故障,然后開(kāi)始選舉新的主機(jī)。
3 搭建哨兵架構(gòu)

1.在主節(jié)點(diǎn)上創(chuàng)建哨兵配置

  • 在Master對(duì)應(yīng)redis.conf同目錄下新建sentinel.conf文件,名字絕對(duì)不能錯(cuò);
    $ vi sentinel.conf

2.配置哨兵,在sentinel.conf文件中填入內(nèi)容:

  • sentinel monitor 被監(jiān)控?cái)?shù)據(jù)庫(kù)名字(自己起名字) ip port 1
  • 1 代表有多少個(gè)哨兵認(rèn)為主機(jī)掛了,就開(kāi)始選
    說(shuō)明:這個(gè)后面的數(shù)字2,是指當(dāng)有兩個(gè)及以上的sentinel服務(wù)檢測(cè)到master宕機(jī),才會(huì)去執(zhí)行主從切換的功能。
    $ sentinel monitor myredis 127.0.0.1 6379 1

3.啟動(dòng)哨兵模式進(jìn)行測(cè)試

- redis-sentinel  config/sentinel.conf
如果master節(jié)點(diǎn)斷開(kāi)了,就會(huì)從從機(jī)中選擇一個(gè)作為主機(jī)。

如果主機(jī)此時(shí)回來(lái)了,只能歸并到新的主機(jī)下,當(dāng)作從機(jī),這就是哨兵模式的規(guī)則。

優(yōu)點(diǎn):

  1. 哨兵集群,基于主從復(fù)制模式,所有主從配置的優(yōu)點(diǎn)他都有
  2. 主從可以切換,故障可以轉(zhuǎn)移,系統(tǒng)可用性會(huì)更好
  3. 哨兵模式就是主從模式的升級(jí),手動(dòng)到自動(dòng),更加健壯

缺點(diǎn):

  1. redis不好在線擴(kuò)容,集群容量一旦到達(dá)上限,在線擴(kuò)容就十分麻煩
  2. 實(shí)現(xiàn)哨兵模式的配置其實(shí)是很麻煩的,里面有很多選擇

完整的哨兵配置

# Example sentinel.conf
 
# 哨兵sentinel實(shí)例運(yùn)行的端口 默認(rèn)26379
port 26379
 
# 哨兵sentinel的工作目錄
dir /tmp
 
# 哨兵sentinel監(jiān)控的redis主節(jié)點(diǎn)的 ip port 
# master-name  可以自己命名的主節(jié)點(diǎn)名字 只能由字母A-z、數(shù)字0-9 、這三個(gè)字符".-_"組成。
# quorum 當(dāng)這些quorum個(gè)數(shù)sentinel哨兵認(rèn)為master主節(jié)點(diǎn)失聯(lián) 那么這時(shí) 客觀上認(rèn)為主節(jié)點(diǎn)失聯(lián)了
# sentinel monitorsentinel monitor mymaster 127.0.0.1 6379 1
 
# 當(dāng)在Redis實(shí)例中開(kāi)啟了requirepass foobared 授權(quán)密碼 這樣所有連接Redis實(shí)例的客戶端都要提供密碼
# 設(shè)置哨兵sentinel 連接主從的密碼 注意必須為主從設(shè)置一樣的驗(yàn)證密碼
# sentinel auth-passsentinel auth-pass mymaster MySUPER--secret-0123passw0rd
 
 
# 指定多少毫秒之后 主節(jié)點(diǎn)沒(méi)有應(yīng)答哨兵sentinel 此時(shí) 哨兵主觀上認(rèn)為主節(jié)點(diǎn)下線 默認(rèn)30秒
# sentinel down-after-millisecondssentinel down-after-milliseconds mymaster 30000
 
# 這個(gè)配置項(xiàng)指定了在發(fā)生failover主備切換時(shí)最多可以有多少個(gè)slave同時(shí)對(duì)新的master進(jìn)行 同步,
這個(gè)數(shù)字越小,完成failover所需的時(shí)間就越長(zhǎng),
但是如果這個(gè)數(shù)字越大,就意味著越 多的slave因?yàn)閞eplication而不可用。
可以通過(guò)將這個(gè)值設(shè)為 1 來(lái)保證每次只有一個(gè)slave 處于不能處理命令請(qǐng)求的狀態(tài)。
# sentinel parallel-syncssentinel parallel-syncs mymaster 1
 
 
 
# 故障轉(zhuǎn)移的超時(shí)時(shí)間 failover-timeout 可以用在以下這些方面: 
#1. 同一個(gè)sentinel對(duì)同一個(gè)master兩次failover之間的間隔時(shí)間。
#2. 當(dāng)一個(gè)slave從一個(gè)錯(cuò)誤的master那里同步數(shù)據(jù)開(kāi)始計(jì)算時(shí)間。直到slave被糾正為向正確的master那里同步數(shù)據(jù)時(shí)。
#3.當(dāng)想要取消一個(gè)正在進(jìn)行的failover所需要的時(shí)間。  
#4.當(dāng)進(jìn)行failover時(shí),配置所有slaves指向新的master所需的大時(shí)間。不過(guò),即使過(guò)了這個(gè)超時(shí),slaves依然會(huì)被正確配置為指向master,但是就不按parallel-syncs所配置的規(guī)則來(lái)了
# 默認(rèn)三分鐘
# sentinel failover-timeoutsentinel failover-timeout mymaster 180000
 
# SCRIPTS EXECUTION
 
#配置當(dāng)某一事件發(fā)生時(shí)所需要執(zhí)行的腳本,可以通過(guò)腳本來(lái)通知管理員,例如當(dāng)系統(tǒng)運(yùn)行不正常時(shí)發(fā)郵件通知相關(guān)人員。
#對(duì)于腳本的運(yùn)行結(jié)果有以下規(guī)則:
#若腳本執(zhí)行后返回1,那么該腳本稍后將會(huì)被再次執(zhí)行,重復(fù)次數(shù)目前默認(rèn)為10
#若腳本執(zhí)行后返回2,或者比2更高的一個(gè)返回值,腳本將不會(huì)重復(fù)執(zhí)行。
#如果腳本在執(zhí)行過(guò)程中由于收到系統(tǒng)中斷信號(hào)被終止了,則同返回值為1時(shí)的行為相同。
#一個(gè)腳本的大執(zhí)行時(shí)間為60s,如果超過(guò)這個(gè)時(shí)間,腳本將會(huì)被一個(gè)SIGKILL信號(hào)終止,之后重新執(zhí)行。
 
#通知型腳本:當(dāng)sentinel有任何警告級(jí)別的事件發(fā)生時(shí)(比如說(shuō)redis實(shí)例的主觀失效和客觀失效等等),將會(huì)去調(diào)用這個(gè)腳本,
#這時(shí)這個(gè)腳本應(yīng)該通過(guò)郵件,SMS等方式去通知系統(tǒng)管理員關(guān)于系統(tǒng)不正常運(yùn)行的信息。調(diào)用該腳本時(shí),將傳給腳本兩個(gè)參數(shù),
#一個(gè)是事件的類型,
#一個(gè)是事件的描述。
#如果sentinel.conf配置文件中配置了這個(gè)腳本路徑,那么必須保證這個(gè)腳本存在于這個(gè)路徑,并且是可執(zhí)行的,否則sentinel無(wú)法正常啟動(dòng)成功。
#通知腳本
# sentinel notification-scriptsentinel notification-script mymaster /var/redis/notify.sh
 
# 客戶端重新配置主節(jié)點(diǎn)參數(shù)腳本
# 當(dāng)一個(gè)master由于failover而發(fā)生改變時(shí),這個(gè)腳本將會(huì)被調(diào)用,通知相關(guān)的客戶端關(guān)于master地址已經(jīng)發(fā)生改變的信息。
# 以下參數(shù)將會(huì)在調(diào)用腳本時(shí)傳給腳本:
## 目前總是“failover”,
#是“l(fā)eader”或者“observer”中的一個(gè)。 
# 參數(shù) from-ip, from-port, to-ip, to-port是用來(lái)和舊的master和新的master(即舊的slave)通信的
# 這個(gè)腳本應(yīng)該是通用的,能被多次調(diào)用,不是針對(duì)性的。
# sentinel client-reconfig-scriptsentinel client-reconfig-script mymaster /var/redis/reconfig.sh
4 通過(guò)springboot操作哨兵
# redis sentinel 配置
# master書(shū)寫(xiě)是使用哨兵監(jiān)聽(tīng)的那個(gè)名稱
spring.redis.sentinel.master=mymaster
# 連接的不再是一個(gè)具體redis主機(jī),書(shū)寫(xiě)的是多個(gè)哨兵節(jié)點(diǎn)
spring.redis.sentinel.nodes=192.168.202.206:26379

注意:如果連接過(guò)程中出現(xiàn)如下錯(cuò)誤:RedisConnectionException: DENIED Redis is running in protected mode because protected mode is enabled, no bind address was specified, no authentication password is requested to clients. In this mode connections are only accepted from the loopback interface. If you want to connect from external computers to Redis you may adopt one of the following solutions: 1) Just disable protected mode sending the command ‘CONFIG SET protected-mode no’ from the loopback interface by connecting to Redis from the same host the server is running, however MAKE SURE Redis is not publicly accessible from internet if you do so. Use CONFIG REWRITE to make this change permanent. 2

解決方案:在哨兵的配置文件中加入bind 0.0.0.0 開(kāi)啟遠(yuǎn)程連接權(quán)限

一般在port下面加入即可bind 0.0.0.0

Redis發(fā)布訂閱

redis發(fā)布訂閱(pub/sub)是一種消息通測(cè)試

發(fā)布者

127.0.0.1:6379>PUBLISH xxx hello,qqqq   # 發(fā)布消息hello,qqq到xxx頻道
(integer) 1
127.0.0.1:6379>PUBLISH xxx hello,redis
(integer) 1

訂閱者

127.0.0.1:6379>SUBSCRIBE xxx       # 訂閱頻道
Reading messages... (press Ctrl-C to quit)

1) "subscribe"
2) "xxx"
3) (integer) 1

#等待消息

1) "message"        # 消息
2) "xxx"            # 消息頻道
3) "hello,qqqq"     # 消息內(nèi)容
4) "message"
5) "xxx"
6) "hello,redis"

原理:

Redis是使用C實(shí)現(xiàn)的,通過(guò)分析redis源碼里的pubsub.cc文件,了解發(fā)布和訂閱機(jī)制的底層實(shí)現(xiàn),借此加深堆redis的理解。
redis是通過(guò)PUBLISH、SUBSCRIBE和PSUBSCRIBE等命令實(shí)現(xiàn)發(fā)布和訂閱功能。
通過(guò)SUBSCRIBE命令訂閱某頻道后,redis-server里維護(hù)了一個(gè)字典,字典的鍵就是一個(gè)一個(gè)個(gè)channel, 而字典的值則是一個(gè)鏈表,鏈表中保存了所有訂閱這個(gè)channel的客戶端。SUBSCRIBE命令的關(guān)鍵就是將客戶端添加到給定的channel的訂閱鏈表中。
通過(guò)PUBLISH命令向訂閱者發(fā)送消息,redis-server會(huì)使用給定的頻道作為鍵,在它所維護(hù)的channel字典中查找記錄了訂閱這個(gè)頻道的客戶端的鏈表,遍歷這個(gè)鏈表,將消息發(fā)布給所有的訂閱者。
pub/sub從字面上理解就是發(fā)布(Publish)和訂閱(Subscribe),在redis中,可以設(shè)定對(duì)某一個(gè)key值進(jìn)行消息發(fā)布幾消息訂閱,當(dāng)一個(gè)key值上進(jìn)行了消息發(fā)布后,所有訂閱它的客戶端都會(huì)收到相應(yīng)的消息。這一功能最明顯的用法就是用作實(shí)時(shí)消息系統(tǒng),比如一個(gè)普通的即時(shí)聊天,群聊等。

  • 使用場(chǎng)景
    實(shí)時(shí)消息系統(tǒng)!
    實(shí)時(shí)聊天(頻道當(dāng)做聊天室,將信息回顯給所有人即可?。?br />訂閱,關(guān)注系統(tǒng)都是可以的!
    稍微復(fù)雜的場(chǎng)景我們就是用消息中間件MQ Kafka…信模式;

你是否還在尋找穩(wěn)定的海外服務(wù)器提供商?創(chuàng)新互聯(lián)www.cdcxhl.cn海外機(jī)房具備T級(jí)流量清洗系統(tǒng)配攻擊溯源,準(zhǔn)確流量調(diào)度確保服務(wù)器高可用性,企業(yè)級(jí)服務(wù)器適合批量采購(gòu),新人活動(dòng)首月15元起,快前往官網(wǎng)查看詳情吧

文章名稱:Redis哨兵機(jī)制以及發(fā)布訂閱-創(chuàng)新互聯(lián)
鏈接地址:http://www.rwnh.cn/article34/doecse.html

成都網(wǎng)站建設(shè)公司_創(chuàng)新互聯(lián),為您提供網(wǎng)站設(shè)計(jì)公司網(wǎng)站導(dǎo)航、網(wǎng)站建設(shè)企業(yè)建站、品牌網(wǎng)站建設(shè)響應(yīng)式網(wǎng)站

廣告

聲明:本網(wǎng)站發(fā)布的內(nèi)容(圖片、視頻和文字)以用戶投稿、用戶轉(zhuǎn)載內(nèi)容為主,如果涉及侵權(quán)請(qǐng)盡快告知,我們將會(huì)在第一時(shí)間刪除。文章觀點(diǎn)不代表本網(wǎng)站立場(chǎng),如需處理請(qǐng)聯(lián)系客服。電話:028-86922220;郵箱:631063699@qq.com。內(nèi)容未經(jīng)允許不得轉(zhuǎn)載,或轉(zhuǎn)載時(shí)需注明來(lái)源: 創(chuàng)新互聯(lián)

綿陽(yáng)服務(wù)器托管
韩城市| 台安县| 西吉县| 信阳市| 额济纳旗| 河津市| 西青区| 汉沽区| 莱阳市| 黄平县| 江阴市| 成安县| 怀化市| 集安市| 浑源县| 安新县| 丹棱县| 永兴县| 且末县| 仪陇县| 武功县| 鹤庆县| 上虞市| 渝中区| 株洲市| 东丽区| 壶关县| 玛曲县| 宽城| 黑河市| 华亭县| 东台市| 多伦县| 定襄县| 汽车| 双鸭山市| 迁西县| 德钦县| 莒南县| 武功县| 灌南县|