2012-04-12 151 views
2

我遇到的情況是,我目前有3個memcached實例在3個不同的服務器上運行。我的應用程序目前位於同一個3個不同的節點上。所有的應用程序服務器都知道所有的memcached服務器,但是如果其中一個出現故障,我無法注意到。 這個想法是將memcached服務器移動到自己的節點。使用memcached存儲桶掌握Couchbase

我已經開始考慮CouchBase作爲解決這個問題的替代方案,但不確定它會工作。

它會工作嗎,以便我在每個應用程序節點上都有一個CouchBase集羣,然後將它們連接到不同的memcached服務器,然後CouchBase將監視並知道哪些存活?

在這種情況下,如果某個memcached實例關閉,那麼當前綁定到memcached實例的應用程序如何知道如何獲取數據?或者是CouchBase會成爲中間人關心在哪裏存儲它?

回答

2

Couchbase是一個非常自適應的平臺,可以在替換標準memcached實例時使用。它允許您將很多容錯從應用程序移動到couchbase實例。

當您使用PHP時,我建議您在訪問Couchbase集羣時使用PHP SDK。它可以在這裏獲得:http://www.couchbase.com/develop/php/current

現在,重要的是知道PHP的SDK是'vbucket意識'。這意味着當您使用它連接到Couchbase集羣時,它將從您放入構造函數的地址收集所有節點的所有信息。例如:

#Create the Couchbase object 
$cb_obj = new Couchbase("127.0.0.1:8091", "user", "pass", "default"); 

這將創建一個對象,你可以通過將它自己的運行命令,能夠處理所有的故障轉移應該節點下去,所需等。每種語言都有它自己的小代碼過程(我通常自己使用Python),但是一旦你熟悉它們,它們就非常有效。

可以通過命令行界面或通過訪問http://<nodehostname>:8091/的網址來管理羣集。這也是您在安裝初始羣集後將訪問的URL。

我強烈建議Couchbase作爲獨立memcached的替代方案。

+0

謝謝,關於收集所有節點的信息的一個問題。這是否意味着如果我有一個帶有e.x 2 couchbase服務器的集羣,只需連接其中一個服務器,就可以使對象瞭解這兩個節點?如果提供的服務器出現故障,它是否會嘗試從其他節點獲取?只是想知道當couchbase服務器出現故障時會發生什麼情況,而不僅僅是memcached存儲桶出現故障。 – Nitro 2012-04-16 09:04:13

+1

因此,初始通信獲取vbuckets的列表,但它會檢查更新vbucket信息的位置。通常最好的辦法是設置一些像nginx這樣的虛擬IP接口或代理,讓您可以在所有節點上進行循環負載平衡。這樣,如果其中一個節點出現故障,您仍然可以連接並獲得這些vbucket更新,而無需更改代碼以支持故障切換。除此之外,是的。只要它與Couchbase SDK交談初始節點,它就會知道所有其他服務器並相應地分配流量。 – Drahkar 2012-04-18 16:21:48

1

藉助Couchbase,您可以創建一個由三個節點組成的羣集。在您的應用程序中,創建一個PHP(?)Couchbase客戶端實例,併爲其至少一個節點提供URI。客戶端將從這些節點中的任何節點了解羣集的拓撲。

客戶端維護到集羣的流式連接,並會通知拓撲結構的任何更改。如果一個節點關閉,客戶端將作出相應的反應。

您可以設置自動故障轉移和通知來提醒您自動故障轉移事件。