溫馨提示×

溫馨提示×

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

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

sentinel構(gòu)建高可用redis集群的注意事項有哪些

發(fā)布時間:2021-07-07 16:35:57 來源:億速云 閱讀:247 作者:chen 欄目:大數(shù)據(jù)

這篇文章主要講解了“sentinel構(gòu)建高可用redis集群的注意事項有哪些”,文中的講解內(nèi)容簡單清晰,易于學(xué)習(xí)與理解,下面請大家跟著小編的思路慢慢深入,一起來研究和學(xué)習(xí)“sentinel構(gòu)建高可用redis集群的注意事項有哪些”吧!

部署redis高可用集群時,通常會用到redis官方的sentinel。sentinel監(jiān)控master狀況,master宕機(jī)時進(jìn)行集群master的故障轉(zhuǎn)移。部署時方法網(wǎng)上很多,這里列出了一些需要注意的事項。

設(shè)置相同的集群密碼

為了安全,有時候會對redis和sentinel設(shè)置密碼,由于集群可能會切換,所以redis集群的密碼最好相同,對于將slave-priority設(shè)置為0的節(jié)點,由于不會成為master,所以密碼可以單獨設(shè)置,不與其他機(jī)器相同,只要masterauth設(shè)置為master的密碼即可。

sentinel在redis5以后的版本支持設(shè)置密碼,由于sentinel之間需要相互通信,所以整個sentinel集群內(nèi)密碼必須相同。當(dāng)然不需要與redis節(jié)點的密碼相同

redis綁定本地IP

redis配置文件的bind指令可以綁定多個IP, 默認(rèn)綁定了127.0.0.1。如果sentinel不在本機(jī),需要redis綁定外網(wǎng)IP,這時bind綁定的第一個IP必須可以對外訪問。

redis的主從復(fù)制需要slave和master通信,而redis對外建立TCP連接時,會使用bind綁定的第一個IP作為本地IP,如配置了bind 127.0.0.1 1.1.1.1,slave訪問master時,會綁定127.0.0.1,master如果不是本機(jī),會連接失敗。

配置文件的dir放在其他路徑相關(guān)指令的前面

dir指令改變后面指令的相對路徑,如果配置中有其他依賴相對文件路徑的指令,如pidfilelogfile,要把這些指令放在dir指令后面。

禁用CONFIG指令導(dǎo)致無法切換master

redis的CONFIG指令會修改本地文件,導(dǎo)致安全風(fēng)險,而在配置文件中加入rename-command CONFIG "",可以禁用CONFIG指令。

sentinel檢測到master宕機(jī)進(jìn)行故障切換時,會向slave發(fā)送一個事務(wù)指令(MULTI), 包含有SLAVEOFCONFIG兩個指令,SLAVEOF指令指示slave更換master,CONFIG指令將slaveof更新到配置文件里。如果禁用了CONFIG指令會導(dǎo)致事務(wù)失敗,相應(yīng)的slave無法切換master。

sentinel機(jī)器無外網(wǎng)IP需通過announce-ip指定

redis和sentinel都支持announce-ipannounce-port聲明ip和端口,如果對外提供服務(wù)的IP與對外訪問的出口不一致時需要指定這個配置,尤其現(xiàn)在很多云主機(jī)都是只有內(nèi)網(wǎng)IP,通過slb對外訪問的。

sentinel之間的相互發(fā)現(xiàn)是靠master來實現(xiàn)的,sentienl向master的__sentinel__:hello"的channel廣播自己的IP地址,其他sentinel根據(jù)這個消息發(fā)現(xiàn)其他的sentinel。如果sentienl的機(jī)器是內(nèi)網(wǎng)的,而sentinel之間需要外網(wǎng)訪問,就需要在配置文件里,將announce-ip配置為外網(wǎng)可以訪問的IP。而redis之間,地址通過TCP連接的對端地址獲取,不存在這個問題。

向運行中sentinel增加帶有密碼的redis集群

sentinel通過讀取配置文件獲取master信息,同時運行中的sentinel也可以通過指令配置。

