Spring Boot 如何快速集成 Redis 哨兵?
Redis Sentinel 介紹
Redis Sentinel:哨兵,放哨,看中文名字就知道它是一種 Redis 高可用解決方案,主要是針對 Redis 主從模式實現(xiàn)主從節(jié)點監(jiān)控、故障自動切換。
沒有 Redis Sentinel 架構(gòu)之前,如果主節(jié)點掛了,需要運維人員手動進行主從切換,然后更新所有用到的 Redis IP 地址參數(shù)再重新啟動系統(tǒng),所有恢復(fù)操作都需要人為干預(yù),如果半夜掛了,如果系統(tǒng)很多,如果某個操作搞錯了,等等,這對運維人員來說簡直就是惡夢。
有了 Redis Sentinel,主從節(jié)點故障都是自動化切換,應(yīng)用程序參數(shù)什么也不用改,對于客戶端來說都是透明無縫切換的,運維人員再也不用擔驚受怕了。
如一個 1 主 3 從的 Redis 架構(gòu)如下:
加入 Redis 哨兵之后的架構(gòu)如下:
為了保證 Redis Sentinel 架構(gòu)自身的高可用性,自身也不能有單點,一般也要由 3 個或以上 Sentinel 節(jié)點組成,一起負責監(jiān)控主從節(jié)點,當大部分 Sentinel 節(jié)點認為主節(jié)點不可用時,會選一個 Sentinel 節(jié)點進行故障切換。
哨后架構(gòu)的搭建這里不展開了,大家可以移步公眾號Java技術(shù)棧,關(guān)于 Redis 單機、哨后、集群的搭建、以及往期 Redis 和 Spring Boot 集成、分布式鎖實戰(zhàn)教程等在公眾號Java技術(shù)棧后臺回復(fù)redis進行翻閱。
Spring Boot & Redis Sentinel 實戰(zhàn)
搞懂了 Redis 哨兵的用處之后,再來看一下 Spring Boot 如何快速集成 Redis Sentinel。
要知道如何自動配置 Redis Sentinel,除了看官方教程(不一定詳細),最好的方式就是看源碼了。
看過上篇的都知道 Spring Boot Redis 的默認客戶端是:Lettuce,我們再來看下 LettuceConnectionFactory 的自動配置源碼:
- org.springframework.boot.autoconfigure.data.redis.LettuceConnectionConfiguration
如源碼所示,我們可以知道 Redis 連接自動配置的優(yōu)先順序是:
Redis Sentinel(哨兵) > Redis Cluster(集群) > Standalone(單機)
哨兵模式優(yōu)先極是最高的,再來看下 getSentinelConfig 方法源碼:
master、sentinels 是必須參數(shù),password、SentinelPassword 是可選的,database 默認是第 0 個數(shù)據(jù)庫。
配置參數(shù)源碼:
- org.springframework.boot.autoconfigure.data.redis.RedisProperties.Sentinel
所以,我們只需要提供 Redis Sentinel 的基本配置參數(shù)即可。
application.yml 配置如下:
- # 關(guān)注公眾號Java技術(shù)??锤?nbsp;
- spring:
- profiles:
- active: sentinel
- ---
- spring:
- profiles: standalone
- redis:
- host: 192.168.1.110
- port: 6379
- password: redis2020
- database: 1
- ---
- spring:
- profiles: sentinel
- redis:
- password: redis2020
- sentinel:
- master: mymaster
- nodes:
- - 192.168.1.110:26379
- - 192.168.1.111:26379
- - 192.168.1.112:26379
這樣就能在單機和哨兵模式下切換,這是 yaml 配置的優(yōu)勢,一個文件搞定多套環(huán)境配置,不熟悉的關(guān)注公眾號Java技術(shù)棧閱讀我寫的 Spring Boot 系列文章,當然這里配置兩套只是為了測試,實際項目這樣做沒有意義。
配置成功后,該怎么使用還是怎么使用了,Redis Sentinel 對于客戶端來說是透明的。
本文轉(zhuǎn)載自微信公眾號「 Java技術(shù)棧」,可以通過以下二維碼關(guān)注。轉(zhuǎn)載本文請聯(lián)系 Java技術(shù)棧公眾號。








































