SpringBoot結(jié)合Redis哨兵模式的實(shí)現(xiàn)示例
Redis哨兵模式
Redis Sentinel介紹
Redis Sentinel是Redis高可用的實(shí)現(xiàn)方案。Sentinel是一個(gè)管理多個(gè)Redis實(shí)例的工具,它可以實(shí)現(xiàn)對(duì)Redis的監(jiān)控、通知、自動(dòng)故障轉(zhuǎn)移。
Redis Sentinel主要功能
Redis 的 Sentinel 系統(tǒng)用于管理多個(gè) Redis 服務(wù)器(instance), 該系統(tǒng)執(zhí)行以下三個(gè)任務(wù):
- 監(jiān)控(Monitoring):Sentinel 會(huì)不斷地檢查你的主服務(wù)器和從服務(wù)器是否運(yùn)作正常。
- 提醒(Notification):當(dāng)被監(jiān)控的某個(gè) Redis 服務(wù)器出現(xiàn)問(wèn)題時(shí), Sentinel 可以通過(guò) API 向管理員或者其他應(yīng)用程序發(fā)送通知。
- 自動(dòng)故障遷移(Automatic failover):當(dāng)一個(gè)主服務(wù)器不能正常工作時(shí), Sentinel 會(huì)開(kāi)始一次自動(dòng)故障遷移操作, 它會(huì)將失效主服務(wù)器的其中一個(gè)從服務(wù)器升級(jí)為新的主服務(wù)器, 并讓失效主服務(wù)器的其他從服務(wù)器改為復(fù)制新的主服務(wù)器; 當(dāng)客戶端試圖連接失效的主服務(wù)器時(shí), 集群也會(huì)向客戶端返回新主服務(wù)器的地址, 使得集群可以使用新主服務(wù)器代替失效服務(wù)器。
Redis Sentinel部署

Redis集群配置
Redis集群?jiǎn)?dòng)
復(fù)制3個(gè)reids.conf配置文件
cp redis.conf /home/redis/redis6379.conf cp redis.conf /home/redis/redis6380.conf cp redis.conf /home/redis/redis6381.conf
修改reids.conf配置文件,以6379配置為例
vim redis6379.conf #啟用后臺(tái)啟動(dòng) daemonize yes #pidfile位置 pidfile "/home/redis/6379/redis6379.pid" #端口 port 6379 #日志文件位置 logfile "/home/redis/6379/log6379.log" #rdb備份文件名稱(chēng) dbfilename "dump6379.rdb" #rdb備份文件路徑 dir "/home/redis/rdb/"
修改redis-slave配置文件,修改和master如上配置,6380、6381配置文件,新增如下
slaveof 192.168.126.200 6379
先啟動(dòng)master服務(wù),在啟動(dòng)slave服務(wù)
master節(jié)點(diǎn)服務(wù) ./redis-cli -p 6379 127.0.0.1:6379> info replication # Replication role:master connected_slaves:2 slave0:ip=192.168.126.200,port=6380,state=online,offset=975350,lag=1 slave1:ip=192.168.126.200,port=6381,state=online,offset=975350,lag=1 master_repl_offset:975495 repl_backlog_active:1 repl_backlog_size:1048576 repl_backlog_first_byte_offset:2 repl_backlog_histlen:975494 slave節(jié)點(diǎn)服務(wù) ./redis-cli -p 6380 # Replication role:slave master_host:192.168.126.200 master_port:6379 master_link_status:up master_last_io_seconds_ago:0 master_sync_in_progress:0 slave_repl_offset:989499 slave_priority:100 slave_read_only:1 connected_slaves:0 master_repl_offset:0 repl_backlog_active:0 repl_backlog_size:1048576 repl_backlog_first_byte_offset:0 repl_backlog_histlen:0
sentinel集群配置
編寫(xiě)sentinel配置文件,master配置
touch sentinel1.conf vim sentinel1.conf #Sentinel節(jié)點(diǎn)的端口 port 26379 dir "/home/redis/sentinel" daemonize yes logfile "sentinel-26379.log" #當(dāng)前Sentinel節(jié)點(diǎn)監(jiān)控 127.0.0.1:6379 這個(gè)主節(jié)點(diǎn) #代表判斷主節(jié)點(diǎn)失敗至少需要2個(gè)Sentinel節(jié)點(diǎn)節(jié)點(diǎn)同意 #mymaster是主節(jié)點(diǎn)的別名 sentinel monitor mymaster 192.168.126.200 6380 2 #每個(gè)Sentinel節(jié)點(diǎn)都要定期PING命令來(lái)判斷Redis數(shù)據(jù)節(jié)點(diǎn)和其余Sentinel節(jié)點(diǎn)是否可達(dá),如果超過(guò)30000毫秒且沒(méi)有回復(fù),則判定不可達(dá) sentinel down-after-milliseconds mymaster 30000 #當(dāng)Sentinel節(jié)點(diǎn)集合對(duì)主節(jié)點(diǎn)故障判定達(dá)成一致時(shí),Sentinel領(lǐng)導(dǎo)者節(jié)點(diǎn)會(huì)做故障轉(zhuǎn)移操作,選出新的主節(jié)點(diǎn),原來(lái)的從節(jié)點(diǎn)會(huì)向新的主節(jié)點(diǎn)發(fā)起復(fù)制操作,限制每次向>新的主節(jié)點(diǎn)發(fā)起復(fù)制操作的從節(jié)點(diǎn)個(gè)數(shù)為1 sentinel leader-epoch mymaster 1 #故障轉(zhuǎn)移超時(shí)時(shí)間為180000毫秒 sentinel failover-timeout mymaster 180000 #同理創(chuàng)建修改sentinel2.conf、sentinel3.conf配置文件
啟動(dòng)3臺(tái)sentinel服務(wù)
./redis-sentinel /home/redis/sentinel1.conf ./redis-sentinel /home/redis/sentinel2.conf ./redis-sentinel /home/redis/sentinel3.conf
SpringBoot結(jié)合Redis哨兵模式
創(chuàng)建SpringBoot項(xiàng)目,添加依賴
<dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-data-redis</artifactId> </dependency> <dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-web</artifactId> </dependency> <dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-test</artifactId> </dependency> <dependency> <groupId>org.projectlombok</groupId> <artifactId>lombok</artifactId> </dependency> <!--redis連接池--> <dependency> <groupId>org.apache.commons</groupId> <artifactId>commons-pool2</artifactId> </dependency>
核心配置文件application.yml
server: port: 80 spring: redis: lettuce: pool: # 連接池最大連接數(shù)(使用負(fù)值表示沒(méi)有限制) 默認(rèn)為8 max-active: 8 # 連接池中的最大空閑連接 默認(rèn)為8 max-idle: 8 # 連接池最大阻塞等待時(shí)間(使用負(fù)值表示沒(méi)有限制) 默認(rèn)為-1 max-wait: -1ms # 連接池中的最小空閑連接 默認(rèn)為 0 min-idle: 0 sentinel: # 主節(jié)點(diǎn)的別名 master: mymaster # sentinel服務(wù)的ip和端口 nodes: 192.168.126.200:26379,192.168.126.200:26380,192.168.126.200:26381
程序調(diào)用
@RestController
@RequestMapping("/redis")
public class RedisController {
// 使用SpringBoot封裝的RestTemplate對(duì)象
@Autowired
RedisTemplate<String, String> redisTemplate;
@RequestMapping("/get")
public String get(String key) {
String value = redisTemplate.opsForValue().get(key);
return value;
}
@RequestMapping("/set")
public String set(String key, String value) {
redisTemplate.opsForValue().set(key, value);
return "success";
}
}
模擬故障
手動(dòng)shutdown redis的master服務(wù)后,后臺(tái)會(huì)嘗試重連,當(dāng)超過(guò)最大等待時(shí)間,無(wú)法連接后,sentinel會(huì)重新選舉出一個(gè)新的master,程序獲取到新的master節(jié)點(diǎn),提供讀寫(xiě)服務(wù)

