Redis高可用的三種方式:主從泳挥,哨兵然痊,集群

個(gè)人記錄,謹(jǐn)慎參考屉符,歡迎指正剧浸,謝謝


針對(duì)redis的使用過程中,不斷地遇到問題矗钟,redis也在不斷發(fā)展
目前接觸到的主要策略有:主從備份唆香、哨兵機(jī)制搭建集群吨艇。

一躬它、 配置多個(gè)redis服務(wù)

Redis安裝后,默認(rèn)安裝到/usr/local/bin目錄下东涡,端口默認(rèn)6379
安裝多個(gè)redis服務(wù)最簡單粗暴的就是復(fù)制這個(gè)bin冯吓。

步驟:

  1. 找一個(gè)自己喜歡的路徑(理論上憑喜好倘待,注意避開具有特殊功能的目錄),新建一個(gè)redis文件夾 mkdir redis
  2. 為了方便管理组贺,可以另外新建若干個(gè)文件夾延柠,以端口號(hào)命名,用來區(qū)分不同的redis锣披,
  3. 例如mkdir 6380
  4. 將bin復(fù)制進(jìn)去 cp /usr/local/bin/* redis/6380,
  5. 修改端口號(hào):vi redis.conf 替換:%s/6379/6380/g
  6. 保存退出

配置集體啟動(dòng)/關(guān)閉

當(dāng)服務(wù)多了起來后贞间,包括后期搭建集群,為了方便統(tǒng)一開關(guān)服務(wù)雹仿,我們可以配置集群啟動(dòng):

  1. 在保存不同端口服務(wù)的redis目錄下增热,新建一個(gè)文件 vi startRedis.sh
  2. 將所有redis開啟步驟編寫進(jìn)去:
    開啟

    關(guān)閉
  3. 關(guān)閉同上,注意端口
  4. 保存并退出文檔胧辽,文件名沒有加粗 峻仇,此時(shí)還只是個(gè)文件,并不能起到服務(wù)的作用
  5. 提高開啟和關(guān)閉的權(quán)限邑商,使它成為服務(wù) chmod +x start.sh(文件全名)
  6. 成為服務(wù)后摄咆,文件名就成粗體 ,就可以通過 ./start.sh 統(tǒng)一開啟服務(wù)了人断,如圖:
    打印日志
  7. 使用命令查看是否開啟成功 ps aux|grep redis
    三個(gè)服務(wù)都已經(jīng)啟動(dòng)

二吭从、 主從備份

Redis的持久化保證了即使redis服務(wù)重啟也會(huì)丟失數(shù)據(jù) ,因?yàn)閞edis服務(wù)重啟后會(huì)將硬盤上持久化的數(shù)據(jù)恢復(fù)到內(nèi)存中恶迈,但當(dāng)redis服務(wù)器的硬盤損壞了可能會(huì)導(dǎo)致數(shù)據(jù)丟失 涩金,如果通過redis的主從復(fù)制機(jī)制可以避免這種單點(diǎn)故障。
相較于普通的單節(jié)點(diǎn)使用暇仲,主從配置最大的特點(diǎn)就是主從實(shí)例間數(shù)據(jù)實(shí)時(shí)同步步做,并且提供數(shù)據(jù)持久化和備份策略。

1. 配置

進(jìn)入要作為從節(jié)點(diǎn)redis的bin目錄奈附,打開redis.conf文件全度,
找到#slaveof <masterip> <masterport> 修改為slaveof 主節(jié)點(diǎn)IP 主節(jié)點(diǎn)端口
配置完畢后重啟所有redis服務(wù)斥滤,查詢節(jié)點(diǎn)狀態(tài)后如圖:

查詢節(jié)點(diǎn)狀態(tài)

2. 測試

進(jìn)入節(jié)點(diǎn)将鸵,存入字段

存入字段,顯示存入成功接下來打開rdm中跌,查看從節(jié)點(diǎn)是否成功備份
6379庫存入成功

6380庫存入成功

6381庫存入成功

主從配置成功

3. 優(yōu)點(diǎn)

  1. 高可靠性咨堤,開啟數(shù)據(jù)持久化功能和配置合理的備份策略,能有效的解決數(shù)據(jù)誤操作和數(shù)據(jù)異常丟失的問題漩符。
  2. 讀寫分離策略一喘,從節(jié)點(diǎn)可以擴(kuò)展主庫節(jié)點(diǎn)的讀能力,有效應(yīng)對(duì)大并發(fā)量的讀操作。

4. 缺點(diǎn)

故障恢復(fù)復(fù)雜凸克,當(dāng)主庫節(jié)點(diǎn)出現(xiàn)故障時(shí)议蟆,需要手動(dòng)將一個(gè)從節(jié)點(diǎn)晉升為主節(jié)點(diǎn),同時(shí)需要通知業(yè)務(wù)方變更配置萎战,并且需要讓其他從庫節(jié)點(diǎn)去復(fù)制新主庫節(jié)點(diǎn)咐容,整個(gè)過程需要人為干預(yù),比較繁瑣蚂维。

三戳粒、 哨兵機(jī)制

由若干Sentinel 節(jié)點(diǎn)組成的分布式集群,可以實(shí)現(xiàn)故障發(fā)現(xiàn)虫啥,故障自動(dòng)轉(zhuǎn)移蔚约,配置中心和客戶端通知。Redis Sentinel 的節(jié)點(diǎn)數(shù)量要滿足2n + 1(n>=1)的奇數(shù)個(gè)涂籽。
redis的哨兵機(jī)制是從redis2.8開始支持苹祟。

redis的sentinel系統(tǒng)用于管理多個(gè)redis服務(wù)器,該系統(tǒng)主要執(zhí)行三個(gè)任務(wù):監(jiān)控评雌、提醒树枫、自動(dòng)故障轉(zhuǎn)移。
1景东、監(jiān)控(Monitoring):Redis Sentinel實(shí)時(shí)監(jiān)控主服務(wù)器和從服務(wù)器運(yùn)行狀態(tài)砂轻,并且實(shí)現(xiàn)自動(dòng)切換。
2耐薯、提醒(Notification):當(dāng)被監(jiān)控的某個(gè)Redis服務(wù)器出現(xiàn)問題時(shí)舔清,Redis Sentinel可以向系統(tǒng)管理員發(fā)送通知丝里,也可以通過API向其他程序發(fā)送通知曲初。
3、自動(dòng)故障轉(zhuǎn)移(Automatic failover):當(dāng)一個(gè)主服務(wù)器不能正常工作時(shí)杯聚,Redis Sentinel可以將一個(gè)從服務(wù)器升級(jí)為主服務(wù)器臼婆,并對(duì)其他從服務(wù)器進(jìn)行配置,讓它們使用新的主服務(wù)器幌绍。當(dāng)應(yīng)用程序連接Redis服務(wù)器時(shí)颁褂,Redis Sentinel會(huì)告之新的主服務(wù)器地址和端口。

1. 配置

哨兵模式需要配置的僅僅是哨兵系統(tǒng)

  1. 在主從備份服務(wù)文件夾(redis)的目錄下新建一個(gè)目錄 mkdir redis-sentinel (方便管理)

  2. 將redis(主從服務(wù))三個(gè)服務(wù)分別復(fù)制過來
    例如:cp –rf redis/6379 redis-sentinel/26379

  3. 進(jìn)入redis-sentinel目錄刪除每一個(gè)的redis.conf rm -rf 26379/redis.conf

  4. 從redis-4.0.11目錄中把sentinel.conf文件復(fù)制到每一個(gè)哨兵服務(wù)

  5. 修改每一個(gè)sentinel.conf:
    a)# protected-mode no取消注釋傀广,改為 protected-mode no
    b) sentinel monitor mymaster 192.168.11.128 6379 2其中地址改為主redis節(jié)點(diǎn)地址颁独,2表示的是當(dāng)兩個(gè)或兩個(gè)以上的哨兵認(rèn)為主節(jié)點(diǎn)掛掉,進(jìn)行failover操作
    c) 加入daemonize yes 用來后臺(tái)啟動(dòng)哨兵服務(wù)伪冰,避免服務(wù)阻塞

  6. 啟動(dòng)哨兵服務(wù)(單個(gè)) 進(jìn)入26379目錄誓酒,執(zhí)行命令 ./redis-sentinel sentinel.conf
    這里我們也可以把哨兵服務(wù)的啟動(dòng)集合到一個(gè)文件里面注冊(cè)成服務(wù),同多個(gè)redis服務(wù)

2. 啟動(dòng)測試

服務(wù)啟動(dòng)成功

3. 模擬錯(cuò)誤

通過命令殺掉主節(jié)點(diǎn)進(jìn)程

主進(jìn)程6379被殺死

隨便進(jìn)入一個(gè)從節(jié)點(diǎn),查看信息
6380節(jié)點(diǎn)信息

此時(shí)靠柑,6380身份還是從節(jié)點(diǎn)寨辩,但是主節(jié)點(diǎn)變成了6381,哨兵機(jī)制配置成功

4. 優(yōu)點(diǎn)

  • 部署簡單

  • 能夠解決 Redis 主從模式下的高可用切換問題

  • 可以實(shí)現(xiàn)一套 Sentinel 監(jiān)控一組 Redis 數(shù)據(jù)節(jié)點(diǎn)或多組數(shù)據(jù)節(jié)點(diǎn)

5. 缺點(diǎn)

  • 部署相對(duì) Redis 主從模式要復(fù)雜一些歼冰,原理理解更繁瑣

  • 資源浪費(fèi)靡狞,Redis 數(shù)據(jù)節(jié)點(diǎn)中 slave 節(jié)點(diǎn)作為備份節(jié)點(diǎn)不提供服務(wù)

  • 不能解決讀寫分離問題,實(shí)現(xiàn)起來相對(duì)復(fù)雜

  • Redis Sentinel 主要是針對(duì) Redis 數(shù)據(jù)節(jié)點(diǎn)中的主節(jié)點(diǎn)的高可用切換隔嫡,對(duì) Redis 的數(shù)據(jù)節(jié)點(diǎn)做失敗判定分為主觀下線和客觀下線兩種甸怕,對(duì)于 Redis 的從節(jié)點(diǎn)有對(duì)節(jié)點(diǎn)做主觀下線操作,并不執(zhí)行故障轉(zhuǎn)移腮恩。

四蕾各、 集群模式 redis-cluster

Redis Cluster 是社區(qū)版推出的 Redis 分布式集群解決方案,主要解決 Redis 分布式方面的需求庆揪,比如,當(dāng)遇到單機(jī)內(nèi)存缸榛,并發(fā)和流量等瓶頸的時(shí)候,Redis Cluster 能起到很好的負(fù)載均衡的目的钧排。
Redis集群節(jié)點(diǎn)最小配置 6 個(gè)節(jié)點(diǎn)以上(3 主 3 從),其中主節(jié)點(diǎn)提供讀寫操作均澳,從節(jié)點(diǎn)作為備用節(jié)點(diǎn)恨溜,不提供請(qǐng)求找前,只作為故障轉(zhuǎn)移使用。

1. 搭建集群前的準(zhǔn)備

  1. 在local目錄下創(chuàng)建文件夾 redis-cluster

  2. 把端口為6379的bin實(shí)例拷貝到redis-cluster文件夾下躺盛,并改名(隨意)1-7001

  3. 切換到redis-cluster/1-7001目錄下项戴,刪除dump.rdb,一個(gè)干凈的redis是沒有它的

  4. 修改端口號(hào)槽惫,vi redis.conf 快捷方式 :%s/6379/7001/g

  5. 搭建集群需要開啟集群設(shè)置 把cluster-enabled yes 的注釋打開

  6. 打開 bind 127.0.0.1的注釋并修改為虛擬機(jī)ip

  7. 退出目錄到redis-cluster目錄下界斜,拷貝5次這個(gè)實(shí)例并命名,可以配置集群啟動(dòng)

  8. 修改每一個(gè)實(shí)例的端口 快捷方式 :%s/6379/7001/g

  9. 啟動(dòng)redis各薇,查看進(jìn)程如下圖

    啟動(dòng)成功

    現(xiàn)在的集群只是空有其表,還需要將他們連接起來

2. 搭建集群所需環(huán)境

安裝ruby

ruby是一種面向?qū)ο蟪绦蛟O(shè)計(jì)的腳本語言敬扛,redis-cluster的搭建需要使用到官方提供的ruby腳本,所以搭建前需要安裝ruby環(huán)境

執(zhí)行命令

      `yum –y install ruby`
      `yum –y install rubygems`

安裝ruby腳本---redis-4.1.1.gem 并將其上傳到Linux谍珊。
注意:這里的版本要求不低于redis版本急侥。Redis5.0以后就不再需要ruby。
安裝redis-4.1.1.gem贝润,執(zhí)行命令 gem install redis-4.1.1.gem

這時(shí)候铝宵,可能就會(huì)報(bào)錯(cuò)了
如果有,請(qǐng)?zhí)?--> 解決辦法

3. 正式操作集群配置

  1. 進(jìn)入redis-4.0.11解壓目錄下尊蚁,打開src文件夾侣夷,有一個(gè)redis-trib.rb 是個(gè)粗體腳本文件,后綴是.rb就是ruby的縮寫

  2. 拷貝redis-trib.rb到集群目錄下

  3. 運(yùn)行腳本

     ./redis-trib.rb create --replicas 1 192.168.5.230:7001 192.168.5.230:7002 192.168.5.230:7003 192.168.5.230:7004 192.168.5.230:7005 192.168.5.230:7006
     'replicas 1' 表示每個(gè)redis服務(wù)只有1臺(tái)備份機(jī)
    

運(yùn)行結(jié)果

第三步注意參數(shù),如果多寫衙传、少寫或者寫錯(cuò)ip和端口,那么集群基本需要重新搭建

  1. 連接集群

集群的特點(diǎn)就是每一個(gè)節(jié)點(diǎn)都可以作為入口古瓤,備份節(jié)點(diǎn)也可以作為主機(jī)腺阳。Redis提供了客戶端穿香,那么連接集群命令參照 ./1-7001/redis-cli –h “192.168.5.230” –p 7001 -c

如圖

至此皮获,集群搭建并連接成功。

4. 模擬錯(cuò)誤

  1. 進(jìn)入集群购公,查看數(shù)據(jù)存儲(chǔ)的節(jié)點(diǎn),強(qiáng)制殺死該節(jié)點(diǎn)


    模擬錯(cuò)誤
  2. 再次進(jìn)入集群知残,嘗試查詢數(shù)據(jù)
    再次查詢

    查詢結(jié)果成功比庄,發(fā)現(xiàn)數(shù)據(jù)的存儲(chǔ)分布被動(dòng)態(tài)調(diào)整佳窑。

5. 優(yōu)點(diǎn)

  • 無中心架構(gòu)。

  • 數(shù)據(jù)按照 slot 存儲(chǔ)分布在多個(gè)節(jié)點(diǎn)神凑,節(jié)點(diǎn)間數(shù)據(jù)共享,可動(dòng)態(tài)調(diào)整數(shù)據(jù)分布强挫。

  • 可擴(kuò)展性:可線性擴(kuò)展到 1000 多個(gè)節(jié)點(diǎn)薛躬,節(jié)點(diǎn)可動(dòng)態(tài)添加或刪除型宝。

  • 高可用性:部分節(jié)點(diǎn)不可用時(shí),能夠?qū)崿F(xiàn)故障自動(dòng) failover趴酣,集群仍可用岖寞。

6. 缺點(diǎn)

  • 實(shí)現(xiàn)復(fù)雜。

  • 節(jié)點(diǎn)會(huì)因?yàn)槟承┰虬l(fā)生阻塞(阻塞時(shí)間大于 clutser-node-timeout)仗谆,被判斷下線,這種 failover 是沒有必要的藻雪。

  • 數(shù)據(jù)通過異步復(fù)制狸吞,不保證數(shù)據(jù)的強(qiáng)一致性指煎。

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
  • 序言:七十年代末至壤,一起剝皮案震驚了整個(gè)濱河市枢纠,隨后出現(xiàn)的幾起案子,更是在濱河造成了極大的恐慌宅广,老刑警劉巖些举,帶你破解...
    沈念sama閱讀 217,509評(píng)論 6 504
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件,死亡現(xiàn)場離奇詭異驶臊,居然都是意外死亡叼丑,警方通過查閱死者的電腦和手機(jī),發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 92,806評(píng)論 3 394
  • 文/潘曉璐 我一進(jìn)店門纵寝,熙熙樓的掌柜王于貴愁眉苦臉地迎上來星立,“玉大人,你說我怎么就攤上這事室奏【⒆埃” “怎么了?”我有些...
    開封第一講書人閱讀 163,875評(píng)論 0 354
  • 文/不壞的土叔 我叫張陵绒怨,是天一觀的道長纺酸。 經(jīng)常有香客問我,道長碎紊,這世上最難降的妖魔是什么樊诺? 我笑而不...
    開封第一講書人閱讀 58,441評(píng)論 1 293
  • 正文 為了忘掉前任词爬,我火速辦了婚禮,結(jié)果婚禮上顿膨,老公的妹妹穿的比我還像新娘。我一直安慰自己必搞,他們只是感情好囊咏,可當(dāng)我...
    茶點(diǎn)故事閱讀 67,488評(píng)論 6 392
  • 文/花漫 我一把揭開白布梅割。 她就那樣靜靜地躺著,像睡著了一般户辞。 火紅的嫁衣襯著肌膚如雪底燎。 梳的紋絲不亂的頭發(fā)上,一...
    開封第一講書人閱讀 51,365評(píng)論 1 302
  • 那天喇澡,我揣著相機(jī)與錄音殊校,去河邊找鬼。 笑死为流,一個(gè)胖子當(dāng)著我的面吹牛,可吹牛的內(nèi)容都是我干的秀睛。 我是一名探鬼主播莲祸,決...
    沈念sama閱讀 40,190評(píng)論 3 418
  • 文/蒼蘭香墨 我猛地睜開眼,長吁一口氣:“原來是場噩夢啊……” “哼田盈!你這毒婦竟也來了?” 一聲冷哼從身側(cè)響起简软,我...
    開封第一講書人閱讀 39,062評(píng)論 0 276
  • 序言:老撾萬榮一對(duì)情侶失蹤痹升,失蹤者是張志新(化名)和其女友劉穎畦韭,沒想到半個(gè)月后,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體廊驼,經(jīng)...
    沈念sama閱讀 45,500評(píng)論 1 314
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡妒挎,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 37,706評(píng)論 3 335
  • 正文 我和宋清朗相戀三年,在試婚紗的時(shí)候發(fā)現(xiàn)自己被綠了鳞芙。 大學(xué)時(shí)的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片期虾。...
    茶點(diǎn)故事閱讀 39,834評(píng)論 1 347
  • 序言:一個(gè)原本活蹦亂跳的男人離奇死亡镶苞,死狀恐怖,靈堂內(nèi)的尸體忽然破棺而出茂蚓,到底是詐尸還是另有隱情,我是刑警寧澤晾浴,帶...
    沈念sama閱讀 35,559評(píng)論 5 345
  • 正文 年R本政府宣布牍白,位于F島的核電站,受9級(jí)特大地震影響狸涌,放射性物質(zhì)發(fā)生泄漏。R本人自食惡果不足惜数尿,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 41,167評(píng)論 3 328
  • 文/蒙蒙 一惶楼、第九天 我趴在偏房一處隱蔽的房頂上張望诊杆。 院中可真熱鬧,春花似錦豹储、人聲如沸淘这。這莊子的主人今日做“春日...
    開封第一講書人閱讀 31,779評(píng)論 0 22
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽曙聂。三九已至,卻和暖如春断国,著一層夾襖步出監(jiān)牢的瞬間榆苞,已是汗流浹背。 一陣腳步聲響...
    開封第一講書人閱讀 32,912評(píng)論 1 269
  • 我被黑心中介騙來泰國打工薄疚, 沒想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留仙畦,地道東北人。 一個(gè)月前我還...
    沈念sama閱讀 47,958評(píng)論 2 370
  • 正文 我出身青樓莱坎,卻偏偏與公主長得像寸士,于是被迫代替她去往敵國和親碴卧。 傳聞我的和親對(duì)象是個(gè)殘疾皇子乃正,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 44,779評(píng)論 2 354