2013-07-02 88 views
6

根據git提交消息,ServiceStack最近添加了故障轉移支持。我最初認爲這意味着我可以將一個Redis實例拉下來,而我的池客戶端管理器將優雅地處理故障轉移,並嘗試與其中一個備用Redis實例連接。不幸的是,我的代碼出錯了,並且說它無法連接到最初的Redis實例。ServiceStack PooledRedisClientManager故障轉移如何工作?

我目前正在Windows上運行Redis 2.6.12的實例,主端口爲6379,從端爲6380,如果主站發生故障,設置標記以自動將從站升級爲主站。我目前實例我的客戶經理是這樣的:

​​

,其中第一陣列讀寫主機(主),與第二陣列是隻讀的主機(奴隸)。

當我終止在6379端口的主人,哨兵促使奴隸成爲主人。現在,當我嘗試運行我的C#代碼時,不是故障轉移到端口6380,而是簡單地中斷並返回錯誤「無法連接到redis實例在localhost:6379」。

有沒有辦法解決這個問題,或者故障切換是不是以我想要的方式工作?

+1

您是否找到了方法@Vliu – jaxxbo

+0

不,從我所做的大多數研究中,大多數人不依賴代碼來處理故障轉移。他們在redis數據庫上使用了一個(linux)代理層,比如HAProxy @jaxxbo – Vliu

回答

4

PooledRedisClientManager.FailoverTo允許您重置哪些是讀/寫主機,只讀主機,並重新啓動工廠。這允許快速轉換而無需重新創建客戶端。

+1

就像try {// redis operation} catch {PooledRedisClientManager.FailoverTo(從端口作爲讀寫端口)}? – Vliu

+1

這將是一種方法,是的。我設置了一個特殊服務來處理來自Redis Sentinel的傳入請求,這樣,如果它檢測到一個失敗的節點,它會協商並提升合適的從站,然後通知我的web服務新的地址和端口。 – TheDruidsKeeper

+0

嗨@TheDruidsKeeper,你會詳細介紹一下你的方法和一些樣本,例如,你的意思是什麼服務,以及它如何檢測失敗的節點,非常感謝。 – wliao