假設有兩台伺服器:
注意事項:
1)所有伺服器的erlang及rabbitmq版本必須一樣。
2)伺服器名大小寫敏感。
2.1、設定hosts檔案
路徑如下:c:\windows\system32\drivers\etc
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 reset
rabbitmqctl join_cluster rabbit@cx168 --ram
注:上面是將備機cx165新增到主機cx168集群中,備機是以ram節點的方式加入。假如想改成disc節點,可以使用以下命令修改:
rabbitmqctl change_cluster_node_type --disc
5、檢視集群資訊
現在登入一下備機cx165的管理介面(如下圖),可以看到:
1)右上角的集群已經由cx165變成了cx168;
2)節點nodes出現了主機cx168及備機cx165;
3)主機cx168上的資訊已全部同步到備機cx165,如使用者資訊等。
也可以使用命令檢視集群資訊:
rabbitmqctl cluster_status6、集群注意事項
1)集群中至少要有乙個disc型別的節點,這樣關於集群的配置才是有效的;
2)僅當集群中disc型別的節點處於執行狀態時,對集群相關配置的修改才是有效的(disc代表磁碟節點,ram代表記憶體節點);
3)集群在執行時,如果disc節點突然宕掉,此時其它的ram節點仍然能夠繼續提供服務,但若此時所有的ram節點也都宕掉,則在disc節點未啟動的情況下,ram節點無法啟動,因為所有的配置都儲存在disc節點下面,啟動時,需要從該型別節點讀取對應的配置。
4)rabbitmq集群中,節點之間的exchange是在各個節點都有乙份的,但是訊息佇列queue只存在對應的接收節點上面,其它節點不儲存。如果該接收節點宕掉,那麼接收到的訊息佇列可能會丟失。
7、 集群其它命令
7.1、退出集群
rabbitmqctl reset
C 佇列學習筆記 RabbitMQ優先順序佇列
在具體業務中可能會遇到一些要提前處理的訊息,比如普通客戶的訊息按先進先出的順序處理,vip客戶的訊息要提前處理。在rabbitmq中,訊息優先順序的實現方式是 在宣告queue時設定佇列的x max priority屬性,然後在publish訊息時,設定訊息的優先順序即可。rabbitmq優先順序佇...
訊息佇列RabbitMQ學習筆記之簡單的訊息收發
佇列名稱 final string queue name rabbitmq test connection是socket連線的抽象,並且為我們管理協議版本協商 protocol version negotiation 認證 authentication 等等事情。connectionfactory ...
c 學習筆記 佇列
標頭檔案 include 定義 queue typename name typename為任意資料型別,name為所定義佇列名常用函式 函式名返回值q.empty 判斷佇列是否為空 q.size 返回當前佇列元素個數 q.pop 刪除隊首元素 q.push x 向隊尾新增元素 q.front 返回隊...