簡體   English   中英

如何使用ConnectionMultiplexer處理Redis集群中的故障轉移?

[英]How to handle failover in a Redis cluster with ConnectionMultiplexer?

正如您所期望的,我有一個6節點Redis集群並運行着,它有3個從屬和3個主控。
從Redis服務器的角度來看,一切似乎都很糟糕,我可以在服務器上調用cluster failoverdebug segfault ,然后合適的從屬設備成為主服務器。

從.net的角度來看,我一直在關注StackExchange Redis文檔,所以我有一個靜態的IConnectionMultiplexer ,從中可以獲得IDatabase ,並且可以從中存儲和檢索值。

我正在使用如下連接字符串: srv1:7001,srv2:7001,srv3:7001,srv1:7002,srv2:7002,srv3:7002

到現在為止還挺好。

但是,我試圖找出使用連接多路復用器時如何處理群集中的主服務器故障。 目前,我能想到的最好的辦法是捕獲一個異常,丟棄當前的連接多路復用器,並創建一個全新的連接多路復用器,這感覺有些棘手。

鑒於我在連接時告訴多路復用器所有潛在的端點,所以我希望它能夠關注此類情況並自動開始與新的主設備通信。 一些文檔也暗示了這一點:

同樣,當配置更改時(尤其是主/從配置),對於連接的實例來說,使自己知道新情況(通過INFO,CONFIG等,在可用時)也很重要。 StackExchange.Redis通過自動執行此操作...

如果我殺死srv1:7001卻什么也不做,則連接將永遠無法恢復,並且每次設置新值的調用都會引發RedisConnectionException

我嘗試將事件附加到ConfigurationChangedConfigurationChangedBroadcastConnectionFailed並訂閱各種頻道,以期希望在主機故障時看到廣播。 如果我導致主機更改集群,這些似乎都不會觸發。

所以我想知道我是否對此有所缺失?

干杯,
克雷格

經過一番游戲之后,我注意到多路復用器最終確實重新配置了自己。 最初,我在調試模式下停止檢查某些內容時注意到了這一點,而當我繼續進行操作時,它又意外地開始工作。

如果我在連接字符串中設置configCheckSeconds=1 ,而不是將默認值設置為60,則重新配置會更加迅速地進行,因此我認為這是罪魁禍首。

我不確定如此大幅度地更改此設置會產生多少開銷。 我猜一般情況下,群集節點發生故障的可能性不大,因此不必經常進行重新配置。 我剛剛創建了一個極端的測試場景。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM