![](/img/trans.png)
[英]How to use Moq to mock up the StackExchange.Redis ConnectionMultiplexer class?
[英]How to handle failover in a Redis cluster with ConnectionMultiplexer?
正如您所期望的,我有一個6節點Redis集群並運行着,它有3個從屬和3個主控。
從Redis服務器的角度來看,一切似乎都很糟糕,我可以在服務器上調用cluster failover
或debug 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
。
我嘗試將事件附加到ConfigurationChanged
, ConfigurationChangedBroadcast
, ConnectionFailed
並訂閱各種頻道,以期希望在主機故障時看到廣播。 如果我導致主機更改集群,這些似乎都不會觸發。
所以我想知道我是否對此有所缺失?
干杯,
克雷格
經過一番游戲之后,我注意到多路復用器最終確實重新配置了自己。 最初,我在調試模式下停止檢查某些內容時注意到了這一點,而當我繼續進行操作時,它又意外地開始工作。
如果我在連接字符串中設置configCheckSeconds=1
,而不是將默認值設置為60,則重新配置會更加迅速地進行,因此我認為這是罪魁禍首。
我不確定如此大幅度地更改此設置會產生多少開銷。 我猜一般情況下,群集節點發生故障的可能性不大,因此不必經常進行重新配置。 我剛剛創建了一個極端的測試場景。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.