網站首頁 編程語言 正文
一、序言
Redis高可用有兩種模式:哨兵模式
和集群模式
,本文基于哨兵模式搭建一主兩從三哨兵
Redis高可用服務。
1、目標與收獲
一主兩從三哨兵
Redis服務,基本能夠滿足中小型項目的高可用要求,使用Supervisor監控并管理Redis實例。通過本文將完成如下目標:
- 哨兵模式服務規劃與搭建
哨兵模式服務相比于單機版服務更加可靠,適合讀寫分離、數據量不是很大、要求可靠穩定性的場景。
- 客戶端整合與讀寫分離
通過Spring框架對哨兵模式進行連接,完成生產環境的常見操作。
2、端口規劃
端口規劃是完成本方案的第一步。
二、單機模擬
單機模擬是指在單臺物理機或者虛擬機上模擬操作,最大化還原本方案中間過程,適用于學習或者開發階段使用。
為了簡化操作,Redis服務做如下約定:數據不持久化到磁盤;服務實例以前臺進程方式運行;節點的配置文件以默認配置文件為模版;無密碼驗證。
(一)服務規劃
1、Redis實例
服務在第一次啟動時明確知道第幾個節點是master節點,當服務在長期運行并發生主從切換時,無法顯示知道第幾個節點是master節點,需要通過命令行間接查詢。
節點 | 主機 | 端口 | 角色 | 額外配置 |
---|---|---|---|---|
node01 | 127.0.0.1 | 6380 | 第一次啟動時作為master服務 | ? |
node02 | 127.0.0.1 | 6381 | 第一次啟動時作為slave服務 | replicaof 127.0.0.1 6380 |
node03 | 127.0.0.1 | 6382 | 第一次啟動時作為slave服務 | replicaof 127.0.0.1 6380 |
額外配置指第一次啟動Redis服務實例時,節點配置文件中新增配置。
2、哨兵服務
哨兵服務節點之間沒有主從的區別,所有節點處于平等地位。當主服務異常時,哨兵服務之間會喚醒投票策略,從Redis實例從節點選擇主服務的候選人。
節點 | 主機 | 端口 | 額外配置 |
---|---|---|---|
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 |
(二)服務配置
1、Redis實例
節點的初始配置文件以默認配置文件為模版。
node01、node02初始化配置文件之后,顯示指明節點間的主從關系,增加如下配置:
replicaof 127.0.0.1 6380
2、哨兵服務
節點的初始配置文件以默認配置文件為模版。
node01、node02、node03初始化配置文件后,增加如下配置:
sentinel monitor mymaster 127.0.0.1 6381 2
(三)服務管理
測試或者學習時,建議采用前臺進程管理服務,便于模擬單點故障、查看日志觀察主從切換。
生產條件下建議使用Supervisor管理服務,不僅易于管理而且能夠實現服務異常終止后自動重啟。高可用場景下使用的是三臺物理機。
1、Redis實例
/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、哨兵服務
/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
三、客戶端整合
客戶端實現是指基于SpringBoot的整合分為兩步實現:一是完成作為基礎的整合;二是結合生產需要補充新特性。
(一)基礎整合
基礎整合的內容是以Java客戶端連接高可用哨兵模式Redis服務,實現單節點故障服務正常運行的要求。
1、全局配置文件
全局配置文件添加的配置信息有:master
參數為哨兵服務名,此處為默認值;nodes
參數為哨兵服務列表(不是Redis實例服務列表);database
參數為數據庫。
spring: redis: database: 0 sentinel: nodes: 192.168.181.171:26380,192.168.181.171:26381,192.168.181.171:26382 master: mymaster
2、集成配置
集成進SpringBoot體系,最核心的是創建LettuceConnectionFactory
連接工廠,通過Redis連接工廠,能夠順利繼承進Spring體系下其他框架。
@Configuration public class RedisSentinelConfig { @Autowired private RedisProperties redisProperties; @Bean public RedisConnectionFactory lettuceConnectionFactory() { RedisProperties.Sentinel sentinel = redisProperties.getSentinel(); HashSetnodes = new HashSet<>(sentinel.getNodes()); String master = sentinel.getMaster(); RedisSentinelConfiguration config = new RedisSentinelConfiguration(master, nodes); config.setDatabase(redisProperties.getDatabase()); return new LettuceConnectionFactory(config); } }
(二)讀寫分離
基礎整合僅僅是實現了高可用Redis服務的流程,生產環境下仍需要增加其他配置:修改自定義連接數據庫序號;授權連接;連接池配置;讀寫分離。
在高可用前提下,衍生出讀寫分離的特性,主庫完成寫請求;從庫完成讀請求(從庫不允許寫)。
@Bean public LettuceClientConfigurationBuilderCustomizer lettuceClientCustomizer() { // 配置讀寫分離 return builder -> builder.readFrom(ReadFrom.REPLICA); }
原文鏈接:https://www.cnblogs.com/javazhishitupu/p/15877771.html
相關推薦
- 2022-06-14 Go操作redis與redigo的示例解析_Golang
- 2022-10-08 LyScript實現繞過反調試保護的示例詳解_python
- 2022-12-08 Python如何遍歷numpy數組_python
- 2023-05-14 Python中數字(Number)數據類型常用操作_python
- 2022-03-26 C#?WPF數據綁定模板化操作的完整步驟_C#教程
- 2024-01-12 如何理解 Elasticsearch 中的 Indices、Types、Documents、Fiel
- 2022-09-26 ASP.NET?MVC打印表格并實現部分視圖表格打印_實用技巧
- 2021-11-21 關于.NET6?Minimal?API的使用方式詳解_實用技巧
- 最近更新
-
- window11 系統安裝 yarn
- 超詳細win安裝深度學習環境2025年最新版(
- Linux 中運行的top命令 怎么退出?
- MySQL 中decimal 的用法? 存儲小
- get 、set 、toString 方法的使
- @Resource和 @Autowired注解
- Java基礎操作-- 運算符,流程控制 Flo
- 1. Int 和Integer 的區別,Jav
- spring @retryable不生效的一種
- Spring Security之認證信息的處理
- Spring Security之認證過濾器
- Spring Security概述快速入門
- Spring Security之配置體系
- 【SpringBoot】SpringCache
- Spring Security之基于方法配置權
- redisson分布式鎖中waittime的設
- maven:解決release錯誤:Artif
- restTemplate使用總結
- Spring Security之安全異常處理
- MybatisPlus優雅實現加密?
- Spring ioc容器與Bean的生命周期。
- 【探索SpringCloud】服務發現-Nac
- Spring Security之基于HttpR
- Redis 底層數據結構-簡單動態字符串(SD
- arthas操作spring被代理目標對象命令
- Spring中的單例模式應用詳解
- 聊聊消息隊列,發送消息的4種方式
- bootspring第三方資源配置管理
- GIT同步修改后的遠程分支