2014-09-22 40 views
2

我試圖設置一個高可用性設置,如果服務器出現故障,託管我的主Redis緩存,它將選擇不同的主設備,但在閱讀關於Sentinels的所有文檔後,我有點困惑。Redis Cache如何使用高可用性和Sentinel?

例如,如果我有一個URL,我將我的Redis Client指向:http://my.RedisServer.com:6379,那麼標記如何幫助故障轉移到另一臺服務器,如http://mybackup.RedisServer.com:6379

我使用.Net的ServiceStack.Redis客戶端,並在Windows服務器上安裝了我的Redis安裝,但我想爲了獲得高可用性,我必須切換到Linux並使用Twemproxy安裝程序或其他東西?我猜我不能將http://my.RedisServer.com:6379存儲在我的web.config中並讓它以某種方式正常工作?我想像某個地方必須有一個DNS映射到2個IP,並且像任何H.A.一樣負載平衡。 web應用程序...

我想我看到一些關於PooledRedisClientManager的東西,可能是我的答案?

感謝您的澄清。

回答

0

我相信我找到了答案。

How to tell a Client where the new Redis master is using Sentinel

顯然,你只需要訂閱,並聽取哨兵事件。有道理..我只是覺得有一個更簡化的方法。

我讀了一些關於Linux的Twemproxy,它充當代理,可能是爲你做的嗎?但是我使用的是Redis for Windows,並試圖找到Windows選項。如果這是應該完成的認可方式,我們可能會轉向Linux。

+0

我發現了同樣的問題,這是非常重要的,Twemproxy和HAProxy的有哨兵說話就知道誰的能力是主人,並且總是將呼叫重定向到主人,不幸的是,沒有Windows人的版本,爲什麼我創建了一個代理來完成該步驟,因此您只能連接到代理並重定向到主人。 – 2015-09-30 18:12:45

1

我只是在Windows上設置Redis,一臺主服務器和一臺從服務器,每臺服務器一臺哨兵服務器,服務器由ms網絡負載平衡器處於羣集環境中。

所以基本上我所做的是:

服務器A:(本地IP:1.10.10.1,羣集IP:1.10.11.1)

  • 運行Redis的作爲主
  • 運行redis作爲Sentinel監視服務器A

服務器B:(l ocal IP:1.10.10.2,cluster ip:1.10.11。1)

  • 運行Redis的服務器A
  • 運行Redis的哨兵看到服務器B的奴隸

現在第一個問題,我是,當我連接到羣集的地址,我不知道哪個服務器正在響應,並且我需要連接到主服務器,因爲從服務器是隻讀服務器(僅用於故障轉移),所以當然HAProxy和Twemproxy就是這樣,但是沒有針對Windows的實現,所以我決定創建爲此目的的代理:

https://bitbucket.org/israelito3000/redis

因此,基本上我在兩臺服務器上安裝了redis代理,現在當我從客戶端庫連接時,代理始終將包傳輸給主設備,所以它就像一個通道。當主Redis出現故障時,自動標記會將從站的角色更改爲主站,並且代理將把流量重定向到新主站,所以基本上從客戶端我不需要執行任何操作。

到說,我不能直接訪問這些服務器(只有通羣集IP)