rabbitmq集群搭建,這里我們采用docker的方式來進行搭建,確定安裝了docker環(huán)境
1.拉取鏡像
docker pull rabbitmq:3.6.15-management
2.創(chuàng)建rabbitmq容器
創(chuàng)建rabbitmq容器1:
docker run -d --hostname rabbit1 --name myrabbit1 -p 15672:15672 -p 5672:5672 -e RABBITMQ_ERLANG_COOKIE='rabbitcookie' rabbitmq:3.6.15-management
創(chuàng)建rabbitmq容器2:
docker run -d --hostname rabbit2 --name myrabbit2 -p 15673:15672 -p 5673:5672 --link=myrabbit1:rabbit1 -e RABBITMQ_ERLANG_COOKIE='rabbitcookie' rabbitmq:3.6.15-management
執(zhí)行成功后如下圖
解釋:
--link <name or id>:alias
其中,name和id是源容器的name和id,alias是源容器在link下的別名。
--link 用于在容器中進行通信的時候需要使用到的。
-e RABBITMQ_ERLANG_COOKIE='rabbitcookie'
其中 -e 設(shè)置環(huán)境變量 變量名為:RABBITMQ_ERLANG_COOKIE 值為:rabbitcookie 該值可以任意。
但是一定要注意,兩個容器的cookie值一定要一樣才行。他的作用用于發(fā)現(xiàn)不同的節(jié)點,并通過該cookie進行自動校驗和通信使用。
--hostname rabbit2
其中:--hostname 用于設(shè)置容器內(nèi)部的hostname名稱,如果不設(shè)置,那就會自動隨機生成一個hostname字,如下圖。
這里一定要設(shè)置。因為rabbitmq的節(jié)點數(shù)據(jù)進行通信加入集群的時候需要用hostname作為集群名稱。
?3.配置rabbitmq集群
這里我們使用 集群名 rabbit@rabbit1 ,將節(jié)點2 加入到節(jié)點1號中。
3.1配置rabbit1
進入到myrabbit1容器內(nèi)部
docker exec -it myrabbit1 bash
配置節(jié)點
rabbitmqctl stop_app
rabbitmqctl reset
rabbitmqctl start_app
exit
執(zhí)行如下圖:
rabbitmqctl stop_app ?--- 表示關(guān)閉節(jié)點
rabbitmqctl reset ? ? --- 重新設(shè)置節(jié)點配置
rabbitmqctl start_app --- 重新啟動 (此處不需要設(shè)置 ,將該節(jié)點作為集群master,其他節(jié)點加入到該節(jié)點中)
exit ---退出容器
3.2配置rabbit2
進入到myrabbit2容器內(nèi)部
docker exec -it myrabbit2 bash
配置節(jié)點
rabbitmqctl stop_app
rabbitmqctl reset
rabbitmqctl join_cluster --ram rabbit@rabbit1
rabbitmqctl start_app
exit
執(zhí)行如下圖:
?解釋:
rabbitmqctl join_cluster --ram rabbit@rabbit1
-- ?用于將該節(jié)點加入到集群中 ?
-- ?ram ? 設(shè)置為內(nèi)存存儲,默認(rèn)為 disc 磁盤存儲,如果為磁盤存儲可以不用配置ram
-- rabbit@rabbit1 ? 該 配置 為節(jié)點集群名稱:集群名稱為:rabbit@server ?而server指定就是hostname的名稱。
配置完成,打開web管理界面http://機器IP:15672,賬密guest/guest,如下圖所示:
?4.配置鏡像隊列
如上,我們已經(jīng)搭建好了集群,但是并不能做到高可用,所以需要配置升級為鏡像隊列。
在任意的節(jié)點(A或者B)中執(zhí)行如下命令:
rabbitmqctl set_policy ha-all "^" '{"ha-mode":"all"}'
執(zhí)行正確如下圖
?解釋:
rabbitmqctl set_policy?
?? ?用于設(shè)置策略
ha-all?
?? ?表示設(shè)置為鏡像隊列并策略為所有節(jié)點可用 ,意味著 隊列會被(同步)到所有的節(jié)點,當(dāng)一個節(jié)點被加入到集群中時,也會同步到新的節(jié)點中,此策略比較保守,性能相對低,對接使用半數(shù)原則方式設(shè)置(N/2+1),例如:有3個結(jié)點 此時可以設(shè)置為:ha-two 表示同步到2個結(jié)點即可。
"^" ?表示針對的隊列的名稱的正則表達式,此處表示匹配所有的隊列名稱
'{"ha-mode":"all"}' 設(shè)置一組key/value的JSON 設(shè)置為高可用模式 匹配所有exchange
此時查看web管理界面:添加一個隊列test_queue,如下圖已經(jīng)可以出現(xiàn)結(jié)果為有一個結(jié)點,并且是ha-all模式(鏡像隊列模式)文章來源:http://www.zghlxwxcb.cn/news/detail-429280.html
文章來源地址http://www.zghlxwxcb.cn/news/detail-429280.html
到了這里,關(guān)于RabbitMQ集群搭建(Docker環(huán)境)的文章就介紹完了。如果您還想了解更多內(nèi)容,請在右上角搜索TOY模板網(wǎng)以前的文章或繼續(xù)瀏覽下面的相關(guān)文章,希望大家以后多多支持TOY模板網(wǎng)!