一、环境规划和初始化
1、环境规划
主机名 | 服务器IP | 应用程序 | 模式 |
RabbitMQ01 | 192.168.66.140 | RebbitMQ | 磁盘节点、管理节点 |
RabbitMQ02 | 192.168.66.141 | RebbitMQ | 内存节点 |
RabbitMQ03 | 192.168.66.142 | RebbitMQ | 内存节点 |
HAProxy | 192.168.66.143 | HAProxy | 集群负载均衡 |
2、配置主机名
- 所有节点执行,注意主机名不要太长,后面创建集群时有可能会因为主机名称太长导致加入集群失败
[root@localhost ~]# hostnamectl set-hostname xxxx
3、关闭防护墙
systemctl stop firewalld && systemctl disable firewalld && systemctl status firewalld
systemctl stop NetworkManager && systemctl disable NetworkManager && systemctl status NetworkManager
4、关闭SELinux
sed -ri 's/SELINUX=enforcing/SELINUX=disabled/' /etc/selinux/config
setenforce 0 && getenforce
二、RabbitMQ集群部署
集群模式
- RabbitMQ 的 Cluster 集群模式一般分为两种,普通模式和镜像模式。
普通模式:默认的集群模式,以两个节点(rabbit01、rabbit02)为例来进行说明。对于 Queue 来说,消息实体只存在于其中一个节点 rabbit01(或者 rabbit02),rabbit01 和 rabbit02 两个节点仅有相同的元数据,即队列的结构。当消息进入 rabbit01 节点的 Queue 后,consumer 从 rabbit02 节点消费时,RabbitMQ 会临时在 rabbit01、rabbit02 间进行消息传输,把 A 中的消息实体取出并经过 B 发送给 consumer。所以 consumer 应尽量连接每一个节点,从中取消息。即对于同一个逻辑队列,要在多个节点建立物理 Queue。否则无论 consumer 连 rabbit01 或 rabbit02,出口总在 rabbit01,会产生瓶颈。当 rabbit01 节点故障后,rabbit02 节点无法取到 rabbit01 节点中还未消费的消息实体。如果做了消息持久化,那么得等 rabbit01 节点恢复,然后才可被消费;如果没有持久化的话,就会产生消息丢失的现象。
镜像模式:将需要消费的队列变为镜像队列,存在于多个节点,这样就可以实现 RabbitMQ 的 HA 高可用性。作用就是消息实体会主动在镜像节点之间实现同步,而不是像普通模式那样,在 consumer 消费数据时临时读取。缺点就是,集群内部的同步通讯会占用大量的网络带宽。
节点类型
RAM node:内存节点将所有的队列、交换机、绑定、用户、权限和 vhost 的元数据定义存储在内存中,好处是可以使得像交换机和队列声明等操作更加的快速。
Disk node:将元数据存储在磁盘中,单节点系统只允许磁盘类型的节点,防止重启 RabbitMQ 的时候,丢失系统的配置信息。
RabbitMQ 要求在集群中至少有一个磁盘节点,所有其他节点可以是内存节点,当节点加入或者离开集群时,必须要将该变更通知到至少一个磁盘节点。如果集群中唯一的一个磁盘节点崩溃的话,集群仍然可以保持运行,但是无法进行其他操作(增删改查),直到节点恢复。
认证方式
通过Erlang Cookie,相当于共享秘钥的概念,长度任意,只要所有节点都一致即可。rabbitmq server在启动的时候,erlang VM会自动创建一个随机的cookie文件。cookie文件的位置: /var/lib/rabbitmq/.erlang.cookie 或者/root/.erlang.cookie。我们的为保证cookie的完全一致,采用从一个节点copy的方式,实现各个节点的cookie文件一致。
1、HOST解析
- 在部署之前需要确保RebbitMQ各节点可以通过主机名解析
cat >> /etc/hosts <<EOF
192.168.66.140 rabbitmq01
192.168.66.141 rabbitmq02
192.168.66.142 rabbitmq03
EOF
2、安装依赖
- 所有节点都需要安装
wget https://github.com/rabbitmq/erlang-rpm/releases/download/v23.3.4.8/erlang-23.3.4.8-1.el7.x86_64.rpm
yum install erlang-23.3.4.8-1.el7.x86_64.rpm -y
3、安装服务
- 所有节点都需要安装
#加速下载地址
wget https://github.91chifun.workers.dev/https://github.com//rabbitmq/rabbitmq-server/releases/download/v3.9.8/rabbitmq-server-3.9.8-1.el7.noarch.rpm
#yum安装服务
yum install rabbitmq-server-3.9.8-1.el7.noarch.rpm -y
三、R原文链接:https://dqzboy.com abbitMQ集群组建
1、集群启动
- 所有节点执行以下操作,启动集群;都需要先启动服务,让其生成
.e
文件原文链接:https://dqzboy.com rlang.cookie
systemctl start rabbitmq-server.service
2、同步文件
- 同步
.erlang.cookie
文件;该文件在安装了RebbitMQ后会在机器上随机生成 将rebbitmq01节点的.erlang.cookie文件同步给其他节点,注意同步之后检查文件的权限
#拷贝文件之前,先把节点2和3上的rabbitmq服务停止
systemctl stop rabbitmq-server.service
scp /var/lib/rabbitmq/.erlang.cookie root@rabbitmq02:/var/lib/rabbitmq/
scp /var/lib/rabbitmq/.erlang.cookie root@rabbitmq03:/var/lib/rabbitmq/
#拷贝过去之后节点2和3一定要重新启动服务,然后再进行加入集群
systemctl restart rabbitmq-server.service
3、加入集群
- rebbitmq02和rebbitmq03节点加入rebbitmq01集群
- 以下操作在rebbitmq02和rebbitmq03节点上分别执行
注意:默认是磁盘节点,如果是内存节点的话,需要加--ram参数
rabbitmqctl stop_app
# --ram是以内存方式加入
rabbitmqctl join_cluster --ram rabbit@rabbitmq01
rabbitmqctl start_app

