一、環境準備 假設有兩台伺服器: 註意事項: 1)所有伺服器的Erlang及RabbitMQ版本必須一樣。 2)伺服器名大小寫敏感。 二、開始搭建 2.1、設置hosts文件 路徑如下:C:\Windows\System32\drivers\etc 在hosts文件中添加主機及備機的IP地址及電腦 ...
一、環境準備
假設有兩台伺服器:
註意事項:
1)所有伺服器的Erlang及RabbitMQ版本必須一樣。
2)伺服器名大小寫敏感。
二、開始搭建
2.1、設置hosts文件
路徑如下:C:\Windows\System32\drivers\etc
在hosts文件中添加主機及備機的IP地址及電腦名。需要註意的是:主機及備機都要設。
2.2、開啟集群埠
假如您的主機及備機都沒有開啟防火牆,2.2可以略過;若開啟了防火牆,需要在開啟了防火牆的伺服器上的入站規則中添加以下3個埠:
1)15672是管理界面使用的埠;
2)25672是集群之間使用的埠;
3)4369是Erlang進程epmd用來做node連接的埠。
下麵以建15672埠為例,其它的原理是一樣的:
2.2.1、控制面板\所有控制面板項\Windows 防火牆->高級設置->入站規則。
2.2.2、右鍵新建規則->選擇埠->下一步。
2.2.3、在特定本地埠中輸入埠號15672->下一步。
2.2.4、下一步。
2.2.5、下一步。
2.2.6、輸入名稱,如15672->完成。
3、設置Cookie
由於RabbitMQ的集群是依附於Erlang的集群來工作的,所以必須先構建起Erlang的集群鏡像。Erlang的集群中各節點是經由過程一個magic cookie來實現的,這個cookie存放在C:\Users\管理員用戶\.erlang.cookie中(如本機使用的是Administartor用戶,存放的路徑在於C:\Users\Administartor\.erlang.cookie中),另外在Windows系統中,在C:\Windows目錄下也有一個.erlang.cookie(不同版本存放的路徑略有不同,3.8.3版本存放的路徑在於C:\Windows\System32\config\systemprofile下),兩個是一樣的,各個節點的這兩個文件必須要保持一致。
3.1、複製主機cx168下的.erlang.cookie文件,將備機cx165中的兩個.erlang.cookie文件替換掉。
3.2、主機及備機的RabbitMQ服務都分別重啟一下。
4、加入集群
在備機的RabbitMQ Command Prompt (sbin dir)中,執行以下命令:
rabbitmqctl stop_app
rabbitmqctl reset
rabbitmqctl join_cluster rabbit@cx168 --ram
rabbitmqctl start_app
註:上面是將備機cx165添加到主機cx168集群中,備機是以ram節點的方式加入。假如想改成disc節點,可以使用以下命令修改:
rabbitmqctl stop_app
rabbitmqctl change_cluster_node_type --disc
rabbitmqctl start_app
5、查看集群信息
現在登錄一下備機cx165的管理界面(如下圖),可以看到:
1)右上角的集群已經由cx165變成了cx168;
2)節點Nodes出現了主機cx168及備機cx165;
3)主機cx168上的信息已全部同步到備機cx165,如用戶信息等。
也可以使用命令查看集群信息:
rabbitmqctl cluster_status
6、集群註意事項
1)集群中至少要有一個disc類型的節點,這樣關於集群的配置才是有效的;
2)僅當集群中disc類型的節點處於運行狀態時,對集群相關配置的修改才是有效的(disc代表磁碟節點,ram代表記憶體節點);
3)集群在運行時,如果disc節點突然宕掉,此時其它的ram節點仍然能夠繼續提供服務,但若此時所有的ram節點也都宕掉,則在disc節點未啟動的情況下,ram節點無法啟動,因為所有的配置都保存在disc節點下麵,啟動時,需要從該類型節點讀取對應的配置。
4)RabbitMQ集群中,節點之間的exchange是在各個節點都有一份的,但是消息隊列queue只存在對應的接收節點上面,其它節點不存儲。如果該接收節點宕掉,那麼接收到的消息隊列可能會丟失。
7、 集群其它命令
7.1、退出集群
rabbitmqctl stop_app
rabbitmqctl reset
rabbitmqctl start_app