新聞中心
Redis企業(yè)級(jí)部署:哨兵轉(zhuǎn)移實(shí)踐

創(chuàng)新互聯(lián)公司是一家從事企業(yè)網(wǎng)站建設(shè)、網(wǎng)站設(shè)計(jì)制作、成都網(wǎng)站制作、行業(yè)門戶網(wǎng)站建設(shè)、網(wǎng)頁設(shè)計(jì)制作的專業(yè)網(wǎng)站建設(shè)公司,擁有經(jīng)驗(yàn)豐富的網(wǎng)站建設(shè)工程師和網(wǎng)頁設(shè)計(jì)人員,具備各種規(guī)模與類型網(wǎng)站建設(shè)的實(shí)力,在網(wǎng)站建設(shè)領(lǐng)域樹立了自己獨(dú)特的設(shè)計(jì)風(fēng)格。自公司成立以來曾獨(dú)立設(shè)計(jì)制作的站點(diǎn)千余家。
Redis作為一款高性能的非關(guān)系型數(shù)據(jù)庫,已經(jīng)在企業(yè)級(jí)應(yīng)用中得到廣泛應(yīng)用。但是,在Redis集群中,單節(jié)點(diǎn)故障可能會(huì)導(dǎo)致整個(gè)集群不可用,這是一種不可避免的風(fēng)險(xiǎn)。為了保障Redis的高可用性,我們需要使用哨兵來進(jìn)行故障自動(dòng)轉(zhuǎn)移。
本文將介紹Redis企業(yè)級(jí)部署中哨兵轉(zhuǎn)移的相關(guān)實(shí)踐,包括哨兵節(jié)點(diǎn)的安裝、配置與故障自動(dòng)轉(zhuǎn)移的流程。
一、哨兵節(jié)點(diǎn)的安裝與配置
在Redis集群中,哨兵節(jié)點(diǎn)扮演著監(jiān)控節(jié)點(diǎn)健康狀態(tài)的角色,當(dāng)其中一個(gè)節(jié)點(diǎn)故障時(shí),哨兵會(huì)進(jìn)行自動(dòng)轉(zhuǎn)移操作,選舉一個(gè)新的節(jié)點(diǎn)作為主節(jié)點(diǎn)繼續(xù)提供服務(wù)。
我們需要在Redis集群中為每個(gè)主節(jié)點(diǎn)配置一個(gè)哨兵。哨兵節(jié)點(diǎn)的安裝和配置很簡(jiǎn)單,我們只需要在集群中選擇一臺(tái)服務(wù)器作為哨兵,然后進(jìn)行如下操作:
1. 安裝Redis
在哨兵節(jié)點(diǎn)服務(wù)器上安裝Redis,可以通過官方網(wǎng)站獲取最新版本的Redis源碼包,完成編譯和安裝。
2. 配置Redis
在哨兵服務(wù)器上配置哨兵Redis的配置文件sentinel.conf,配置文件主要包括以下內(nèi)容:
# 哨兵節(jié)點(diǎn)端口號(hào)
port 26379
# 監(jiān)控的主節(jié)點(diǎn)IP地址
sentinel monitor
# 選舉一個(gè)新的主節(jié)點(diǎn)且最少有2個(gè)哨兵支持才能選舉
sentinel down-after-milliseconds
sentinel flover-timeout
二、哨兵自動(dòng)轉(zhuǎn)移的流程
在Redis集群中,當(dāng)主節(jié)點(diǎn)故障,哨兵節(jié)點(diǎn)會(huì)自動(dòng)進(jìn)行主節(jié)點(diǎn)的轉(zhuǎn)移。該轉(zhuǎn)移過程分為三個(gè)階段:斷開連接、選舉Leader和主服務(wù)器選擇。
1. 斷開連接
當(dāng)哨兵檢測(cè)到主節(jié)點(diǎn)故障時(shí),它將主節(jié)點(diǎn)標(biāo)記為‘down’,并嘗試連接到所有剩余的主節(jié)點(diǎn)。如果在連接過程中發(fā)現(xiàn)有主節(jié)點(diǎn)在規(guī)定時(shí)間內(nèi)沒有響應(yīng),則它的狀態(tài)將被標(biāo)記為“SDOWN”。
2. 選舉Leader
當(dāng)主節(jié)點(diǎn)被標(biāo)記為“SDOWN”后,哨兵開始選舉一個(gè)新的leader節(jié)點(diǎn)。它將從監(jiān)視主節(jié)點(diǎn)的所有哨兵節(jié)點(diǎn)中選擇一個(gè)具有最高優(yōu)先級(jí)的哨兵節(jié)點(diǎn)作為leader。如果有多個(gè)哨兵具有相同的最高優(yōu)先級(jí),則按照結(jié)點(diǎn)名稱的字典序選舉,選出的leader哨兵節(jié)點(diǎn)將負(fù)責(zé)進(jìn)行下一步操作。
3. 主服務(wù)器選擇
選舉出新的leader后,leader將與剩余的哨兵節(jié)點(diǎn)一起重新選擇新的主節(jié)點(diǎn)。這項(xiàng)任務(wù)將從具有最高優(yōu)先級(jí)的從節(jié)點(diǎn)中進(jìn)行。如果在此時(shí)沒有可以成為主節(jié)點(diǎn)的從節(jié)點(diǎn),哨兵就會(huì)嘗試將”master”標(biāo)記為“odown”,并發(fā)送新的狀態(tài)轉(zhuǎn)移請(qǐng)求。此時(shí),所有的哨兵都將參與到新的狀態(tài)轉(zhuǎn)移中,以選舉新的主節(jié)點(diǎn)。
三、哨兵轉(zhuǎn)移實(shí)踐
下面給出一個(gè)根據(jù)Redis Sentinel的實(shí)現(xiàn)編寫的腳本,該腳本可以自動(dòng)將Redis主節(jié)點(diǎn)上的數(shù)據(jù)轉(zhuǎn)移到新的Redis主節(jié)點(diǎn),以進(jìn)行故障自動(dòng)轉(zhuǎn)移操作。
#!/usr/bin/env bash
SENTINEL_IP=$1
OLD_MASTER_IP=$2
OLD_MASTER_PORT=$3
NEW_MASTER_IP=$4
NEW_MASTER_PORT=$5
if [ $# -lt 5 ]; then
echo “Usage: $0 “
exit
fi
# 發(fā)送“SLAVE OF NO ONE”命令,停止舊主節(jié)點(diǎn)的從屬關(guān)系
redis-cli -h $OLD_MASTER_IP -p $OLD_MASTER_PORT SLAVEOF NO ONE
# 等待Redis復(fù)制緩沖區(qū)為空
while [ true ]; do
lag=$(redis-cli -h $OLD_MASTER_IP -p $OLD_MASTER_PORT INFO replication | grep “master_repl_offset:” | awk -F’:’ ‘{print $2}’)
if [ “$lag” = “0” ]; then
break
fi
sleep 1
done
# 設(shè)置新的主節(jié)點(diǎn)
redis-cli -h $SENTINEL_IP -p 26379 SENTINEL FLOVER $NEW_MASTER_IP:$NEW_MASTER_PORT
# 等待新的主節(jié)點(diǎn)數(shù)據(jù)同步完成
while [ true ]; do
if $(redis-cli -h $NEW_MASTER_IP -p $NEW_MASTER_PORT PING); then
break
fi
sleep 1
done
echo “SUCCESS: Sentinal flover complete!”
以上腳本將停止舊主節(jié)點(diǎn)的從屬關(guān)系并確保復(fù)制緩沖區(qū)為空,然后將新的主節(jié)點(diǎn)作為新的主節(jié)點(diǎn)并等待新主節(jié)點(diǎn)的數(shù)據(jù)同步完成。
四、總結(jié)
哨兵是Redis企業(yè)級(jí)部署中保障高可用性的重要組件,它能夠在主節(jié)點(diǎn)宕機(jī)后自動(dòng)實(shí)現(xiàn)節(jié)點(diǎn)轉(zhuǎn)移,提升Redis的可用性。本文從哨兵節(jié)點(diǎn)的安裝與配置,到哨兵自動(dòng)轉(zhuǎn)移的流程,最后給出了哨兵節(jié)點(diǎn)的自動(dòng)轉(zhuǎn)移腳本,希望能夠?qū)edis的企業(yè)級(jí)部署提供幫助。
香港服務(wù)器選創(chuàng)新互聯(lián),2H2G首月10元開通。
創(chuàng)新互聯(lián)(www.cdcxhl.com)互聯(lián)網(wǎng)服務(wù)提供商,擁有超過10年的服務(wù)器租用、服務(wù)器托管、云服務(wù)器、虛擬主機(jī)、網(wǎng)站系統(tǒng)開發(fā)經(jīng)驗(yàn)。專業(yè)提供云主機(jī)、虛擬主機(jī)、域名注冊(cè)、VPS主機(jī)、云服務(wù)器、香港云服務(wù)器、免備案服務(wù)器等。
網(wǎng)站標(biāo)題:Redis企業(yè)級(jí)部署哨兵轉(zhuǎn)移實(shí)踐(redis轉(zhuǎn)移哨兵)
標(biāo)題網(wǎng)址:http://fisionsoft.com.cn/article/dhdsjpg.html


咨詢
建站咨詢
