1、首先安装带有图形化界面的RabbitMQ,否则无法通过Web端网页观察消息队列状态信息。
有疑问的可以参考:
https://blog.csdn.net/qq_37686944/article/details/104378966
2、搭建RabbitMQ集群
参考:https://www.cnblogs.com/vipstone/p/9362388.html
docker run -d --hostname rabbit1 --name myrabbit1 -p 15672:15672 -p 5672:5672 -e RABBITMQ_ERLANG_COOKIE='rabbitcookie' 镜像ID/名称
docker run -d --hostname rabbit2 --name myrabbit2 -p 5673:5672 --link myrabbit1:rabbit1 -e RABBITMQ_ERLANG_COOKIE='rabbitcookie' 镜像ID/名称
docker run -d --hostname rabbit3 --name myrabbit3 -p 5674:5672 --link myrabbit1:rabbit1 --link myrabbit2:rabbit2 -e RABBITMQ_ERLANG_COOKIE='rabbitcookie' 镜像ID/名称
这里解释下 --hostname rabbit1 是指创建后集群内的第一个节点名为rabbit , --name 是容器名 ,使用–link 进行容器之间互连 ,!注意! 第二个节点容器和第一个相连,第三个则是都要连。最后这个RABBITMQ_ERLANG_COOKIE是设置节点间通信的钥匙,要保持一致。
3、启动后进入容器配置
docker exec -it myrabbit1 bash
rabbitmqctl stop_app
rabbitmqctl reset
rabbitmqctl start_app
exit
docker exec -it myrabbit2 bash
rabbitmqctl stop_app
rabbitmqctl reset
rabbitmqctl join_cluster rabbit@rabbit1
rabbitmqctl start_app
exit
docker exec -it myrabbit3 bash
rabbitmqctl stop_app
rabbitmqctl reset
rabbitmqctl join_cluster --ram rabbit@rabbit1
rabbitmqctl start_app
exit
–ram表示内存节点,而不加表示磁盘节点,可以选择两磁盘一内存或者一磁盘两内存,这里选择前一种
4、配置RABBITMQ_ERLANG_COOKIE,保持一致
通过docker logs 容器ID,可以看到
这是容器1的目录,把这个文件夹都拷贝出来后复制给其他容器:
首先建立主机目录,对于myrabbit1的容器ID:
docker cp 容器ID:/var/lib/rabbitmq/. 主机目录
拷贝出来后通过 ls -a 发现文件夹里有一个隐藏文件.erlang.cookie,把它拷贝到其他容器中,
即对于myrabbit2 , myrabbit3的容器ID:
docker cp 主机目录/.erlang.cookie 容器ID:/var/lib/rabbitmq/
到这里普通的集群就配置完成了!但是还没有结束…
5、查看集群状态
进入容器1,可以看到节点信息
rabbitmqctl cluster_status
6、镜像队列完成HA
参考地址:https://www.cnblogs.com/TimeMaster/p/7069073.html
首先要说的是,如果当前用户名 / 密码为guest / guest 的,建议修改下,否则可能会出现问题
# 先添加个用户
rabbitmqctl add_user 新用户名 新密码
# 然后可以选择把原来那个删了
rabbitmqctl delete_user 原来的用户名,即guest
# 查看用户组,发现新增用户没有权限,TAG=[]
rabbitmqctl list_users
# 授权
rabbitmqctl set_user_tags 新用户名
通过你的Linux服务器 ip:15672 打开图形化界面,在这里调整规则参数
进入后
在Pattern可以用 .* 匹配为所有队列作镜像,我没有配好像也没发现问题
ha-mode 表示为所有的节点队列作镜像
ha-sync-mode 表示设置节点间队列数据同步,如果不设置会出现不同步
当你完成了这一步,那么恭喜你完成了高可用,如果一个或者两个节点掉了,第三个节点也能完成数据接收,在前两个节点恢复后,第三个节点也能迅速地同步数据到前两个节点。