一、序言
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(); 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); } }
(二)讀寫分離
基礎整合只是實現了高可用Redis服務的流程,生產環境下仍需要增加其他配置:修改自訂連接資料庫序號;授權連接;連接池配置;讀寫分離。
在高可用前提下,衍生出讀寫分離的特性,主庫完成寫入請求;從庫完成讀取請求(從庫不允許寫)。
@Bean public LettuceClientConfigurationBuilderCustomizer lettuceClientCustomizer() { // 配置读写分离 return builder -> builder.readFrom(ReadFrom.REPLICA); }
以上是Redis哨兵模式高可用的範例分析的詳細內容。更多資訊請關注PHP中文網其他相關文章!

Redisoutperformstraditionaldatabasesinspeedforread/writeOperationsDuetoitsin-memorynature,niletraditionalditionalditionalditationaldatabasesexcelcelincomplexqueriessanddaintegrity.1)redisisisisideSidealForrealForreal-timeanalyticsanticanticanticanticanticantic.2)

用戶edisinsteadofatraditionaldatabasewhenyourapplicationrequirespeedandreal-timedataprocorsing,sueAsAsforCaching,sessionmanagement,orrereal-timeanalytics.redisexcelsin:1)caching,緩存,減少載荷載量

Redis超越SQL數據庫的原因在於其高性能和靈活性。 1)Redis通過內存存儲實現極快的讀寫速度。 2)它支持多種數據結構,如列表和集合,適用於復雜數據處理。 3)單線程模型簡化開發,但高並發時可能成瓶頸。

Redis在高並發和低延遲場景下優於傳統數據庫,但不適合複雜查詢和事務處理。 1.Redis使用內存存儲,讀寫速度快,適合高並發和低延遲需求。 2.傳統數據庫基於磁盤,支持複雜查詢和事務處理,數據一致性和持久性強。 3.Redis適用於作為傳統數據庫的補充或替代,但需根據具體業務需求選擇。

Redisisahigh-performancein-memorydatastructurestorethatexcelsinspeedandversatility.1)Itsupportsvariousdatastructureslikestrings,lists,andsets.2)Redisisanin-memorydatabasewithpersistenceoptions,ensuringfastperformanceanddatasafety.3)Itoffersatomicoper

Redis主要是一個數據庫,但它不僅僅是數據庫。 1.作為數據庫,Redis支持持久化,適合高性能需求。 2.作為緩存,Redis提升應用響應速度。 3.作為消息代理,Redis支持發布-訂閱模式,適用於實時通信。

redisisamultifaceTedToolThatServesAsAdatabase,server和more.itfunctionsasanin-memorydatastrustore,supportsvariousDataStructures,and CanbeusedAsacache,MessageBroker,sessionStorage,sessionStorage,sessionstorage,andford forderibedibedlocking。

Redisisanopen-Source,內存內部的庫雷斯塔氏菌,卡赫和梅斯吉級,excellingInsPeedAndVersatory.itiswidelysusedforcaching,Real-Timeanalytics,Session Management,Session Managements,and sessighterboarderboarderboardobboardotoitsssupportfortfortfortfortfortfortfortfortorvortfortfortfortfortfortforvortfortforvortforvortforvortfortforvortforvortforvortforvortdatastherctuct anddatataCcessandcessanddataaCces


熱AI工具

Undresser.AI Undress
人工智慧驅動的應用程序,用於創建逼真的裸體照片

AI Clothes Remover
用於從照片中去除衣服的線上人工智慧工具。

Undress AI Tool
免費脫衣圖片

Clothoff.io
AI脫衣器

Video Face Swap
使用我們完全免費的人工智慧換臉工具,輕鬆在任何影片中換臉!

熱門文章

熱工具

MinGW - Minimalist GNU for Windows
這個專案正在遷移到osdn.net/projects/mingw的過程中,你可以繼續在那裡關注我們。 MinGW:GNU編譯器集合(GCC)的本機Windows移植版本,可自由分發的導入函式庫和用於建置本機Windows應用程式的頭檔;包括對MSVC執行時間的擴展,以支援C99功能。 MinGW的所有軟體都可以在64位元Windows平台上運作。

SublimeText3漢化版
中文版,非常好用

DVWA
Damn Vulnerable Web App (DVWA) 是一個PHP/MySQL的Web應用程序,非常容易受到攻擊。它的主要目標是成為安全專業人員在合法環境中測試自己的技能和工具的輔助工具,幫助Web開發人員更好地理解保護網路應用程式的過程,並幫助教師/學生在課堂環境中教授/學習Web應用程式安全性。 DVWA的目標是透過簡單直接的介面練習一些最常見的Web漏洞,難度各不相同。請注意,該軟體中

禪工作室 13.0.1
強大的PHP整合開發環境

PhpStorm Mac 版本
最新(2018.2.1 )專業的PHP整合開發工具