這篇文章主要講解了“sentinel構(gòu)建高可用redis集群的注意事項(xiàng)有哪些”,文中的講解內(nèi)容簡(jiǎn)單清晰,易于學(xué)習(xí)與理解,下面請(qǐng)大家跟著小編的思路慢慢深入,一起來(lái)研究和學(xué)習(xí)“sentinel構(gòu)建高可用redis集群的注意事項(xiàng)有哪些”吧!
堅(jiān)守“ 做人真誠(chéng) · 做事靠譜 · 口碑至上 · 高效敬業(yè) ”的價(jià)值觀,專業(yè)網(wǎng)站建設(shè)服務(wù)10余年為成都航空箱小微創(chuàng)業(yè)公司專業(yè)提供企業(yè)網(wǎng)站設(shè)計(jì)營(yíng)銷網(wǎng)站建設(shè)商城網(wǎng)站建設(shè)手機(jī)網(wǎng)站建設(shè)小程序網(wǎng)站建設(shè)網(wǎng)站改版,從內(nèi)容策劃、視覺(jué)設(shè)計(jì)、底層架構(gòu)、網(wǎng)頁(yè)布局、功能開(kāi)發(fā)迭代于一體的高端網(wǎng)站建設(shè)服務(wù)。
部署redis高可用集群時(shí),通常會(huì)用到redis官方的sentinel。sentinel監(jiān)控master狀況,master宕機(jī)時(shí)進(jìn)行集群master的故障轉(zhuǎn)移。部署時(shí)方法網(wǎng)上很多,這里列出了一些需要注意的事項(xiàng)。
為了安全,有時(shí)候會(huì)對(duì)redis和sentinel設(shè)置密碼,由于集群可能會(huì)切換,所以redis集群的密碼最好相同,對(duì)于將slave-priority設(shè)置為0的節(jié)點(diǎn),由于不會(huì)成為master,所以密碼可以單獨(dú)設(shè)置,不與其他機(jī)器相同,只要masterauth設(shè)置為master的密碼即可。
sentinel在redis5以后的版本支持設(shè)置密碼,由于sentinel之間需要相互通信,所以整個(gè)sentinel集群內(nèi)密碼必須相同。當(dāng)然不需要與redis節(jié)點(diǎn)的密碼相同
redis配置文件的bind指令可以綁定多個(gè)IP, 默認(rèn)綁定了127.0.0.1。如果sentinel不在本機(jī),需要redis綁定外網(wǎng)IP,這時(shí)bind綁定的第一個(gè)IP必須可以對(duì)外訪問(wèn)。
redis的主從復(fù)制需要slave和master通信,而redis對(duì)外建立TCP連接時(shí),會(huì)使用bind綁定的第一個(gè)IP作為本地IP,如配置了bind 127.0.0.1 1.1.1.1
,slave訪問(wèn)master時(shí),會(huì)綁定127.0.0.1,master如果不是本機(jī),會(huì)連接失敗。
dir指令改變后面指令的相對(duì)路徑,如果配置中有其他依賴相對(duì)文件路徑的指令,如pidfile
、logfile
,要把這些指令放在dir
指令后面。
redis的CONFIG
指令會(huì)修改本地文件,導(dǎo)致安全風(fēng)險(xiǎn),而在配置文件中加入rename-command CONFIG ""
,可以禁用CONFIG
指令。
sentinel檢測(cè)到master宕機(jī)進(jìn)行故障切換時(shí),會(huì)向slave發(fā)送一個(gè)事務(wù)指令(MULTI
), 包含有SLAVEOF
和CONFIG
兩個(gè)指令,SLAVEOF
指令指示slave更換master,CONFIG
指令將slaveof更新到配置文件里。如果禁用了CONFIG
指令會(huì)導(dǎo)致事務(wù)失敗,相應(yīng)的slave無(wú)法切換master。
redis和sentinel都支持announce-ip
和announce-port
聲明ip和端口,如果對(duì)外提供服務(wù)的IP與對(duì)外訪問(wèn)的出口不一致時(shí)需要指定這個(gè)配置,尤其現(xiàn)在很多云主機(jī)都是只有內(nèi)網(wǎng)IP,通過(guò)slb對(duì)外訪問(wèn)的。
sentinel之間的相互發(fā)現(xiàn)是靠master來(lái)實(shí)現(xiàn)的,sentienl向master的__sentinel__:hello"
的channel廣播自己的IP地址,其他sentinel根據(jù)這個(gè)消息發(fā)現(xiàn)其他的sentinel。如果sentienl的機(jī)器是內(nèi)網(wǎng)的,而sentinel之間需要外網(wǎng)訪問(wèn),就需要在配置文件里,將announce-ip
配置為外網(wǎng)可以訪問(wèn)的IP。而redis之間,地址通過(guò)TCP連接的對(duì)端地址獲取,不存在這個(gè)問(wèn)題。
sentinel通過(guò)讀取配置文件獲取master信息,同時(shí)運(yùn)行中的sentinel也可以通過(guò)指令配置。
在通過(guò)sentinel monitor
可以增加監(jiān)控的集群時(shí),如果集群帶有密碼,通過(guò)sentinel set 集群名 auth-pass password
來(lái)設(shè)置。設(shè)置后需要通過(guò)sentinel reset 集群名
,讓sentinel重新與集群master建立TCP連接才能真正生效。
sentinel會(huì)監(jiān)控集群中節(jié)點(diǎn)的狀態(tài),如果對(duì)redis集群內(nèi)的機(jī)器手動(dòng)執(zhí)行slaveof執(zhí)行,sentinel發(fā)現(xiàn)后會(huì)重新發(fā)送slaveof指令,保證集群的正常運(yùn)行。
如果節(jié)點(diǎn)是slave,先將節(jié)點(diǎn)宕機(jī),然后向所有監(jiān)控這個(gè)集群的sentinel,發(fā)送sentinel reset 集群名
重置集群節(jié)點(diǎn)信息,將節(jié)點(diǎn)從集群徹底移除,保證所有的sentinel都執(zhí)行了這個(gè)指令,否則sentinel會(huì)重新發(fā)送slaveof
指令將節(jié)點(diǎn)加入集群。
如果節(jié)點(diǎn)是master,需要切換master,后照slave的情況進(jìn)行。
移除sentinel節(jié)點(diǎn),與移除slave方法相同。
redis主從復(fù)制支持多層級(jí),如果使用了sentinel,集群的管理可能出現(xiàn)混亂。
如node1有兩個(gè)從節(jié)點(diǎn)node2和node3,node2有一個(gè)從節(jié)點(diǎn)node4。如果node1宕機(jī),sentinel將集群的master切換到了node2,那么node3和node4就變成了同一個(gè)層級(jí)的,這時(shí)sentinel該如果處理?不過(guò)并沒(méi)有實(shí)際進(jìn)行驗(yàn)證,不確定的情況下最好避免這種情形。
sentinel發(fā)現(xiàn)master宕機(jī)時(shí),改為每一秒向所有的slave發(fā)送INFO
指令,以及時(shí)獲取slave狀態(tài)。之后需要選擇一個(gè)slave提升為集群master。
在選擇slave時(shí),將連接正常,且slave-priority
不為0的slave組成一個(gè)數(shù)組,按照節(jié)點(diǎn)的slave-priority
從小到大排序,對(duì)于slave-priority
值相同的節(jié)點(diǎn),依照節(jié)點(diǎn)的slave_repl_offset
值從大到小排序(slave_repl_offset
為主從復(fù)制的偏移,值越大說(shuō)明節(jié)點(diǎn)的數(shù)據(jù)越接近master)。排序完成后,選擇數(shù)組中最前面的節(jié)點(diǎn),提升為集群master。
redis主從復(fù)制并沒(méi)有提供強(qiáng)一致性,所以從slave讀到的數(shù)據(jù)與master可能有延遲。且master故障切換時(shí)數(shù)據(jù)可能會(huì)丟失。
senetinel并不關(guān)注redis主從復(fù)制的狀態(tài)與延遲,選擇sentinel時(shí)也不會(huì)保證將擁有最新數(shù)據(jù)的slave提升為master。
新部署的slave,同master連接后,master生成一個(gè)rdb文件傳輸給slave,slave加載其中的數(shù)據(jù)。在這個(gè)過(guò)程中,slave是可以對(duì)外訪問(wèn)的,導(dǎo)致這個(gè)期間請(qǐng)求獲取的結(jié)果都是不存在的。只有在slave收到rdb文件,加載的過(guò)程中,redis無(wú)法對(duì)外服務(wù)。
感謝各位的閱讀,以上就是“sentinel構(gòu)建高可用redis集群的注意事項(xiàng)有哪些”的內(nèi)容了,經(jīng)過(guò)本文的學(xué)習(xí)后,相信大家對(duì)sentinel構(gòu)建高可用redis集群的注意事項(xiàng)有哪些這一問(wèn)題有了更深刻的體會(huì),具體使用情況還需要大家實(shí)踐驗(yàn)證。這里是創(chuàng)新互聯(lián),小編將為大家推送更多相關(guān)知識(shí)點(diǎn)的文章,歡迎關(guān)注!
網(wǎng)站欄目:sentinel構(gòu)建高可用redis集群的注意事項(xiàng)有哪些
轉(zhuǎn)載來(lái)源:http://jinyejixie.com/article2/ijjooc.html
成都網(wǎng)站建設(shè)公司_創(chuàng)新互聯(lián),為您提供網(wǎng)站內(nèi)鏈、定制開(kāi)發(fā)、App設(shè)計(jì)、網(wǎng)站策劃、企業(yè)建站、定制網(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)