Windows下的RabbitMQ安裝:集群與鏡像


RabbitMq本身支持集群,但其本身並不支持負載均衡。

說一下我自己的理解:

RabbitMQ的集群分為兩種模式:默認模式、鏡像模式

默認模式:

將多個service連接在一起,變成一個集群,可以從任意一台service上生產消息和消費消息,客戶端可以連接任意一個service,如果要生產或者消費的消息不在當前連接的service上,集群會從所在的service上獲取或生產消息。

當一個service意外停止后,再向這個server生產或消費消息則會報錯。

鏡像模式:

鏡像模式是在默認模式上增加,創建鏡像后會根據鏡像的規則將一個消息復制到所有的集群上,消息被確認后所有集群上的消息會被清除掉,不會重復消費。(queues在哪個service上哪個service就是主節點)

當主service意外停止后,RabbitMQ會從集群中提出一個創立時間最早的子節點作為主節點,當service重新加入集群后會變為從節點。

主節點停止后,從節點變為主節點,這個轉換的時間內如果生產新的消息會丟失。

鏡像模式相對於默認模式的一點弊端是浪費帶寬,鏡像模式的消息在集群中復制會浪費帶寬,默認模式則是在消費或生產消息時在集群內部傳輸。

windows上配置RabbitMQ集群+鏡像

Erlang的集群中各節點是經由過程一個magic cookie來實現的,兩台服務器上的cookie要一致,把主服務器的cookie放到其他從服務器上。cookie存放位置為:

C:\Users\用戶名\.erlang.cookie

C:\Windows\System32\config\systemprofile\.erlang.cookie

一、修改Host文件

測試使用兩台windows server 2008 R2虛擬機,ip分別為192.168.174.128,192.168.174.129

首先找到兩台的節點名稱,登陸后右上角有展示。

 

兩台機器的host都增加

二、修改rabbitmq.config文件,增加集群節點。(不是安裝目錄)

安裝目錄下的Readme.txt有指明config存放位置,默認沒有config文件,將rabbitmq.config.example復制一份重命名成rabbitmq.config

C:\Users\用戶名\AppData\Roaming\RabbitMQ\rabbitmq.config

config文件內容類似於Json的格式,找到cluster_nodes節點,去掉前邊兩個百分號,(百分號是注釋)修改內容為(去掉后邊的逗號):

{cluster_nodes,['rabbit@WIN-3CT43O6NT2I','rabbit@WIN-JHVN0BHLM7L']}

注:捎帶寫一下修改Rabbit默認端口號。(公司機房固定某幾個端口可訪問,所以要改默認端口號)

找到tcp_listeners去掉前邊百分號改為{tcp_listeners, [8080]};(參照Json格式的寫法,如果只修改端口號則去掉后邊的逗號“,”;如果修改端口號后邊還有其他節點修改則要加上結尾的逗號,最后一個節點不加逗號)

下圖是刪除config注釋后的文件內容:

注:網上有的文章說要添加rabbitmq-env.conf文件,我用的這個版本不用添加這個文件(測試過了),其余版本不清楚。

三、增加集群節點

cd 到安裝目錄的sbin文件下執行命令,添加集群節點(開始菜單Rabbit有cmd命令行工具)

rabbitmqctl stop_app  //停止 

rabbitmqctl reset// 此命令不執行也行,此命令是清除所有節點,類似於恢復出廠設置,清除報錯可以強制清除 rabbitmqctl force_reset;強制清除會將Rabbit恢復成初始狀態,Cluster名稱也會變,需要重新配置集群;

rabbitmq-service.bat install //重新安裝服務,這時才會重新加載config文件 

rabbitmqctl join_clusterrabbit@USER-20160306SN  //添加集群節點;其中一台服務器執行就可以,大概意思是將兩個Rabbit創建成集群

rabbitmqctl start_app  //啟動

至此RabbitMQ的集群就設置好了,登陸任意一個web管理端可以看到這個集群

注:如果要一個子節點退出集群要在子節點上執行

rabbitmqctl stop_app  //停止 

rabbitmqctl reset

rabbitmq-service.bat install //重新安裝服務,這時才會重新加載config文件

rabbitmqctl start_app  //啟動

在主節點上執行

rabbitmqctl forget_cluster_node rabbit@USER-20160306SN

注:RABBITMQ集群重啟

集群重啟時,最后一個掛掉的節點應該第一個重啟,如果因特殊原因(比如同時斷電),而不知道哪個節點最后一個掛掉。可用以下方法重啟:

先在一個節點上執行

rabbitmqctl force_boot

service rabbitmq-server start

在其他節點上執行

service rabbitmq-server start

查看cluster狀態是否正常(要在所有節點上查詢)。

rabbitmqctl cluster_status

四、創建鏡像

登陸web管理平台,點擊admin,點擊Policies,創建鏡像,選擇VirtualHost,填寫名稱 Pattarn填寫^表示鏡像全部,可以填寫其他內容,正則表達式的方式例:^ra則匹配ra開頭的Queues;

Definiton需要填寫兩個:Ha model=all(鏡像全部queues)Ha sync mode=automatic(集群掉線重啟后自動同步,不設置需要手動同步)

priority優先級,數字越大表示優先級越高。默認值為0

 

添加完之后鏡像就創建好了。

參考信息:

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM