濮阳杆衣贸易有限公司

主頁 > 知識(shí)庫 > redis客戶端實(shí)現(xiàn)高可用讀寫分離的方式詳解

redis客戶端實(shí)現(xiàn)高可用讀寫分離的方式詳解

熱門標(biāo)簽:魔獸2青云地圖標(biāo)注 宿遷便宜外呼系統(tǒng)平臺(tái) 貴州電銷卡外呼系統(tǒng) 北京400電話辦理收費(fèi)標(biāo)準(zhǔn) 十堰營銷電銷機(jī)器人哪家便宜 山東外呼銷售系統(tǒng)招商 超呼電話機(jī)器人 日本中國地圖標(biāo)注 鄭州人工智能電銷機(jī)器人系統(tǒng)

背景

(1) redis單機(jī)的讀寫性能輕松上大幾萬,不過線上環(huán)境不會(huì)只部署光禿禿的一個(gè)節(jié)點(diǎn),還是會(huì)配合 sentinel 再部署一個(gè) slave作為高可用節(jié)點(diǎn)的;
但是standby的slave節(jié)點(diǎn)是不對(duì)外提供服務(wù)端的,一定程度上造成了浪費(fèi)資源

(2) 當(dāng)業(yè)務(wù)不斷發(fā)展,原來單節(jié)點(diǎn)緩存的數(shù)據(jù)(如,商品信息緩存、配置信息等)的查詢qps不斷升高(寫qps增長不多),突破十幾萬、幾十萬的的時(shí)候,此時(shí)一個(gè)節(jié)點(diǎn)就扛不住了,我們就需要增加幾個(gè)redis slaves節(jié)點(diǎn)來分擔(dān)這些查詢的壓力 也就是讀寫分離

但是,常用的 redis 客戶端jedis并不支持讀寫分離能力

實(shí)現(xiàn)方式

(1) 從配置中心獲取 master 和 slaves 的連接信息,分別初始化好一個(gè)連接master的寫連接池和一組slave的讀連接池
(2) 將命令進(jìn)行分類:執(zhí)行寫命令則從 master的連接池取連接然后執(zhí)行,如果是讀命令則從slave的連接池中取出連接執(zhí)行
可能有多個(gè)slave節(jié)點(diǎn),可以按照一定的策略進(jìn)行負(fù)載均衡(權(quán)重、隨機(jī)、輪詢...etc) 從其中一個(gè) slave節(jié)點(diǎn)的連接池獲取連接

大概長這樣:

高可用版本

前面的實(shí)現(xiàn)方式正常情況下是可以的

但是:
(1) 如果運(yùn)行期間 master掛了怎么辦? 如何自動(dòng) failover 切換?
(2) 如果流量突增,需要?jiǎng)討B(tài)擴(kuò)容一個(gè)或多個(gè) slave節(jié)點(diǎn),如何動(dòng)態(tài)生效?

那就不能從配置文件取master和slaves的 ip+port 了,得從redis ha的組件去動(dòng)態(tài)獲取 當(dāng)前master 和可用slave列表的節(jié)點(diǎn)信息 => sentinel

1.初始化

向 sentinel 發(fā)送命令獲取master和slaves的節(jié)點(diǎn)信息

//獲取當(dāng)前masterName標(biāo)識(shí)的當(dāng)前master節(jié)點(diǎn)信息,哨兵可監(jiān)控多個(gè) mater ha,所以要用masterName>區(qū)分
SENTINEL get-master-addr-by-name masterName>
//獲取可用的slaves列表信息
SENTINEL slaves masterName>

拿到連接后,繼續(xù)用開頭的方式去創(chuàng)建連接池就行了

2. 動(dòng)態(tài)failover、擴(kuò)容

初始化完畢后,在運(yùn)行期間master節(jié)點(diǎn),和slaves還是可能變化的, 如
(1) master故障、網(wǎng)絡(luò)分區(qū),sentinel 提升一個(gè)slave為新的master
(2) 新增slave節(jié)點(diǎn)應(yīng)對(duì)突增流量

我們?nèi)绾文懿恢貑⒖蛻舳说那闆r下,動(dòng)態(tài)切換?

sentinel 在進(jìn)行master切換、slave變更等操作的時(shí)候都會(huì)向?qū)?yīng)的 channel 發(fā)布事件,我們可以基于這些事件感知到相應(yīng)的變化
參考: https://redis.io/topics/sentinel

2.1 failover切換 master

當(dāng) sentinel 進(jìn)行master failover切換的時(shí)候,它會(huì)向channel: switch-master 發(fā)送通知,我們?cè)诳蛻舳擞嗛嗊@個(gè)channel,收到事件后,重新進(jìn)行初始化的步驟即可

2.2 擴(kuò)容slave

當(dāng)新的 slave 節(jié)點(diǎn)加入, sentinel 感知到則會(huì)向channel: +slave 發(fā)布事件,我們監(jiān)聽到后,重新獲取slaves節(jié)點(diǎn)信息重建slaves的連接池就可以了(這邊不涉及master的變化)

總結(jié)

基于 sentienl 獲取和動(dòng)態(tài)感知 master、slaves節(jié)點(diǎn)信息的變化,我們的讀寫分離客戶端就能具備高可用+動(dòng)態(tài)擴(kuò)容感知能力了;

到此這篇關(guān)于redis客戶端實(shí)現(xiàn)高可用讀寫分離的文章就介紹到這了,更多相關(guān)redis讀寫分離內(nèi)容請(qǐng)搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!

您可能感興趣的文章:
  • Redis如何實(shí)現(xiàn)數(shù)據(jù)庫讀寫分離詳解
  • Redis主從實(shí)現(xiàn)讀寫分離
  • Redis讀寫分離搭建的完整步驟

標(biāo)簽:大慶 北京 江蘇 楊凌 朝陽 臺(tái)州 果洛 吉安

巨人網(wǎng)絡(luò)通訊聲明:本文標(biāo)題《redis客戶端實(shí)現(xiàn)高可用讀寫分離的方式詳解》,本文關(guān)鍵詞  redis,客戶端,實(shí)現(xiàn),高可用,;如發(fā)現(xiàn)本文內(nèi)容存在版權(quán)問題,煩請(qǐng)?zhí)峁┫嚓P(guān)信息告之我們,我們將及時(shí)溝通與處理。本站內(nèi)容系統(tǒng)采集于網(wǎng)絡(luò),涉及言論、版權(quán)與本站無關(guān)。
  • 相關(guān)文章
  • 下面列出與本文章《redis客戶端實(shí)現(xiàn)高可用讀寫分離的方式詳解》相關(guān)的同類信息!
  • 本頁收集關(guān)于redis客戶端實(shí)現(xiàn)高可用讀寫分離的方式詳解的相關(guān)信息資訊供網(wǎng)民參考!
  • 推薦文章
    临汾市| 牙克石市| 日喀则市| 正镶白旗| 舒兰市| 三门县| 乐昌市| 庆元县| 舒城县| 汾西县| 双牌县| 新密市| 保亭| 襄樊市| 舒城县| 古浪县| 手游| 贞丰县| 阜宁县| 青海省| 海安县| 成都市| 朝阳区| 大名县| 山阴县| 建湖县| 孙吴县| 邵东县| 界首市| 奈曼旗| 扎兰屯市| 额敏县| 民乐县| 赫章县| 资溪县| 嘉荫县| 贵德县| 尤溪县| 甘孜县| 五原县| 福鼎市|