RabbitMQ Cluster
一、安装RabbitMQ
1. 安装依赖
1.1安装erlang
RabbitMQ version | 最低版本 | 最高版本 | Notes |
---|---|---|---|
3.8.9 -- 3.8.14 | 22.3 | 23.X | 推荐使用23.x |
/etc/yum.repos.d/目录下新增erlang.repo文件,写入以下内容:
[erlang]
name=erlang
baseurl=https://mirrors.tuna.tsinghua.edu.cn/erlang-solutions/centos/7/
enabled=1
gpgcheck=0
1.2 安装其他依赖
yum install -y socat logrotate
2. 安装rabbitmq-server
yum install -y ./rabbitmq-server-3.8.14-1.el7.noarch.rpm
3. 启用rabbitmq_management插件
rabbitmq-plugins enable rabbitmq_management
查看启用了哪些插件
rabbitmq-plugins list
E:手动启用的插件
e:作为依赖被启用的插件
为UI访问创建用户并授权
# 创建一个名为full_access的用户,密码为centos
rabbitmqctl add_user full_access Hengbao@123
# 给用户授权
rabbitmqctl set_user_tags full_access administrator
浏览器访问http://serverip:port
用户名:full_access
密码:centos
二、RabbitMQ配置
官方文档:www.rabbitmq.com/configure.h…
1. 环境变量
主要用来定义配置文件路径、网络参数。路径:/etc/rabbitmq/rabbitmq-env.conf
在涉及到路径的配置中,应避免使用*
和?
(类UNIX系统)
# Example rabbitmq-env.conf file entries. Note that the variables
# do not have the RABBITMQ_ prefix.
#
# Overrides node name
NODENAME=bunny@myhost
# Specifies new style config file location
CONFIG_FILE=/etc/rabbitmq/rabbitmq.conf
# Specifies advanced config file location
ADVANCED_CONFIG_FILE=/etc/rabbitmq/advanced.config
2. 配置文件
主要用来定义服务器各组件的权限、资源限制、插件及集群功能。
- ini格式配置文件,通常命名为rabbitmq.conf
- Erlang格式配置文件,通常命名为advanced.config
# ini格式配置文件
ssl_options.cacertfile = /path/to/ca_certificate.pem
ssl_options.certfile = /path/to/server_certificate.pem
ssl_options.keyfile = /path/to/server_key.pem
ssl_options.verify = verify_peer
ssl_options.fail_if_no_peer_cert = true
# erlang格式
[
{rabbit, [{ssl_options, [{cacertfile, "/path/to/ca_certificate.pem"},
{certfile, "/path/to/server_certificate.pem"},
{keyfile, "/path/to/server_key.pem"},
{verify, verify_peer},
{fail_if_no_peer_cert, true}]}]}
].
auth_mechanisms: 认证机制,SASL(简单认证安全层)
default_user: 连接rabbitmq的默认用户。默认guest
default_pass: 连接rabbitmq的默认用户的密码。默认guest
default_permissions: 用户的默认权限。
disk_free_limit: 定义磁盘的最少预留空闲空间
heartbeat: broker与客户端需要建立持久连接,定义消息时长。默认值580毫秒
log_levels: 日志级别,默认info{none|error|warning|info}
tcp_listeners: 监听的地址和端口,默认5672
ssl_listeners: ssl通讯协议监听的地址和端口,默认5672
vm_memory_high_watermark: 内存阈值,即定义空闲内存空间
vm_memory_high_watermark.absolute: 使用绝对值方式定义空闲内存空间
3. 运行时参数
官方文档:www.rabbitmq.com/rabbitmqctl…
主要用来修改集群运行时的某些设定,使用rabbitmqctl命令
用法:
rabbitmqctl [--node <node>] [--timeout <timeout>] [--longnames] [--quiet] <command> [<command options>]
二、集群所需配置
注意事项:
- 关闭防火墙、selinux
- 时间同步
- 添加域名解析(主机名要与解析名称一致)
- 各节点启用rabbitmq_management插件
- master节点复制/var/lib/rabbitmq/.erlang.cookie至其他节点
- 若待加入集群的节点有数据或之前为其他集群中节点,需执行reset操作
- 各从节点停止应用(rabbitmqctl stop_app) --> 加入集群(rabbitmqctl join_cluster nodename@hostname) --> 启动应用(rabbitmqctl start_app)
1. 主机名解析
RabbitMQ集群中,各节点使用短域名或FQDN(全限定域名)相互寻址。
操作系统提供的方法:
- DNS记录
- 本地host文件(/etc/hosts)
2. 确保以下端口可访问
端口名 | 用途 |
---|---|
5671 | AMQP 0-9-1和 1.0客户端使用(with TLS) |
5672 | AMQP 0-9-1和 1.0客户端使用 |
15672 | 通过http://serverip:15672访问RabbitMQ Web界面时使用 |
25672 | 集群中通信 |
3. 复制cookie文件
- 节点及CLI工具使用cookie来确定是否允许彼此通信
- 一串字母数字字符,最大长度255个字符
- 文件默认路径:/var/lib/rabbitmq/.erlang.cookie
- 每个集群节点cookie必须相同
scp /var/lib/rabbitmq/.erlang.cookie root@rabbitmq-2:/var/lib/rabbitmq/
4.查看.erlang.cookie是否一致
[root@rabbitmq-1 ~]# cat /var/lib/rabbitmq/.erlang.cookie
YRWBUCFQJZJKGSCNEPAY
[root@rabbitmq-1 ~]# ssh root@rabbitmq-2 "cat /var/lib/rabbitmq/.erlang.cookie"
YRWBUCFQJZJKGSCNEPAY
5. rabbitmq-2加入集群
[root@rabbitmq-2 ~]# rabbitmqctl join_cluster rabbit@rabbitmq-1
Clustering node rabbit@rabbitmq-2 with rabbit@rabbitmq-1
6.查看集群状态
[root@rabbitmq-2 ~]# rabbitmqctl start_app
Starting node rabbit@rabbitmq-2 ...
# 查看rabbitmq-1集群状态
[root@rabbitmq-1 ~]# rabbitmqctl cluster_status
Cluster status of node rabbit@rabbitmq-1 ...
Basics
Cluster name: rabbit@rabbitmq-1 #集群名称:rabbit@rabbitmq-1
# 查看rabbitmq-2集群状态
[root@rabbitmq-2 ~]# rabbitmqctl cluster_status
Cluster status of node rabbit@rabbitmq-2 ...
Basics
Cluster name: rabbit@rabbitmq-1 #集群名称:rabbit@rabbitmq-1
6.1虚拟主机操作
rabbitmq-1上执行操作
[root@rabbitmq-1 ~]# rabbitmqctl add_vhost /myhost1
Adding vhost "/myhost1" ...
[root@rabbitmq-1 ~]# rabbitmqctl add_vhost /myhost2
Adding vhost "/myhost2" ...
[root@rabbitmq-1 ~]# rabbitmqctl list_vhosts
Listing vhosts ...
name
/myhost1
/myhost2
/
rabbitmq-2上查看
[root@rabbitmq-2 ~]# rabbitmqctl list_vhosts
Listing vhosts ...
name
/myhost1
/myhost2
/
三、集群操作
join_cluster <clusternode> [--ram] #加入集群
cluster_status #集群状态
change_cluster_node_type disc | ram #改变集群节点状态
forget_cluster_node [--offline] #删除集群节点(先停再删除)
update_cluster_nodes clusternode #
四、单机配置
修改日志、数据存储目录
4.1 创建相关目录并赋权
mkdir -pv /data/rabbitmq/{data,log}
chown -R rabbitmq.rabbitmq /data/rabbitmq/
4.2 编辑配置文件
编辑/etc/rabbitmq/rabbitmq-env.conf,添加以下内容:
RABBITMQ_MNESIA_BASE=/data/rabbitmq/data
RABBITMQ_LOG_BASE=/data/rabbitmq/log
注:修改配置文件后,需手动迁移原数据至新目录。或重新执行各种创建命令。