到此這篇關(guān)于SpringBoot結(jié)合Redis哨兵模式的實(shí)現(xiàn)示例的文章就介紹到這了,更多相關(guān)SpringBoot結(jié)合Redis哨兵模式內(nèi)容請(qǐng)搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!
相關(guān)文章
Java基于循環(huán)遞歸回溯實(shí)現(xiàn)八皇后問(wèn)題算法示例
這篇文章主要介紹了Java基于循環(huán)遞歸回溯實(shí)現(xiàn)八皇后問(wèn)題算法,結(jié)合具體實(shí)例形式分析了java的遍歷、遞歸、回溯等算法實(shí)現(xiàn)八皇后問(wèn)題的具體步驟與相關(guān)操作技巧,需要的朋友可以參考下2017-06-06
超好用的Java工具類(lèi)庫(kù)Hutool用法詳解
Hutool是一個(gè)小而全的Java工具類(lèi)庫(kù),通過(guò)靜態(tài)方法封裝,降低相關(guān)API的學(xué)習(xí)成本,提高工作效率,下面就跟隨小編一起來(lái)學(xué)習(xí)一下Hutool的具體用法吧2023-09-09
Mybatis-plus實(shí)現(xiàn)主鍵自增和自動(dòng)注入時(shí)間的示例代碼
這篇文章主要介紹了Mybatis-plus實(shí)現(xiàn)主鍵自增和自動(dòng)注入時(shí)間的示例代碼,文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來(lái)一起學(xué)習(xí)學(xué)習(xí)吧2020-07-07
Java8新特性之重復(fù)注解(repeating annotations)淺析
這篇文章主要介紹了Java8新特性之重復(fù)注解(repeating annotations)淺析,這個(gè)新特性只是修改了程序的可讀性,是比較小的一個(gè)改動(dòng),需要的朋友可以參考下2014-06-06
mybatis plus開(kāi)發(fā)過(guò)程中遇到的問(wèn)題記錄及解決
這篇文章主要介紹了mybatis plus開(kāi)發(fā)過(guò)程中遇到的問(wèn)題記錄及解決方案,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。如有錯(cuò)誤或未考慮完全的地方,望不吝賜教2023-07-07
SpringCloud中的Feign遠(yuǎn)程調(diào)用接口傳參失敗問(wèn)題
這篇文章主要介紹了SpringCloud中的Feign遠(yuǎn)程調(diào)用接口傳參失敗問(wèn)題,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。如有錯(cuò)誤或未考慮完全的地方,望不吝賜教2022-03-03
springboot druid數(shù)據(jù)庫(kù)配置密碼加密的實(shí)現(xiàn)
Druid是阿里開(kāi)發(fā)的數(shù)據(jù)庫(kù)連接池,本文主要介紹了springboot druid數(shù)據(jù)庫(kù)配置密碼加密的實(shí)現(xiàn),具有一定的參考價(jià)值,感興趣的可以了解一下2024-06-06

