日韩无码专区无码一级三级片|91人人爱网站中日韩无码电影|厨房大战丰满熟妇|AV高清无码在线免费观看|另类AV日韩少妇熟女|中文日本大黄一级黄色片|色情在线视频免费|亚洲成人特黄a片|黄片wwwav色图欧美|欧亚乱色一区二区三区

RELATEED CONSULTING
相關(guān)咨詢(xún)
選擇下列產(chǎn)品馬上在線溝通
服務(wù)時(shí)間:8:30-17:00
你可能遇到了下面的問(wèn)題
關(guān)閉右側(cè)工具欄

新聞中心

這里有您想知道的互聯(lián)網(wǎng)營(yíng)銷(xiāo)解決方案
Redis哨兵模式(Sentinel)

Redis Sentinel是Redis官方推薦的高可用性(HA)解決方案,當(dāng)用Redis做Master-slave的高可用方案時(shí),假如master宕機(jī)了,Redis本身(包括它的很多客戶(hù)端)都沒(méi)有實(shí)現(xiàn)自動(dòng)進(jìn)行主備切換,而Redis-sentinel本身也是一個(gè)獨(dú)立運(yùn)行的進(jìn)程,它能監(jiān)控多個(gè)master-slave集群,發(fā)現(xiàn)master宕機(jī)后能進(jìn)行自懂切換。

創(chuàng)新互聯(lián)長(zhǎng)期為上千家客戶(hù)提供的網(wǎng)站建設(shè)服務(wù),團(tuán)隊(duì)從業(yè)經(jīng)驗(yàn)10年,關(guān)注不同地域、不同群體,并針對(duì)不同對(duì)象提供差異化的產(chǎn)品和服務(wù);打造開(kāi)放共贏平臺(tái),與合作伙伴共同營(yíng)造健康的互聯(lián)網(wǎng)生態(tài)環(huán)境。為獲嘉企業(yè)提供專(zhuān)業(yè)的成都網(wǎng)站設(shè)計(jì)、網(wǎng)站建設(shè),獲嘉網(wǎng)站改版等技術(shù)服務(wù)。擁有10年豐富建站經(jīng)驗(yàn)和眾多成功案例,為您定制開(kāi)發(fā)。

1. Redis主從配置

1.1. 設(shè)置主從復(fù)制

Master

10.24.6.5:6379

1.2. 取消主從復(fù)制

1.3. 刪除所有數(shù)據(jù)

flushdb:刪除這個(gè)db下的。flushall:刪除所有

2. Sentinel高可用配置

Sentinel服務(wù)器地址:

10.24.6.7

啟動(dòng)

Redis-sentinel sentinel.conf

或者

Redis-server sentinel.conf –sentinel

Redis服務(wù)器:

Master

10.24.6.5:6379

10.24.6.4:6379

10.24.6.6:6379

2.1. Sentinel客戶(hù)端:

2.1.1. Redis-DeskopMaster

2.1.2. Redis-cli

2.2. 查看Sentinel(info)

2.3. 添加redis sentinel

有兩種方式,一種是通過(guò)配置文件,如何配置參考附錄的sentinel.conf。這種方式主要是面向預(yù)配置的redis群集。

另外一種方式使用redis-cli做熱配置:

127.0.0.1:26381> sentinel monitor mymaster 172.18.18.207 6501 1 OK

命令的格式如下:

SENTINEL MONITOR

注:quorum表示發(fā)起failover需要的sentinel數(shù)量,看sentinel群集的數(shù)量決定。

2.4. 刪除redis sentinel

從sentinel中刪除群集,命令: 172.18.18.207:26381> sentinel remove mymaster OK

2.5. Sentinel高可用管理

2.5.1. 查看所有master

2.5.2. 查看master的slave

2.6. Sentinel高可用客戶(hù)端選擇服務(wù)

from* redis.sentinel* import* Sentinelsentinel = Sentinel([(*‘10.24.6.7’****,** 26379*)], socket_timeout=0.1)master = sentinel.master_for(******’10.24.6.5master’******, socket_timeout=0.1)print mastermaster.set(*‘foo’****,** ‘bar’*)print master.get(*‘foo’******)**

2.7. Sentinel高可用性原理

首先解釋2個(gè)名詞:SDOWN和ODOWN.

