2014-01-12 60 views
2

我正在使用redis version 2.8.3。我想構建一個redis集羣。但在這個集羣中應該有multiple master。這意味着我需要具有寫入權限並將能力應用到所有其他節點的多個節點。Redis主動 - 主動複製

我可以建立一個主站和多個從站的集羣。我剛剛配置了奴隸redis.conf文件並補充說:

slaveof myMasterIp myMasterPort 

就是這樣。比我嘗試通過主寫入到db的東西。它被複制給所有奴隸,我非常喜歡它。

但是當我嘗試通過奴隸寫信時,它告訴我奴隸無權寫信。之後,我將redis.conf文件中slave的只讀狀態設置爲false。因此,我可以寫入db的東西。 但我意識到,它不會複製到我的主複製,因此它不會複製到所有其他從屬neigther。

這意味着我無法構建主動 - 主動羣集。

我試圖找到一些redis是否具有主動 - 主動羣集功能。但是我找不到確切的答案。

是否可以使用redis構建主動 - 主動羣集? 如果是這樣,我該怎麼辦?

謝謝!

+0

如果我的回答有幫助,請對其進行表決:) –

回答

1

Redis v2.8.3不支持多主設置。然而,真正的問題是你爲什麼要設置一個?換句話說,你試圖解決什麼挑戰/問題?

看起來你試圖解決的挑戰是如何通過消除網上讀取來減少網絡負載(更多關於下面的內容)。由於Redis並不是多主設備,所以唯一的辦法就是設置每個應用服務器,其中一個主設備一個從設備(對另一個主設備) - 即總計4個Redis實例(以及兩次RAM)。

簡單的情況是,每個應用程序只更新數據庫密鑰的互斥子集。在這種情況下,這種設置可能實際上是有益的(至少在短期內)。但是,如果兩個應用程序都可以觸摸所有按鍵,或者即使只有一個按鍵在應用程序之間進行「共享」,那麼您也需要在應用程序中烘焙鎖定/衝突解決方案/等等邏輯以合併本地主控和奴隸的差異(這可能有點矯枉過正)。但是,無論哪種情況,您最終都會得到太多(即超過1個)Redises,這意味着至少會有更多的管理工作。

另請注意,通過在同一臺服務器上同步應用程序和數據庫,您可以爲自己設置可接近的可伸縮性故障。當您需要更多計算資源用於應用程序或Redis時,會發生什麼?你將如何添加另一個應用程序服務器?

這將我帶回您正試圖解決的實際問題 - 網絡負載。爲什麼這是一個問題?您的應用程序是否如此吞吐量太大或者網絡太薄,以至於您願意這麼做?或者,也許延遲是你想解決的問題?儘管如此,但我建議您考慮一個經過時間驗證的設計,即將Redis從應用程序中分離出來,並將其放在自己的資源上。誠然,網絡會打擊你,你必須要解決它(這是其他人所做的)。另一方面,對於更簡單的設置,您將擁有更多靈活性和控制權,並且在我的書中,這是一個巨大的收益。

+0

在我的結構中,我有兩個應用程序運行在不同的服務器上。他們會寫入redis。 Redises將與應用程序在同一臺服務器上。如果我有一個具有寫權限的實例,網絡將會加載得更多。我想讓redis主動 - 主動不導致這個問題。但是我發現,它不適用於2.8.3版本 –

+0

讓我確保我理解正確:您有兩臺物理/虛擬服務器,每臺服務器運行不同的應用程序。每個應用都需要訪問相同的Redis數據庫,因爲它們共享數據。您不希望只有一臺服務器上安裝Redis,因爲您擔心網絡負載,所以您希望每臺應用服務器上都有一個本地Redis。然後,您的應用程序將從它們各自的本地實例進行讀寫操作,並且這些本地實例應以某種方式以多主機方式同步數據。正確? –

+0

是的。這正是我剛纔談到的 –