在通過sentinel monitor可以增加監(jiān)控的集群時,如果集群帶有密碼,通過sentinel set 集群名 auth-pass password來設(shè)置。設(shè)置后需要通過sentinel reset 集群名,讓sentinel重新與集群master建立TCP連接才能真正生效。

不要對已加入集群的redis執(zhí)行手動執(zhí)行slaveof

sentinel會監(jiān)控集群中節(jié)點的狀態(tài),如果對redis集群內(nèi)的機(jī)器手動執(zhí)行slaveof執(zhí)行,sentinel發(fā)現(xiàn)后會重新發(fā)送slaveof指令,保證集群的正常運行。

從集群內(nèi)移除節(jié)點

如果節(jié)點是slave,先將節(jié)點宕機(jī),然后向所有監(jiān)控這個集群的sentinel,發(fā)送sentinel reset 集群名重置集群節(jié)點信息,將節(jié)點從集群徹底移除,保證所有的sentinel都執(zhí)行了這個指令,否則sentinel會重新發(fā)送slaveof指令將節(jié)點加入集群。

如果節(jié)點是master,需要切換master,后照slave的情況進(jìn)行。

移除sentinel節(jié)點,與移除slave方法相同。

redis集群多層級

redis主從復(fù)制支持多層級,如果使用了sentinel,集群的管理可能出現(xiàn)混亂。

如node1有兩個從節(jié)點node2和node3,node2有一個從節(jié)點node4。如果node1宕機(jī),sentinel將集群的master切換到了node2,那么node3和node4就變成了同一個層級的,這時sentinel該如果處理?不過并沒有實際進(jìn)行驗證,不確定的情況下最好避免這種情形。

sentinel故障切換時如何選擇slave

sentinel發(fā)現(xiàn)master宕機(jī)時,改為每一秒向所有的slave發(fā)送INFO指令,以及時獲取slave狀態(tài)。之后需要選擇一個slave提升為集群master。

在選擇slave時,將連接正常,且slave-priority不為0的slave組成一個數(shù)組,按照節(jié)點的slave-priority從小到大排序,對于slave-priority值相同的節(jié)點,依照節(jié)點的slave_repl_offset值從大到小排序(slave_repl_offset為主從復(fù)制的偏移,值越大說明節(jié)點的數(shù)據(jù)越接近master)。排序完成后,選擇數(shù)組中最前面的節(jié)點,提升為集群master。

redis集群數(shù)據(jù)不滿足強(qiáng)一致性

redis主從復(fù)制并沒有提供強(qiáng)一致性,所以從slave讀到的數(shù)據(jù)與master可能有延遲。且master故障切換時數(shù)據(jù)可能會丟失。

senetinel并不關(guān)注redis主從復(fù)制的狀態(tài)與延遲,選擇sentinel時也不會保證將擁有最新數(shù)據(jù)的slave提升為master。

新部署的slave在同步完成前沒有數(shù)據(jù)

新部署的slave,同master連接后,master生成一個rdb文件傳輸給slave,slave加載其中的數(shù)據(jù)。在這個過程中,slave是可以對外訪問的,導(dǎo)致這個期間請求獲取的結(jié)果都是不存在的。只有在slave收到rdb文件,加載的過程中,redis無法對外服務(wù)。

感謝各位的閱讀,以上就是“sentinel構(gòu)建高可用redis集群的注意事項有哪些”的內(nèi)容了,經(jīng)過本文的學(xué)習(xí)后,相信大家對sentinel構(gòu)建高可用redis集群的注意事項有哪些這一問題有了更深刻的體會,具體使用情況還需要大家實踐驗證。這里是億速云,小編將為大家推送更多相關(guān)知識點的文章,歡迎關(guān)注!

向AI問一下細(xì)節(jié)

免責(zé)聲明:本站發(fā)布的內(nèi)容(圖片、視頻和文字)以原創(chuàng)、轉(zhuǎn)載和分享為主,文章觀點不代表本網(wǎng)站立場,如果涉及侵權(quán)請聯(lián)系站長郵箱:is@yisu.com進(jìn)行舉報,并提供相關(guān)證據(jù),一經(jīng)查實,將立刻刪除涉嫌侵權(quán)內(nèi)容。

AI