- SDOWN:subjectively down,直接翻譯的為"主觀"失效,即當(dāng)前sentinel實(shí)例認(rèn)為某個(gè)redis服務(wù)為"不可用"狀態(tài).
- ODOWN:objectively down,直接翻譯為"客觀"失效,即多個(gè)sentinel實(shí)例都認(rèn)為master處于"SDOWN"狀態(tài),那么此時(shí)master將處于ODOWN,ODOWN可以簡(jiǎn)單理解為master已經(jīng)被集群確定為"不可用",將會(huì)開(kāi)啟failover.

  SDOWN適合于master和slave,但是ODOWN只會(huì)使用于master;當(dāng)slave失效超過(guò)"down-after-milliseconds"后,那么所有sentinel實(shí)例都會(huì)將其標(biāo)記為"SDOWN".

  \1) SDOWN與ODOWN轉(zhuǎn)換過(guò)程:

- 每個(gè)sentinel實(shí)例在啟動(dòng)后,都會(huì)和已知的slaves/master以及其他sentinels建立TCP連接,并周期性發(fā)送PING(默認(rèn)為1秒)
- 在交互中,如果redis-server無(wú)法在"down-after-milliseconds"時(shí)間內(nèi)響應(yīng)或者響應(yīng)錯(cuò)誤信息,都會(huì)被認(rèn)為此redis-server處于SDOWN狀態(tài).
- 如果2)中SDOWN的server為master,那么此時(shí)sentinel實(shí)例將會(huì)向其他sentinel間歇性(一秒)發(fā)送"is-master-down-by-addr 
  
   "指令并獲取響應(yīng)信息,如果足夠多的sentinel實(shí)例檢測(cè)到master處于SDOWN,那么此時(shí)當(dāng)前sentinel實(shí)例標(biāo)記master為ODOWN...其他sentinel實(shí)例做同樣的交互操作.配置項(xiàng)"sentinel monitor 
   
     
    
      
     
      ",如果檢測(cè)到master處于SDOWN狀態(tài)的slave個(gè)數(shù)達(dá)到
      
       ,那么此時(shí)此sentinel實(shí)例將會(huì)認(rèn)為master處于ODOWN. - 每個(gè)sentinel實(shí)例將會(huì)間歇性(10秒)向master和slaves發(fā)送"INFO"指令,如果master失效且沒(méi)有新master選出時(shí),每1秒發(fā)送一次"INFO";"INFO"的主要目的就是獲取并確認(rèn)當(dāng)前集群環(huán)境中slaves和master的存活情況. - 經(jīng)過(guò)上述過(guò)程后,所有的sentinel對(duì)master失效達(dá)成一致后,開(kāi)始failover. 
      
     
    
   
  

\2) Sentinel與slaves”自動(dòng)發(fā)現(xiàn)”機(jī)制:

在sentinel的配置文件中(local-sentinel.conf),都指定了port,此port就是sentinel實(shí)例偵聽(tīng)其他sentinel實(shí)例建立鏈接的端口.在集群穩(wěn)定后,最終會(huì)每個(gè)sentinel實(shí)例之間都會(huì)建立一個(gè)tcp鏈接,此鏈接中發(fā)送”P(pán)ING”以及類(lèi)似于”is-master-down-by-addr”指令集,可用用來(lái)檢測(cè)其他sentinel實(shí)例的有效性以及”O(jiān)DOWN”和”failover”過(guò)程中信息的交互. 在sentinel之間建立連接之前,sentinel將會(huì)盡力和配置文件中指定的master建立連接.sentinel與master的連接中的通信主要是基于pub/sub來(lái)發(fā)布和接收信息,發(fā)布的信息內(nèi)容包括當(dāng)前sentinel實(shí)例的偵聽(tīng)端口:

  1. +sentinel sentinel 127.0.0.1:26579 127.0.0.1 26579 ….

發(fā)布的主題名稱(chēng)為”sentinel:hello”;同時(shí)sentinel實(shí)例也是”訂閱”此主題,以獲得其他sentinel實(shí)例的信息.由此可見(jiàn),環(huán)境首次構(gòu)建時(shí),在默認(rèn)master存活的情況下,所有的sentinel實(shí)例可以通過(guò)pub/sub即可獲得所有的sentinel信息,此后每個(gè)sentinel實(shí)例即可以根據(jù)+sentinel信息中的”ip+port”和其他sentinel逐個(gè)建立tcp連接即可.不過(guò)需要提醒的是,每個(gè)sentinel實(shí)例均會(huì)間歇性(5秒)向”sentinel:hello”主題中發(fā)布自己的ip+port,目的就是讓后續(xù)加入集群的sentinel實(shí)例也能或得到自己的信息. 根據(jù)上文,我們知道在master有效的情況下,即可通過(guò)”INFO”指令獲得當(dāng)前master中已有的slave列表;此后任何slave加入集群,master都會(huì)向”主題中”發(fā)布”+slave 127.0.0.1:6579 ..”,那么所有的sentinel也將立即獲得slave信息,并和slave建立鏈接并通過(guò)PING檢測(cè)其存活性.

