环境准备
主机名 | 主机IP | 主机别名 | 防火墙 |
---|---|---|---|
master | 192.168.130.19 | rq-master | 关闭 |
node1 | 192.168.130.20 | rq-node1 | 关闭 |
node2 | 192.168.130.20 | rq-node2 | 关闭 |
1、每台主机设置对应主机名(这里是master主机)
查看原来主机名
# hostname
localhost.localdomain
设置主机名
# hostnamectl set-hostname master.localdomain
查看命令是否生效
# hostname
master.localdomain
2、每台主机解析地址
vim /etc/hosts
192.168.130.19 master rq-master
192.168.130.20 node1 rq-node1
192.168.130.21 node2 rq-node2
安装rabbitmq单机
mkdir -p /root/rabbitm_sg/data
docker run -d --network=host \
--hostname rq-node --name rq-node \
-v /root/rabbitmq_sg/data:/var/lib/rabbitmq \
-p 15673:15672 -p 5673:5672 \
-e RABBITMQ_ERLANG_COOKIE='helloCookie' \
-e RABBITMQ_DEFAULT_USER=admin \
-e RABBITMQ_DEFAULT_PASS=admin1234 \
rabbitmq:3.7-management
安装rabbitmq集群
1、创建目录(每个节点)
mkdir -p /root/rabbitmq/data
2、各主机容器化运行程序(这里对应master主机)
docker run -d --network=host \
--hostname rq-master --name rq-master \
-v /root/rabbitmq/data:/var/lib/rabbitmq \
-p 15672:15672 -p 5672:5672 \
-e RABBITMQ_ERLANG_COOKIE='helloCookie' \
-e RABBITMQ_DEFAULT_USER=admin \
-e RABBITMQ_DEFAULT_PASS=admin1234 \
rabbitmq:3.7-management
注意:
-v:将宿主机目录/root/rabbitmq/data挂载到容器的/var/lib/rabbitmq目录
RABBITMQ_ERLANG_COOKIE:需要保持一致 内容任意(集群同步需要)
rabbitmq各端口作用:
client端通连接端口:5672
页面管理访问端口: 15672
服务间通信端口:25672
3、加入集群
master
docker exec -it rq-master sh
rabbitmqctl stop_app
rabbitmqctl reset
rabbitmqctl start_app
node1
docker exec -it rq-node1 sh
rabbitmqctl stop_app
rabbitmqctl reset
rabbitmqctl join_cluster --ram rabbit@rq-master
rabbitmqctl start_app
node2
docker exec -it rq-node2 sh
rabbitmqctl stop_app
rabbitmqctl reset
rabbitmqctl join_cluster --ram rabbit@rq-master
rabbitmqctl start_app
rabbitmqctl set_policy ha-all "^" '{"ha-mode":"all"}'
注意:
rabbitmqctl set_policy ha-all “^” ‘{“ha-mode”:“all”}’:(镜像模式)将所有队列mirror到集群中所有节点
已知缺点:(有空再进一步学习,欢迎指教)
目前有一个disk类型节点,两个ram节点,如果disk磁盘的节点关闭了,就需要手动把其中一个ram节点转为disk节点来确保数据持久化
如果加入了新的节点,是否需要同步镜像到新节点
4、检查集群状态
docker exec -it rq-master sh
rabbitmqctl cluster_status
或者:用浏览器打开某个节点:http://192.168.130.19:15672,输入用户名密码(上面设置的)登录后查看Nodes
5、可以利用nginx做负载均衡