文章目录
1 环境准备
两台主机hosts解析
vim /etc/hosts
192.168.9.131 rabbitmq-9-131
192.168.9.132 rabbitmq-9-132
获取软件包
# 1. 修改yum源
curl -o /etc/yum.repos.d/CentOS-Base.repo https://mirrors.aliyun.com/repo/Centos-7.repo
wget -O /etc/yum.repos.d/epel.repo http://mirrors.aliyun.com/repo/epel-7.repo
# 2. 获取erlang依赖包并安装
wget https://github.com/rabbitmq/erlang-rpm/releases/download/v22.3.4.2/erlang-22.3.4.2-1.el7.x86_64.rpm
rpm -ivh erlang-22.3.4.2-1.el7.x86_64.rpm
# 3. 获取rabbitmq安装包
wget https://github.com/rabbitmq/rabbitmq-server/releases/download/v3.8.1/rabbitmq-server-3.8.1-1.el7.noarch.rpm
# 4. 安装rabbitmq如果报错error: Failed dependencies: socat is needed by rabbitmq-server
# 原因是需要socat的组件的支持,yum安装socat即可
yum install socat -y
rpm -ivh rabbitmq-server-3.8.1-1.el7.noarch.rpm
2 配置rabbitmq单节点模式
以 192.168.9.131 为例
# 1. 启动服务
systemctl start rabbitmq-server
# 2. 开启管理插件
rabbitmq-plugins enable rabbitmq_management
# 查看当前所有插件(包括启用和不启用的)
rabbitmq-plugins list
# 3. 重启服务
systemctl restart rabbitmq-server
# 4. 添加用户
rabbitmqctl add_user admin 123456
# 5. 设置用户角色tag
rabbitmqctl set_user_tags admin administrator
# 6. 授权admin用户
rabbitmqctl set_permissions -p / admin '.*' '.*' '.*'
# 7. 配置rabbitmq开机自启
systemctl enable rabbitmq-server
关于角色tag的说明,tags是用户的角色类型,分为5种:
- none: 无任何角色。新创建的用户的角色默认为none
- management: 可以访问 Web 管理页面
- policymaker: 包含management的所有权限,并且可以管理策略和参数
- monitoring: 包含management的所有权限,并且可以看到所有连接、信道及节点相关的信息。
- administartor: 包含monitoring的所有权限,井且可以管理用户、虚拟主机、权限、策略、参数等。 administator代表了最高的权限
对于生产环境中的rabbitmq配置,建议新建一个具有 policymaker
权限的用户
3 配置rabbitmq普通集群
一个集群至少要有一个磁盘节点。一个rabbitmq集群中可以共享user,vhost,exchange等,默认的集群模式,Queue创建之后,如果没有其它Policy
,则queue就会按照普通模式集群。对于Queue来说,消息实体只存在于其中一个节点
,A、B两个节点仅有相同的元数据
,即队列结构
,但队列的元数据仅保存有一份,即创建该队列的rabbitmq节点(A节点),当A节点宕机,你可以去其B节点查看,rabbitmqctl list_queues
会发现该队列已经丢失,但声明的exchange还存在。
普通集群的配置也比较简单,只需要把192.168.9.132
加入到192.168.9.131
集群中就可以,但是有几点需要注意的:
- Rabbitmq的集群是依附于erlang的集群来工作的,所以必须先构建起erlang的集群镜像。erlang的集群中各节点是经过一个magic cookie来实现的,这个cookie存放在
$home/.erlang.cookie
中,如果用rpm安装的,那么.erlang.cookie
就放在/var/lib/rabbitmq/
目录中。 - 复制cookie内容,
erlang.cookie
是erlang实现分布式的必要文件,erlang分布式的每个节点上要保持相同的.erlang.cookie
文件,同时保证文件的权限是400,不然节点之间就无法通信。 - erlang.cookie复制完成后,逐个重启节点服务
192.168.9.132配置
# 1. 启动服务
systemctl start rabbitmq-server
# 2. 开启管理插件
rabbitmq-plugins enable rabbitmq_management
# 查看当前所有插件(包括启用和不启用的)
rabbitmq-plugins list
# 3. 重启服务
systemctl restart rabbitmq-server
# 4. 需要复制cookie内容
scp root@192.168.9.131:/var/lib/rabbitmq/.erlang.cookie /var/lib/rabbitmq/
# 5. 修改属主属组和400权限
chown rabbitmq:rabbitmq /var/lib/rabbitmq/.erlang.cookie
chmod 400 /var/lib/rabbitmq/.erlang.cookie
# 重启两个节点的rabbitmq服务
systemctl restart rabbitmq-server
# 6. 先停止rabbitmq应用,然后重置,再加入集群,开启rabbitmq应用,按顺序执行
rabbitmqctl stop_app
rabbitmqctl reset
# join_cluster可以指定两种节点类型[--disc|--ram]
# 分别是指定磁盘节点类型和指定内存节点类型(性能高)
rabbitmqctl join_cluster --ram rabbit@rabbitmq-9-131
rabbitmqctl start_app
# 7. 查看集群状态
[root@rabbitmq-9-131 ~]# rabbitmqctl cluster_status
Cluster status of node rabbit@rabbitmq-9-131 ...
Basics
Cluster name: rabbit@rabbitmq-9-131.rsq.com
Disk Nodes
rabbit@rabbitmq-9-132
RAM Nodes
rabbit@rabbitmq-9-131
Running Nodes
rabbit@rabbitmq-9-131
rabbit@rabbitmq-9-132
Versions
rabbit@rabbitmq-9-131: RabbitMQ 3.8.1 on Erlang 22.3.4.2
rabbit@rabbitmq-9-132: RabbitMQ 3.8.1 on Erlang 22.3.4.2
Alarms
(none)
......
# 日志文件路径
[root@rabbitmq-9-131 ~]# ls /var/log/rabbitmq/
erl_crash.dump log rabbit@mysql01.log rabbit@mysql01_upgrade.log
可以去web端查看相关信息,默认地址:192.168.9.131:15672 / 192.168.9.132:15672
4 配置rabbitmq镜像集群(ha)
镜像集群,属于RabbitMQ的高可用方案,这种模式下,消息实体会主动在集群镜像节点之间同步(下边有个图可以看到和普通集群之间的区别),这种模式下会降低系统性能,如果镜像队列数量过多,那么会大量消耗集群节点的IO,通过设置队列策略policy
来实现镜像。
开启ha策略
# 通过 -p 指定 vhost,确定策略生效范围,下边对全局生效
rabbitmqctl set_policy -p / ha-all "^" '{"ha-mode":"all"}'
如果出现下方Synchronised mirrors:…则代表镜像模式策略生效
可以通过提供一个VIP
来实现RabbitMQ的真正高可用,云上的机器可以直接通过配置负载均衡来实现
架构图如下:
5 rabbitmq配置文件说明
-
新版本
3.8.0+
的rabbitmq默认各项指标配置都还挺好,也不需要怎么修改,尤其是File Descriptors
的limit提升到了32671
和29401
。 -
但若是按默认配置安装完
RabbitMQ-3.8.0-
之前的版本,会发现其File descriptors
(即文件描述符)和Socket descriptors
都特别低,分别为924和829。客户端(消费者)保持长连接时很容易就将socket占满,这时就需要修改一下系统配置来增大文件描述符和Socket描述符的大小。1. 系统级别,配置文件为:/proc/sys/fs/file-max,如果太小需要修改。
[root@rabbitmq-9-131 ~]# cat /proc/sys/fs/file-max
791140
[root@rabbitmq-9-131 ~]# cat /proc/sys/fs/file-nr
1280 0 7911402. 用户级别,配置文件为:/etc/security/limits.conf
-
- nofile 65536
3. 进程级别,用ulimit -n
[root@rabbitmq-9-131 ~]# ulimit -n 65536
-
修改完配置文件需要重启rabbitmq服务
RPM安装完rabbitmq后默认是不会生成配置文件的,可以参考官方提供的配置文件
3.8.0-之前的版本会在如下目录中生成example配置文件
cp /usr/share/doc/rabbitmq-server-3.5.3/rabbitmq.config.example /etc/rabbitmq/rabbitmq.config
参考文章
安装RabbitMQ时提示错误
RabbitMQ管理:我们应该了解的命令行工具rabbitmqctl
CentOS7环境RabbitMQ集群配置管理
RabbitMQ集群架构全解