補(bǔ)充一下,每個(gè)sentinel實(shí)例都會(huì)保存其他sentinel實(shí)例的列表以及現(xiàn)存的master/slaves列表,各自的列表中不會(huì)有重復(fù)的信息(不可能出現(xiàn)多個(gè)tcp連接),對(duì)于sentinel將使用ip+port做唯一性標(biāo)記,對(duì)于master/slaver將使用runid做唯一性標(biāo)記,其中redis-server的runid在每次啟動(dòng)時(shí)都不同.

\3) Leader選舉:

其實(shí)在sentinels故障轉(zhuǎn)移中,仍然需要一個(gè)“Leader”來(lái)調(diào)度整個(gè)過(guò)程:master的選舉以及slave的重配置和同步。當(dāng)集群中有多個(gè)sentinel實(shí)例時(shí),如何選舉其中一個(gè)sentinel為leader呢?

在配置文件中“can-failover”“quorum”參數(shù),以及“is-master-down-by-addr”指令配合來(lái)完成整個(gè)過(guò)程。

A) “can-failover”用來(lái)表明當(dāng)前sentinel是否可以參與“failover”過(guò)程,如果為“YES”則表明它將有能力參與“Leader”的選舉,否則它將作為“Observer”,observer參與leader選舉投票但不能被選舉;

B) “quorum”不僅用來(lái)控制master ODOWN狀態(tài)確認(rèn),同時(shí)還用來(lái)選舉leader時(shí)最小“贊同票”數(shù);

C) “is-master-down-by-addr”,在上文中以及提到,它可以用來(lái)檢測(cè)“ip + port”的master是否已經(jīng)處于SDOWN狀態(tài),不過(guò)此指令不僅能夠獲得master是否處于SDOWN,同時(shí)它還額外的返回當(dāng)前sentinel本地“投票選舉”的Leader信息(runid);

每個(gè)sentinel實(shí)例都持有其他的sentinels信息,在Leader選舉過(guò)程中(當(dāng)為leader的sentinel實(shí)例失效時(shí),有可能master server并沒(méi)失效,注意分開(kāi)理解),sentinel實(shí)例將從所有的sentinels集合中去除“can-failover = no”和狀態(tài)為SDOWN的sentinels,在剩余的sentinels列表中按照runid按照“字典”順序排序后,取出runid最小的sentinel實(shí)例,并將它“投票選舉”為L(zhǎng)eader,并在其他sentinel發(fā)送的“is-master-down-by-addr”指令時(shí)將推選的runid追加到響應(yīng)中。每個(gè)sentinel實(shí)例都會(huì)檢測(cè)“is-master-down-by-addr”的響應(yīng)結(jié)果,如果“投票選舉”的leader為自己,且狀態(tài)正常的sentinels實(shí)例中,“贊同者”的自己的sentinel個(gè)數(shù)不小于(>=) 50% + 1,且不小與,那么此sentinel就會(huì)認(rèn)為選舉成功且leader為自己。

在sentinel.conf文件中,我們期望有足夠多的sentinel實(shí)例配置“can-failover yes”,這樣能夠確保當(dāng)leader失效時(shí),能夠選舉某個(gè)sentinel為leader,以便進(jìn)行failover。如果leader無(wú)法產(chǎn)生,比如較少的sentinels實(shí)例有效,那么failover過(guò)程將無(wú)法繼續(xù).

\4) failover過(guò)程:

在Leader觸發(fā)failover之前,首先wait數(shù)秒(隨即0~5),以便讓其他sentinel實(shí)例準(zhǔn)備和調(diào)整(有可能多個(gè)leader??),如果一切正常,那么leader就需要開(kāi)始將一個(gè)salve提升為master,此slave必須為狀態(tài)良好(不能處于SDOWN/ODOWN狀態(tài))且權(quán)重值最低(redis.conf中)的,當(dāng)master身份被確認(rèn)后,開(kāi)始failover

A)“+failover-triggered”: Leader開(kāi)始進(jìn)行failover,此后緊跟著“+failover-state-wait-start”,wait數(shù)秒。

B)“+failover-state-select-slave”: Leader開(kāi)始查找合適的slave

C)“+selected-slave”: 已經(jīng)找到合適的slave

D) “+failover-state-sen-slaveof-noone”: Leader向slave發(fā)送“slaveof no one”指令,此時(shí)slave已經(jīng)完成角色轉(zhuǎn)換,此slave即為master

E) “+failover-state-wait-promotition”: 等待其他sentinel確認(rèn)slave

