RabbitMQ集群簡介
一個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
RabbitMQ集群簡介