RabbitMQ-3.8.1集群配置管理

文章目录

  • 1 环境准备
  • 2 配置rabbitmq单节点模式
  • 3 配置rabbitmq普通集群
  • 4 配置rabbitmq镜像集群(ha)
  • 5 rabbitmq配置文件说明

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集群中就可以,但是有几点需要注意的:

  1. Rabbitmq的集群是依附于erlang的集群来工作的,所以必须先构建起erlang的集群镜像。erlang的集群中各节点是经过一个magic cookie来实现的,这个cookie存放在 $home/.erlang.cookie 中,如果用rpm安装的,那么.erlang.cookie就放在/var/lib/rabbitmq/目录中。
  2. 复制cookie内容,erlang.cookie是erlang实现分布式的必要文件,erlang分布式的每个节点上要保持相同的.erlang.cookie文件,同时保证文件的权限是400,不然节点之间就无法通信。
  3. 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 [email protected]:/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: [email protected]

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  [email protected]  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:…则代表镜像模式策略生效
RabbitMQ-3.8.1集群配置管理_第1张图片
可以通过提供一个VIP来实现RabbitMQ的真正高可用,云上的机器可以直接通过配置负载均衡来实现

架构图如下:
RabbitMQ-3.8.1集群配置管理_第2张图片

5 rabbitmq配置文件说明

  • 新版本3.8.0+的rabbitmq默认各项指标配置都还挺好,也不需要怎么修改,尤其是File Descriptors的limit提升到了3267129401
  • 但若是按默认配置安装完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	791140

# 2. 用户级别,配置文件为:/etc/security/limits.conf
* - nofile 65536

# 3. 进程级别,用ulimit -n
[root@rabbitmq-9-131 ~]# ulimit -n 65536

修改完配置文件需要重启rabbitmq服务

RPM安装完rabbitmq后默认是不会生成配置文件的,可以参考官方提供的配置文件

rabbitmq.conf.example

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集群架构全解

你可能感兴趣的:(RabbitMQ,rabbitmq)