4、验证集群
- 在任意节点上执行下面的命令查看集群状态
rabbitmqctl cluster_status

5、安装可视化
- 所有节点都安装,这样界面才会显示收集到的数据,安装完成后通过
IP:15672
进行访问
rabbitmq-plugins enable rabbitmq_management
- 账号、密码,默认为
guest

6、创建账号
- 只需要在任意节点上执行即可
(1)添加一个新的/新用户,比如admin和密码admin
rabbitmqctl add_user admin admin
(2)为新用户授予管理访问权限:
rabbitmqctl set_user_tags admin administrator
(3)为新创建的用户设置权限:
rabbitmqctl set_permissions -p / admin ".*" ".*" ".*"
(4)再次访问页面,输入上面创建的账号密码就可以正常登入进去了

四、RabbitMQ镜像模式
[root@rabbitmq01 ~]# rabbitmqctl set_policy ha-all "^" '{"ha-mode":"all"}'
- 参数详细介绍:
- ha-all:为策略名称
- ^:为匹配符,只有一个 ^ 代表匹配所有
- ha-mode:为匹配类型,他分为 3 种模式:
all
:所有(所有的 queue),exctly
:部分,nodes
:指定
五、RabbitMQ集群负载
1、HAProxy安装
- 单独部署在一台服务器上,通过如下命令即可安装完成!
yum install haproxy
2、HAProxy配置
vim /etc/haproxy/haproxy.cfg
我们只需要在文件末尾加上如下配置即可!将默认配置文件中global和defaults保留之外,其他的默认配置删除掉
##监控查看本地状态#####
listen admin_stats
bind *:80
mode http
option httplog
option httpclose
log 127.0.0.1 local0 err
stats uri /haproxy
stats auth admin:admin #登录haproxy的用户名和密码
###反代监控
frontend server
bind *:5670
log global
mode tcp
default_backend rabbitmq
maxconn 3
backend rabbitmq
mode tcp
log global
balance roundrobin
server rabbitmq1 192.168.66.140:5672 check inter 2000s rise 2 fall 3
server rabbitmq2 192.168.66.141:5672 check inter 2000s rise 2 fall 3
server rabbitmq3 192.168.66.142:5672 check inter 2000s rise 2 fall 3
3、HAProxy访问
#启动服务
systemctl start haproxy
systemctl enable haproxy
- 浏览器输入:
192.168.66.143:80
访问;账号密码admin
