RabbitMQ Cluster安装配置

878 阅读4分钟

RabbitMQ Cluster

一、安装RabbitMQ

1. 安装依赖

1.1安装erlang

RabbitMQ version最低版本最高版本Notes
3.8.9 -- 3.8.1422.323.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

下载地址:github.com/rabbitmq/ra…

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. 确保以下端口可访问

端口名用途
5671AMQP 0-9-1和 1.0客户端使用(with TLS)
5672AMQP 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

注:修改配置文件后,需手动迁移原数据至新目录。或重新执行各种创建命令。