《Redis 備份、容災(zāi)及高可用實戰(zhàn)》要點(diǎn):
本文介紹了Redis 備份、容災(zāi)及高可用實戰(zhàn),希望對您有用。如果有疑問,可以聯(lián)系我們。
郝朝陽,宜搜科技,運(yùn)維工程師,負(fù)責(zé)前端運(yùn)維工作.專注于運(yùn)維自動化的實現(xiàn).致力于DevOps思想的推廣,幫助企業(yè)形成形成自有文化的運(yùn)維體系建設(shè).
Redis是一個高性能的key-value非關(guān)系型數(shù)據(jù)庫,由于其具有高性能的特性,支持高可用、持久化、多種數(shù)據(jù)結(jié)構(gòu)、集群等,使其脫穎而出,成為常用的非關(guān)系型數(shù)據(jù)庫.
此外,Redis的使用場景也比較多.
wp-redis
,這個插件能以最快的速度加載你曾經(jīng)瀏覽過的頁面.此外還有很多其它場景,Redis都表現(xiàn)的不錯.
正是由于Redis具備多種優(yōu)良特新,且應(yīng)用場景非常豐富,以至于Redis在各個公司都有它存在的身影.那么隨之而來的問題和風(fēng)險也就來了.Redis雖然應(yīng)用場景豐富,但部分公司在實踐Redis應(yīng)用的時候還是相對保守使用單節(jié)點(diǎn)部署,那為日后的維護(hù)帶來了安全風(fēng)險.
在2015年的時候,曾處理過一個因為單點(diǎn)故障原因?qū)е碌臉I(yè)務(wù)中斷問題.當(dāng)時的Redis都未采用分布式部署,采用單實例部署,并未考慮容災(zāi)方面的問題.
當(dāng)時我們通過Redis服務(wù)器做用戶購買優(yōu)惠商品的行為控制,但后來由于未知原因Redis節(jié)點(diǎn)的服務(wù)器宕機(jī)了,導(dǎo)致我們無法對用戶購買行為進(jìn)行控制,造成了用戶能夠在一段時間內(nèi)多次購買優(yōu)惠商品的行為.
這種宕機(jī)事故可以說已經(jīng)對公司造成了不可挽回的損失了,安全風(fēng)險問題非常嚴(yán)重,作為當(dāng)時運(yùn)維這個系統(tǒng)的我來說有必要對這個問題進(jìn)行修復(fù)和在架構(gòu)上的改進(jìn).于是我開始了解決非分布式應(yīng)用下Redis單點(diǎn)故障方面的研究學(xué)習(xí).
Redis主從復(fù)制現(xiàn)在應(yīng)該是很普遍了.常用的主從復(fù)制架構(gòu)有如下兩種架構(gòu)方案.
這是最常見的一種架構(gòu),一個Master節(jié)點(diǎn),兩個Slave節(jié)點(diǎn).客戶端寫數(shù)據(jù)的時候是寫Master節(jié)點(diǎn),讀的時候,是讀取兩個Slave,這樣實現(xiàn)讀的擴(kuò)展,減輕了Master節(jié)點(diǎn)讀負(fù)載.
此時需要經(jīng)過如下操作(假設(shè)提升Slave1為Master):
架構(gòu)方案二
當(dāng)master出現(xiàn)故障后,Client可以連接到Slave1上進(jìn)行數(shù)據(jù)操作,但是Slave1就成了一個單點(diǎn),就出現(xiàn)了經(jīng)常要避免的單點(diǎn)故障(single point of failure).
之后需要經(jīng)過如下操作:
可以發(fā)現(xiàn),無論是哪種架構(gòu)方案都需要人工干預(yù)來進(jìn)行故障轉(zhuǎn)移(failover).需要人工干預(yù)就增加了運(yùn)維工作量,同時也對業(yè)務(wù)造成了巨大影響.這時候可以使用Redis的高可用方案-Sentinel
Redis Sentinel為Redis提供了高可用方案.從實踐方面來說,使用Redis Sentinel可以創(chuàng)建一個無需人為干預(yù)就可以預(yù)防某些故障的Redis環(huán)境.
Redis Sentinel設(shè)計為分布式的架構(gòu),運(yùn)行多個Sentinel進(jìn)程來共同合作的.運(yùn)行多個Sentinel進(jìn)程合作,當(dāng)多個Sentinel同一給定的master無法再繼續(xù)提供服務(wù),就會執(zhí)行故障檢測,這會降低誤報的可能性.
Redis Sentinel在Redis高可用方案中主要作用有如下功能:
Sentinel集群對自身和Redis主從復(fù)制進(jìn)行監(jiān)控.當(dāng)發(fā)現(xiàn)Master節(jié)點(diǎn)出現(xiàn)故障時,會經(jīng)過如下步驟:
b)?slave優(yōu)先級
每個slave都有優(yōu)先級,保存在redis.conf配置文件里.如果優(yōu)先級相同,則繼續(xù)進(jìn)行.
c) 復(fù)制偏移位置
復(fù)制偏移紀(jì)錄著從master復(fù)制數(shù)據(jù)復(fù)制到哪里,復(fù)制偏移越大表明從master接受的數(shù)據(jù)越多,如果復(fù)制偏移量也一樣,繼續(xù)進(jìn)行選舉
d)?Run ID
選舉具有最小Run ID的Slave作為新的Master
流程圖如下:
使用sentinel實現(xiàn)了Redis的高可用,當(dāng)master出現(xiàn)故障時,完全無需人工干預(yù)即可實現(xiàn)故障轉(zhuǎn)移.避免了對業(yè)務(wù)的影響,提高了運(yùn)維工作效率.
在部署sentinel的時候,建議使用奇數(shù)個sentinel節(jié)點(diǎn),最少三個sentinel節(jié)點(diǎn).
由于sentinel知識點(diǎn)比較多,這里僅給大家進(jìn)行介紹,讓大家有個了解,想了解更多可與我聯(lián)系.謝謝.
轉(zhuǎn)載請注明本頁網(wǎng)址:
http://www.fzlkiss.com/jiaocheng/1946.html