淺談Redis哨兵模式高可用解決方案
一、序言
Redis高可用有兩種模式:哨兵模式
和集群模式
,本文基于哨兵模式搭建一主兩從三哨兵
Redis高可用服務(wù)。
1、目標(biāo)與收獲
一主兩從三哨兵
Redis服務(wù),基本能夠滿足中小型項(xiàng)目的高可用要求,使用Supervisor監(jiān)控并管理Redis實(shí)例。通過(guò)本文將完成如下目標(biāo):
- 哨兵模式服務(wù)規(guī)劃與搭建
哨兵模式服務(wù)相比于單機(jī)版服務(wù)更加可靠,適合讀寫(xiě)分離、數(shù)據(jù)量不是很大、要求可靠穩(wěn)定性的場(chǎng)景。
- 客戶端整合與讀寫(xiě)分離
通過(guò)Spring框架對(duì)哨兵模式進(jìn)行連接,完成生產(chǎn)環(huán)境的常見(jiàn)操作。
2、端口規(guī)劃
端口規(guī)劃是完成本方案的第一步。
二、單機(jī)模擬
單機(jī)模擬是指在單臺(tái)物理機(jī)或者虛擬機(jī)上模擬操作,最大化還原本方案中間過(guò)程,適用于學(xué)習(xí)或者開(kāi)發(fā)階段使用。
為了簡(jiǎn)化操作,Redis服務(wù)做如下約定:數(shù)據(jù)不持久化到磁盤(pán);服務(wù)實(shí)例以前臺(tái)進(jìn)程方式運(yùn)行;節(jié)點(diǎn)的配置文件以默認(rèn)配置文件為模版;無(wú)密碼驗(yàn)證。
(一)服務(wù)規(guī)劃
1、Redis實(shí)例
服務(wù)在第一次啟動(dòng)時(shí)明確知道第幾個(gè)節(jié)點(diǎn)是master節(jié)點(diǎn),當(dāng)服務(wù)在長(zhǎng)期運(yùn)行并發(fā)生主從切換時(shí),無(wú)法顯示知道第幾個(gè)節(jié)點(diǎn)是master節(jié)點(diǎn),需要通過(guò)命令行間接查詢。
節(jié)點(diǎn) | 主機(jī) | 端口 | 角色 | 額外配置 |
---|---|---|---|---|
node01 | 127.0.0.1 | 6380 | 第一次啟動(dòng)時(shí)作為master服務(wù) | |
node02 | 127.0.0.1 | 6381 | 第一次啟動(dòng)時(shí)作為slave服務(wù) | replicaof 127.0.0.1 6380 |
node03 | 127.0.0.1 | 6382 | 第一次啟動(dòng)時(shí)作為slave服務(wù) | replicaof 127.0.0.1 6380 |
額外配置指第一次啟動(dòng)Redis服務(wù)實(shí)例時(shí),節(jié)點(diǎn)配置文件中新增配置。
2、哨兵服務(wù)
哨兵服務(wù)節(jié)點(diǎn)之間沒(méi)有主從的區(qū)別,所有節(jié)點(diǎn)處于平等地位。當(dāng)主服務(wù)異常時(shí),哨兵服務(wù)之間會(huì)喚醒投票策略,從Redis實(shí)例從節(jié)點(diǎn)選擇主服務(wù)的候選人。
節(jié)點(diǎn) | 主機(jī) | 端口 | 額外配置 |
---|---|---|---|
node01 | 127.0.0.1 | 26380 | sentinel monitor mymaster 127.0.0.1 6380 2 |
node02 | 127.0.0.1 | 26381 | sentinel monitor mymaster 127.0.0.1 6380 2 |
node03 | 127.0.0.1 | 26382 | sentinel monitor mymaster 127.0.0.1 6380 2 |
(二)服務(wù)配置
1、Redis實(shí)例
節(jié)點(diǎn)的初始配置文件以默認(rèn)配置文件為模版。
node01、node02初始化配置文件之后,顯示指明節(jié)點(diǎn)間的主從關(guān)系,增加如下配置:
replicaof 127.0.0.1 6380
2、哨兵服務(wù)
節(jié)點(diǎn)的初始配置文件以默認(rèn)配置文件為模版。
node01、node02、node03初始化配置文件后,增加如下配置:
sentinel monitor mymaster 127.0.0.1 6381 2
(三)服務(wù)管理
測(cè)試或者學(xué)習(xí)時(shí),建議采用前臺(tái)進(jìn)程管理服務(wù),便于模擬單點(diǎn)故障、查看日志觀察主從切換。
生產(chǎn)條件下建議使用Supervisor管理服務(wù),不僅易于管理而且能夠?qū)崿F(xiàn)服務(wù)異常終止后自動(dòng)重啟。高可用場(chǎng)景下使用的是三臺(tái)物理機(jī)。
1、Redis實(shí)例
/usr/local/redis/bin/redis-server /usr/local/redis/conf/ms/redis80.conf --port 6380 --save '' --daemonize no /usr/local/redis/bin/redis-server /usr/local/redis/conf/ms/redis81.conf --port 6381 --save '' --daemonize no /usr/local/redis/bin/redis-server /usr/local/redis/conf/ms/redis82.conf --port 6382 --save '' --daemonize no
2、哨兵服務(wù)
/usr/local/redis/bin/redis-sentinel /usr/local/redis/conf/ms/sentinel280.conf --port 26380 --daemonize no /usr/local/redis/bin/redis-sentinel /usr/local/redis/conf/ms/sentinel281.conf --port 26381 --daemonize no /usr/local/redis/bin/redis-sentinel /usr/local/redis/conf/ms/sentinel282.conf --port 26382 --daemonize no
三、客戶端整合
客戶端實(shí)現(xiàn)是指基于SpringBoot的整合分為兩步實(shí)現(xiàn):一是完成作為基礎(chǔ)的整合;二是結(jié)合生產(chǎn)需要補(bǔ)充新特性。
(一)基礎(chǔ)整合
基礎(chǔ)整合的內(nèi)容是以Java客戶端連接高可用哨兵模式Redis服務(wù),實(shí)現(xiàn)單節(jié)點(diǎn)故障服務(wù)正常運(yùn)行的要求。
1、全局配置文件
全局配置文件添加的配置信息有:master
參數(shù)為哨兵服務(wù)名,此處為默認(rèn)值;nodes
參數(shù)為哨兵服務(wù)列表(不是Redis實(shí)例服務(wù)列表);database
參數(shù)為數(shù)據(jù)庫(kù)。
spring: redis: database: 0 sentinel: nodes: 192.168.181.171:26380,192.168.181.171:26381,192.168.181.171:26382 master: mymaster
2、集成配置
集成進(jìn)SpringBoot體系,最核心的是創(chuàng)建LettuceConnectionFactory
連接工廠,通過(guò)Redis連接工廠,能夠順利繼承進(jìn)Spring體系下其他框架。
@Configuration public class RedisSentinelConfig { @Autowired private RedisProperties redisProperties; @Bean public RedisConnectionFactory lettuceConnectionFactory() { RedisProperties.Sentinel sentinel = redisProperties.getSentinel(); HashSet<String> nodes = new HashSet<>(sentinel.getNodes()); String master = sentinel.getMaster(); RedisSentinelConfiguration config = new RedisSentinelConfiguration(master, nodes); config.setDatabase(redisProperties.getDatabase()); return new LettuceConnectionFactory(config); } }
(二)讀寫(xiě)分離
基礎(chǔ)整合僅僅是實(shí)現(xiàn)了高可用Redis服務(wù)的流程,生產(chǎn)環(huán)境下仍需要增加其他配置:修改自定義連接數(shù)據(jù)庫(kù)序號(hào);授權(quán)連接;連接池配置;讀寫(xiě)分離。
在高可用前提下,衍生出讀寫(xiě)分離的特性,主庫(kù)完成寫(xiě)請(qǐng)求;從庫(kù)完成讀請(qǐng)求(從庫(kù)不允許寫(xiě))。
@Bean public LettuceClientConfigurationBuilderCustomizer lettuceClientCustomizer() { // 配置讀寫(xiě)分離 return builder -> builder.readFrom(ReadFrom.REPLICA); }
到此這篇關(guān)于淺談Redis哨兵模式高可用解決方案的文章就介紹到這了,更多相關(guān)Redis哨兵模式高可用內(nèi)容請(qǐng)搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!
相關(guān)文章
Redis報(bào)錯(cuò):Could not create server TCP 
這篇文章主要介紹了Redis報(bào)錯(cuò):Could not create server TCP listening socket 127.0.0.1:6379: bind:解決方法,是安裝與啟動(dòng)Redis過(guò)程中比較常見(jiàn)的問(wèn)題,需要的朋友可以參考下2023-06-06redis持久化AOF和RDB的區(qū)別及解決各個(gè)場(chǎng)景問(wèn)題示例
這篇文章主要為大家介紹了redis持久化AOF和RDB的區(qū)別及解決各個(gè)場(chǎng)景問(wèn)題示例,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進(jìn)步,早日升職加薪2023-08-08Linux服務(wù)器使用Redis作為數(shù)據(jù)緩存并用log4j2進(jìn)行日志記錄的過(guò)程分享
這篇文章主要介紹了Linux服務(wù)器使用Redis作為數(shù)據(jù)緩存并用log4j2日志記錄,關(guān)于SpringBoot項(xiàng)目配置Redis與log4j2是查詢官方文檔,本文中的Redis配置類、Redis工具類以及l(fā)og4j2.xml配置文件來(lái)自網(wǎng)絡(luò),查證源自何處比較麻煩,所以在此感謝所有人的分享2023-09-09Redis中LRU算法和LFU算法的區(qū)別小結(jié)
在Redis中,LRU算法和LFU算法是兩種常用的緩存淘汰算法,它們可以幫助我們優(yōu)化緩存性能,本文主要介紹了Redis中LRU算法和LFU算法的區(qū)別,感興趣的可以了解一下2023-12-12redis使用zset實(shí)現(xiàn)延時(shí)隊(duì)列的示例代碼
本文主要介紹了redis使用zset實(shí)現(xiàn)延時(shí)隊(duì)列的示例代碼,文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來(lái)一起學(xué)習(xí)學(xué)習(xí)吧2023-06-06