F)“+promoted-slave”:確認(rèn)成功

G)“+failover-state-reconf-slaves”: 開(kāi)始對(duì)slaves進(jìn)行reconfig操作。

H)“+slave-reconf-sent”:向指定的slave發(fā)送“slaveof”指令,告知此slave跟隨新的master

I)“+slave-reconf-inprog”: 此slave正在執(zhí)行slaveof + SYNC過(guò)程,如過(guò)slave收到“+slave-reconf-sent”之后將會(huì)執(zhí)行slaveof操作。

J)“+slave-reconf-done”: 此slave同步完成,此后leader可以繼續(xù)下一個(gè)slave的reconfig操作。循環(huán)G)

K)“+failover-end”: 故障轉(zhuǎn)移結(jié)束

L)“+switch-master”:故障轉(zhuǎn)移成功后,各個(gè)sentinel實(shí)例開(kāi)始監(jiān)控新的master。

Sentinel.conf詳解

1. \##sentinel實(shí)例之間的通訊端口 
2. \##redis-0 
3. port 26379 
4. \##sentinel需要監(jiān)控的master信息:
  
    
   
     
    
      
     
        5. \##
      
       應(yīng)該小于集群中slave的個(gè)數(shù),只有當(dāng)至少
       
        個(gè)sentinel實(shí)例提交"master失效"  6. \##才會(huì)認(rèn)為master為O_DWON("客觀"失效)  7. sentinel monitor def_master 127.0.0.1 6379 2  8. sentinel auth-pass def_master 012_345^678-90  9. \##master被當(dāng)前sentinel實(shí)例認(rèn)定為“失效”的間隔時(shí)間  10. \##如果當(dāng)前sentinel與master直接的通訊中,在指定時(shí)間內(nèi)沒(méi)有響應(yīng)或者響應(yīng)錯(cuò)誤代碼,那么  11. \##當(dāng)前sentinel就認(rèn)為master失效(SDOWN,“主觀”失效)  12. \##
        
          
         
            13. \##默認(rèn)為30秒  14. sentinel down-after-milliseconds def_master 30000  15.   16. \##當(dāng)前sentinel實(shí)例是否允許實(shí)施“failover”(故障轉(zhuǎn)移)  17. \##no表示當(dāng)前sentinel為“觀察者”(只參與"投票".不參與實(shí)施failover),  18. \##全局中至少有一個(gè)為yes  19. sentinel can-failover def_master yes  20.   21. \##當(dāng)新master產(chǎn)生時(shí),同時(shí)進(jìn)行“slaveof”到新master并進(jìn)行“SYNC”的slave個(gè)數(shù)。  22. \##默認(rèn)為1,建議保持默認(rèn)值  23. \##在salve執(zhí)行salveof與同步時(shí),將會(huì)終止客戶(hù)端請(qǐng)求。  24. \##此值較大,意味著“集群”終止客戶(hù)端請(qǐng)求的時(shí)間總和和較大。  25. \##此值較小,意味著“集群”在故障轉(zhuǎn)移期間,多個(gè)salve向客戶(hù)端提供服務(wù)時(shí)仍然使用舊數(shù)據(jù)。  26. sentinel parallel-syncs def_master 1  27.   28. \##failover過(guò)期時(shí)間,當(dāng)failover開(kāi)始后,在此時(shí)間內(nèi)仍然沒(méi)有觸發(fā)任何failover操作,  29. \##當(dāng)前sentinel將會(huì)認(rèn)為此次failoer失敗。  30. sentinel failover-timeout def_master 900000  31.   32. \##當(dāng)failover時(shí),可以指定一個(gè)“通知”腳本用來(lái)告知系統(tǒng)管理員,當(dāng)前集群的情況。  33. \##腳本被允許執(zhí)行的最大時(shí)間為60秒,如果超時(shí),腳本將會(huì)被終止(KILL)  34. \##腳本執(zhí)行的結(jié)果:  35. \## 1  -> 稍后重試,最大重試次數(shù)為10;   36. \## 2  -> 執(zhí)行結(jié)束,無(wú)需重試  37. \##sentinel notification-script mymaster /var/redis/notify.sh  38. \##failover之后重配置客戶(hù)端,執(zhí)行腳本時(shí)會(huì)傳遞大量參數(shù),請(qǐng)參考相關(guān)文檔  39. \# sentinel client-reconfig-script 
          
            
           
          
         
        
       
      
     
    
   
  

名稱(chēng)欄目:Redis哨兵模式(Sentinel)
標(biāo)題URL:http://www.5511xx.com/article/ccdhogh.html