今天我們介紹redis的哨兵集群的搭建過(guò)程降瞳。
之前的文章中我們介紹了redis 的主從搭建的方式椰于,但是主從集群的方式有個(gè)弊端勤婚,就是在主數(shù)據(jù)庫(kù)宕機(jī)之后呛伴,整個(gè)集群沒(méi)法再對(duì)外提供服務(wù)。所以redis在3.0版本之前提供了一種哨兵的解決方案季春。
所謂的哨兵模式洗搂,簡(jiǎn)單來(lái)說(shuō)是在之前主從集群的基礎(chǔ)上多增加一個(gè)哨兵節(jié)點(diǎn)去監(jiān)控主數(shù)據(jù)庫(kù)的狀態(tài),一旦主數(shù)據(jù)庫(kù)無(wú)法對(duì)外提供服務(wù)载弄,則會(huì)將其中一臺(tái)從數(shù)據(jù)庫(kù)升級(jí)為主數(shù)據(jù)庫(kù)繼續(xù)對(duì)外提供服務(wù)耘拇。
準(zhǔn)備工作:三臺(tái)虛擬機(jī)(192.168.204.201,192.168.204.202宇攻,192.168.204.203)惫叛,并在這三臺(tái)機(jī)器上搭建好redis的主從集群。
作為哨兵的服務(wù)可以安裝在搭建主從集群的機(jī)器上逞刷,也可以不在嘉涌,哨兵服務(wù)也可以是集群,也可以是單臺(tái)夸浅,本示例中我們只是演示仑最,因此只部署一臺(tái)哨兵服務(wù)。
1.在202機(jī)器(從)上講哨兵的配置文件復(fù)制到redis的etc目錄下:
cp /usr/redis-2.8.3/sentinel.conf /usr/redis/etc/
2.將哨兵程序復(fù)制到redis的bin目錄下:
cp /usr/redis-2.8.3/src/redis-sentinel /usr/redis/bin/
3.進(jìn)入redis下的etc目錄帆喇,并修改哨兵的配置文件sentinel.conf
cd /usr/redis/etc
vi sentinel.conf
4.修改如下配置
-- 當(dāng)前Sentinel服務(wù)運(yùn)行的端口
port 26379
-- 哨兵監(jiān)聽(tīng)的主服務(wù)器
sentinel monitor mymaster 192.168.204.201 6379 1
-- 3s內(nèi)mymaster無(wú)響應(yīng)警医,則認(rèn)為mymaster宕機(jī)了
sentinel down-after-milliseconds mymaster 3000
-- 如果10秒后,mysater仍沒(méi)啟動(dòng)過(guò)來(lái),則啟動(dòng)failover
sentinel failover-timeout mymaster 10000
-- 執(zhí)行故障轉(zhuǎn)移時(shí)番枚, 最多有1個(gè)從服務(wù)器同時(shí)對(duì)新的主服務(wù)器進(jìn)行同步
sentinel parallel-syncs mymaster 1
5.此時(shí)我們分別啟動(dòng)三臺(tái)機(jī)器上的redis服務(wù)
./redis-server /usr/redis/etc/redis.conf
6.啟動(dòng)哨兵程序
./redis-sentinel /usr/redis/etc/sentinel.conf
如上圖我們可以看到哨兵程序會(huì)對(duì)201機(jī)器進(jìn)行一個(gè)監(jiān)聽(tīng)
7.此時(shí)我們kill掉201機(jī)器上的redis進(jìn)程
8.此時(shí)我們分別查看202和203機(jī)器上redis的信息
至此法严,我們已經(jīng)將redis的哨兵集群搭建完成损敷。
哨兵集群的優(yōu)點(diǎn):同時(shí)監(jiān)控葫笼,提醒,自動(dòng)故障轉(zhuǎn)移拗馒。
監(jiān)控(Monitoring):Sentinel會(huì)不斷地檢查你的主服務(wù)器和從服務(wù)器是否允許正常路星。
提醒(Notification):當(dāng)被監(jiān)控的某個(gè)Redis服務(wù)器出現(xiàn)問(wèn)題時(shí),Sentinel可以通過(guò)API向管理員或者其他應(yīng)用程序發(fā)送通知诱桂。
自動(dòng)故障遷移(Automatic failover):
a.當(dāng)一個(gè)主服務(wù)器不能正常工作時(shí)洋丐,Sentinel會(huì)開(kāi)始一次自動(dòng)故障遷移操作,他會(huì)將失效主服務(wù)器的其中一個(gè)從服務(wù)器升級(jí)為新的主服務(wù)器挥等,并讓失效主服務(wù)器的其他從服務(wù)器改為復(fù)制新的主服務(wù)器友绝;
b.客戶端試圖連接失敗的主服務(wù)器時(shí),集群也會(huì)向客服端返回新主服務(wù)器的地址肝劲,使集群可以使用新主服務(wù)器代替失效服務(wù)器迁客。
但是redis的哨兵程序盡量不要和redis實(shí)例部署在一起郭宝,以免機(jī)器宕機(jī)對(duì)哨兵也產(chǎn)生影響,并且哨兵程序最好也是集群部署(至少三臺(tái))掷漱,避免其存在單點(diǎn)問(wèn)題而影響整個(gè)集群的健壯性粘室。