接上一篇:(企业级) RabbitMQ 普通集群配置_04
文章目录
- 一、RabbitMQ 策略实战
- 1. 创建RabbitMQ 策略
- 2. ly-01节点查看创建RabbitMQ 策略
- 3. 登录ly-02管控台查看创建RabbitMQ 策略
- 4. 登录ly-03管控台查看创建RabbitMQ 策略
- 二、添加队列测试
- 2.1. 添加队列
- 2.2. Queues菜单-查看添加队列
- 2.3.创建消息
- 2.4. 查看创建的消息
- 2.5. 登录ly-02节点查看创建的消息
- 2.6. 登录ly-03节点查看创建的消息
- 三、破坏性测试 ①
- 3.1. 将ly-01节点的服务关闭
- 3.2. 浏览器验证ly-01节点是否停止
- 3.3. 登录ly-02节点管控台查看消息
- 3.4. 登录ly-03节点管控台查看消息
- 四、破坏性测试 ②
- 4.1. 再将ly-02节点的服务关闭
- 4.2. 浏览器验证ly-02节点是否停止
- 4.3. 登录ly-03管控台
- 4.4. 将ly-01和ly-02的服务再启动起来
- 4.5. 分别登陆3个节点查看消息
- 4.5. 消息同步
- 4.6. 分别登录3个节点查看消息状态
- 五、RabbitMQ 集群脚本
- 5.1. 创建host.info
- 5.2. 编写批量执行命令脚本
- 5.3. 编写批量执行脚本头文件
- 5.4. bash 运行脚本
- 5.5. 赋予脚本可执行权限
- 5.6. 运行脚本
上一篇已经完成RabbitMQ默认集群模式,但并不保证队列的高可用性,尽管交换机、绑定这些可以复制到集群里的任何一个节点,但是队列内容不会复制。虽然该模式解决一项目组节点压力,但队列节点宕机直接导致该队列无法应用,只能等待重启,所以要想在队列节点宕机或故障也能正常应用,就要复制队列内容到集群里的每个节点,必须要创建镜像队列。
镜像队列是基于普通的集群模式
的,然后再添加一些策略,所以你还是得先配置普通集群,然后才能设置镜像队列
,我们就以上面的集群接着做。
一、RabbitMQ 策略实战
设置的镜像队列可以通过开启的网页的管理端,也可以通过命令,建议通过web管控台进行设置,简单高效,效果清晰直观!
1. 创建RabbitMQ 策略
在ly-01节点的控制台上创建策略
(1)点击【admin菜单】–>右侧的【Policies选项】–>左侧最下下边的【Add/update a policy】
(2)按照图中的内容根据自己的需求填写
(3)点击Add policy添加策略
2. ly-01节点查看创建RabbitMQ 策略
3. 登录ly-02管控台查看创建RabbitMQ 策略
如图所示:
4. 登录ly-03管控台查看创建RabbitMQ 策略
如图所示:
二、添加队列测试
在ly-01节点的控制台操作如下:
2.1. 添加队列
(1)点击【Queues菜单】–>左侧下边的【Add a new queue】
(2)输入Name和Arguments参数
的值,别的值默认即可
(3)点击Add queue
2.2. Queues菜单-查看添加队列
将鼠标指向+2可以显示出另外两台消息节点
2.3.创建消息
(1)点击ab队列
按钮
(2)拖动滚动条,点击publish message
(3)填写相关内容
(4)点击Publish message
按钮
2.4. 查看创建的消息
点击Queues按钮,发现ab队列的Ready和Total中多了一条消息记录
2.5. 登录ly-02节点查看创建的消息
2.6. 登录ly-03节点查看创建的消息
三、破坏性测试 ①
3.1. 将ly-01节点的服务关闭
再通过ly-02和ly-03查看消息记录是否还存在。
rabbitmqctl stop_app //停掉ly-01的rabbit应用
- ly-01节点操作记录
[root@ly-01 ~]# rabbitmqctl stop_app
Stopping rabbit application on node rabbit@ly-01 ...
[root@ly-01 ~]#
3.2. 浏览器验证ly-01节点是否停止
3.3. 登录ly-02节点管控台查看消息
3.4. 登录ly-03节点管控台查看消息
从中可以看到ab队列已经从之前的+2显示成+1了,而且消息记录是存在的。
四、破坏性测试 ②
4.1. 再将ly-02节点的服务关闭
通过ly-03查看消息记录是否还存在。
rabbitmqctl stop_app //停掉ly02的rabbit应用
ly-02节点操作中记录
[root@ly-02 ~]# rabbitmqctl stop_app
Stopping rabbit application on node rabbit@ly-02 ...
[root@ly-02 ~]#
4.2. 浏览器验证ly-02节点是否停止
4.3. 登录ly-03管控台
从中可以看到ab队列和消息记录还是存在的,只是变成了一个节点了。
4.4. 将ly-01和ly-02的服务再启动起来
rabbitmqctl start_app //启动ly-01、ly-02的rabbit应用
ly-01节点操作中记录
[root@ly-01 ~]# rabbitmqctl start_app
Starting node rabbit@ly-01 ...completed with 3 plugins.
[root@ly-01 ~]
ly-02节点操作中记录
[root@ly-02 ~]# rabbitmqctl start_app
Starting node rabbit@ly-02 ...completed with 3 plugins.
[root@ly-02 ~]#
4.5. 分别登陆3个节点查看消息
从中可以看到ab队列后面+2变成了红色,鼠标指上去显示镜像无法同步ly-01和ly-02节点(Unsynchronous mirrors:rabbit@ly-01,rabbit@ly-02)。如果这时候停掉ly-03节点的服务,那么队列里面的消息将会丢失。
4.5. 消息同步
采取的解决办法是选择在ly-02节点上执行同步命令。
ly-02节点操作中记录
rabbitmqctl sync_queue ab //同步ab队列
[root@ly-02 ~]# rabbitmqctl sync_queue ab
Synchronising queue 'ab' in vhost '/' ...
[root@ly-02 ~]#
4.6. 分别登录3个节点查看消息状态
同步完成后,+2又变成了蓝色。
这样,我们就测试了rabbitmq集群的破坏性测试,说明集群配置成功。
五、RabbitMQ 集群脚本
5.1. 创建host.info
#创建hosts文件
vim host.info
#添加以下内容
#格式: ip地址 用户 端口 密码
192.168.43.242 root 22 root
192.168.43.134 root 22 root
192.168.43.228 root 22 root
5.2. 编写批量执行命令脚本
#创建批量执行命令脚本文件
rabbit_cluster.sh
#添加以下内容
#!/bin/bash
COMMAND=$*
HOST_INFO=host.info
for IP in $(awk '/^[^#]/{print $1}' $HOST_INFO); doUSER=$(awk -v ip=$IP 'ip==$1{print $2}' $HOST_INFO)PORT=$(awk -v ip=$IP 'ip==$1{print $3}' $HOST_INFO)PASS=$(awk -v ip=$IP 'ip==$1{print $4}' $HOST_INFO)expect -c "spawn ssh -p $PORT $USER@$IPexpect {\"(yes/no)\" {send \"yes\r\"; exp_continue}\"password:\" {send \"$PASS\r\"; exp_continue}\"$USER@*\" {send \"$COMMAND\r exit\r\"; exp_continue}}"echo "---------Execute Successful! ----------"
done
5.3. 编写批量执行脚本头文件
#创建批量执行脚本头文件
batch_rabbit_cluster.sh
#添加以下内容
#/!bin/bash
/app/shell_scripts/rabbit_cluster.sh systemctl $1 rabbitmq-server.service
/app/shell_scripts/rabbit_cluster.sh systemctl status rabbitmq-server.service
5.4. bash 运行脚本
#启动RabbitMQ 服务
#格式:bash batch_rabbit_cluster.sh start/stop
bash batch_rabbit_cluster.sh start
#关闭RabbitMQ 服务
bash batch_rabbit_cluster.sh stop
注:没有没有bash权限,请采用下面方式,如果有权限,请跳过!
5.5. 赋予脚本可执行权限
chmod u+x rabbit_cluster.sh
chmod u+x batch_rabbit_cluster.sh
5.6. 运行脚本
#启动RabbitMQ 服务
#格式:./batch_rabbit_cluster.sh start/stop
./batch_rabbit_cluster.sh start
#关闭RabbitMQ 服务
./batch_rabbit_cluster.sh stop