rabbitmq集群搭建,鏡像隊列搭建


原文地址:https://www.jianshu.com/p/11963564dd3d

教你如何從0開始搭建rabbitmq集群

一、准備工作

1、三台centos虛擬機
2、三台虛擬機都安裝了docker
3、假設三台虛擬機的ip是192.168.2.128,192.168.2.129,192.168.2.130

二、搭建rabbitmq集群

1、3台機子分別配置host文件

vim /etc/hosts
填入內容:
192.168.2.128 rabbit1
192.168.2.129 rabbit2
192.168.2.130 rabbit3
host文件

2、運行rabbit容器

在rabbit1機器運行
docker run -d --hostname rabbit1 --net=host --name myrabbit1 -p 4369:4369 -p 15672:15672 -p 5672:5672 -e RABBITMQ_ERLANG_COOKIE='rabbitcookie' rabbitmq:3.6.15-management
在rabbit2機器運行
docker run -d --hostname rabbit2 --net=host --name myrabbit2 -p 4369:4369 -p 15672:15672 -p 5672:5672 -e RABBITMQ_ERLANG_COOKIE='rabbitcookie' rabbitmq:3.6.15-management
在rabbit3機器運行
docker run -d --hostname rabbit3 --net=host --name myrabbit3 -p 4369:4369 -p 15672:15672 -p 5672:5672 -e RABBITMQ_ERLANG_COOKIE='rabbitcookie' rabbitmq:3.6.15-management

3、加入集群

在rabbit2機器執行命令

rabbitmqctl stop_app 
rabbitmqctl reset
rabbitmqctl join_cluster rabbit@rabbit1
rabbitmqctl start_app
exit

在rabbit3機器執行命令

rabbitmqctl stop_app 
rabbitmqctl reset
rabbitmqctl join_cluster rabbit@rabbit1
rabbitmqctl start_app
exit

進入 192.168.2.130:15672 查看狀態賬號密碼是guest/guest
rabbitmq集群

如果要摘除節點,在rabbit1機器執行:
docker exec -it myrabbit1 bash
rabbitmqctl forget_cluster_node rabbit@rabbit3
exit

點擊queues,填寫隊列名,然后新增一個隊列
新增隊列
此時隊列內容沒冗余,只存在rabbit1中,當rabbit1的隊列服務掛了,此隊列也不可用了。
在rabbit1機器執行
docker stop myrabbit1

再查看管理台
管理台
隊列

三、創建鏡像隊列

重新啟動rabbit1
docker start myrabbit1
新建2個隊列extqueue和nodesqueue
新建隊列

rabbitmqctl set_policy [-p ] [--priority ] [--apply-to ]

指令參數詳情
參數名稱 描述
-p 可選參數,針對指定 vhost 下的exchange或 queue
--priority 可選參數,policy 的優先級
--apply-to 可選參數,策略適用的對象類型,其值可為 "queues", "exchanges" 或 "all".默認是"all"
name policy 的名稱
pattern 匹配模式(正則表達式)
definition 鏡像定義,json 格式,包括三部分(ha-mode,ha-params,ha-sync-mode)具體配置見下表
definition參數詳情

參數名稱 描述
ha-mode 指名鏡像隊列模式,其值可為"all","exactly"或"nodes",all:表示在集群所有節點上進行鏡像;exactly:表示在指定個數的節點上鏡像,節點個數由 ha-params 指定;nodes:表示在指定節點上進行鏡像,節點名稱通過ha-params 指定。
ha-params ha-mode模式需要用到的參數:exactly 模式下為數字表述鏡像節點數,nodes 模式下為節點列表表示需要鏡像的節點。
ha-sync-mode 鏡像隊列中消息的同步方式,其值可為"automatic"或"manually".

例子:要對規則是^ext*的隊列增加鏡像隊列,一共是2個隊列
docker exec -it myrabbit1 bash
rabbitmqctl set_policy --apply-to queues extpolicy "^ext*" '{"ha-mode":"exactly","ha-params":2,"ha-sync-mode":"automatic"}'
exit

例子:要對規則是^nodes*的隊列增加鏡像隊列,分別在rabbit@rabbit2和rabbit@rabbit3兩台服務器上鏡像
docker exec -it myrabbit1 bash
rabbitmqctl set_policy --apply-to queues nodespolicy "^nodes*" '{"ha-mode":"nodes","ha-params":["rabbit@rabbit2","rabbit@rabbit3"],"ha-sync-mode":"automatic"}'
exit

linux命令

效果

extqueue
可以看到都匹配到對應的規則,有1個冗余的隊列。
此時我們把rabbit2停掉看一看效果;
在rabbit2的機器上執行
docker stop myrabbit2
集群全集
nodesqueue
nodesqueue隊列依舊工作
extqueue
extqueue隊列的鏡像隊列換了一個。


免責聲明!

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



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