2013-03-20 56 views
9

我有一小羣服務器需要保持同步。我最初的想法是讓一臺服務器成爲「主服務器」,並使用redis的pub/sub功能發佈更新(因爲我們已經在使用redis進行存儲),並讓羣集中的其他服務器(從服務器)輪詢更新長期運行的任務。這似乎是一個簡單的方法來保持一切同步,但後來我想到了一個明顯的問題:如果我的「主人」倒下了會怎麼樣?那就是我開始研究技術以確保始終有一位大師,這讓我閱讀了諸如領袖選舉這樣的想法。最後,我偶然發現了Apache Zookeeper(通過python綁定,「pettingzoo」),它顯然爲您處理了很多容錯邏輯。我可能能夠編寫自己的領導者選擇代碼,但我認爲它不會像經過驗證和測試的東西一樣好,如Zookeeper。zookeeper vs redis服務器同步

我用飼養員主要問題是,它是我可能會加入到我的設置不必要的時候我可以用更簡單的東西獲得通過只是一個組成部分。有沒有人以這種方式使用過Redis?還是有任何其他簡單的方法可以用來獲得我試圖實現的功能類型?約pettingzoo

更多信息(slideshare

回答

13

恐怕沒有簡單的方法來實現高可用性。這通常很難安裝,並且很難測試。實現HA有多種方式,可以分爲兩類:物理聚類和邏輯聚類。

物理集羣是關於使用硬件,網絡和操作系統級別機制來實現HA。在Linux上,您可以看看Pacemaker這是一款適用於所有企業發行版的完整開源解決方案。如果您想直接在您的應用程序中嵌入集羣功能(使用C語言),則可能需要檢查Corosync cluster engine(Pacemaker也使用該功能)。如果您打算使用商業軟件,Veritas Cluster Server是一個成熟的(但昂貴的)跨平臺HA解決方案。

邏輯集羣是關於使用花哨的分佈式算法(如領導選舉,PAXOS等)實現HA而不依賴於特定的低級機制。這就是Zookeeper提供的東西。

動物園管理員是一致的,有序的,分層建立在ZAB協議(神似的Paxos)的主力店。它非常強大,可用於實施一些高可用性設施,但這不是微不足道的,您需要在所有節點上安裝JVM。舉個好例子,你可以看看一些recipes和來自Netflix的優秀Curator庫。如今,Zookeeper遠遠超出純粹的Hadoop環境和IMO,這是構建HA邏輯基礎架構的最佳解決方案。

Redis的發佈/訂閱機制是不夠可靠的實現邏輯集羣,因爲未讀郵件將會丟失(沒有與發佈/訂閱項目的排隊)。要實現一系列Redis實例的HA,您可以嘗試Redis Sentinel,但它不會擴展到您自己的軟件。

如果你準備在C,一個HA架構,常常被遺忘(但可以是非常有用的IMO)是一個與BerkeleyDB來編程。這是非常基本的,但支持現成的領導人選舉,並可以集成到任何環境中。文檔可以找到herehere。注意:您不需要將數據存儲在BerkeleyDB中以受益於HA機制(只有拓撲數據 - 您將放入Zookeeper的數據相同)。