一個RabbitMQ訊息代理是一個由一個或多個Erlang節點組成的邏輯組,其中的每個節點都共享users, virtual hosts, queues, exchanges, bindings, and runtime parameters。我們把這些相關節點組成的集合作為一個cluster(叢集)。
What is Replicated?
所有資料需要在叢集中的所有節點被複制。預設情況下,資料同一個資料只存在於其中一個節點上。為了在叢集的節點之間複製資料,請高可用。
Hostname Resolution Requirements
RabbitMQ節點之間用域名名稱,可以是簡單的域名名稱也可以用全限定的。因此,叢集中的所有成員的hostnames(主機名)必須能夠被解析。
Cluster Formation
建立叢集的方式有很多種:
- 在配置檔案中宣告
- 基於DNS發現
- 各種外掛
- 通過rabbitmqctl手動建立
所有的RabbitMQ訊息代理在啟動以後都是作為單個結點執行的。這些結點可以被加到叢集中。
Failure Handling
RabbitMQ執行個別節點失敗。必要的話,結點可以被啟動和停止。
推薦執行在LAN(區域網)中
Disk and RAM Nodes
A node can be a disk node or a RAM node
90%的情況下你需要的的是disk node;而RAM node是為了提升叢集的效能而使用的一種特殊情況。
由於RAM node只在記憶體中儲存其內部資料庫,因此它啟動的時候必須從一個對等的節點那裡同步這些資訊,這也就意味著一個叢集中至少要包含一個disk node。
結點之間如何相互認證:the Erlang Cookie
RabbitMQ結點用cookie來決定是否它們之間允許互相通訊。兩個結點之間要想相互通訊,它們必須擁有相同的secret,這個secret被稱為Erlang Cookie。這個cookie僅僅只是一個字串,通常它被儲存在本例檔案中,這個檔案只能被其所有者訪問。叢集中的每個結點必須有相同的cookie。如果這個檔案不存在,那麼當RabbitMQ伺服器啟動的時候Erlang VM將自動建立一個檔案,其值是隨機生成的。
Connecting to Clusters from Clients
一個客戶端可以正常連線到叢集中的任意結點。如果那個結點失敗的話,叢集中的剩餘結點仍然可以提供服務,當然客戶端應該也注意到連線以及關閉,並且能夠重新連線到叢集中的其它成員。一般而言,不建議將結點的主機名或者IP地址引入到應用程式中,因為這樣會導致程式不夠靈活,並且萬一叢集的結點配置變了的話應用程式也必須隨之修改。代替的,推薦用一種更加抽象的方式:這種方式可能是一個動態的DNS服務。
參考 http://www.rabbitmq.com/clustering.html