RabbitMQ 3.8.3 搭建镜像集群简明笔记

背景

项目需要用到 RabbitMQ ,同时要求做镜像集群。

实战

以下实验基于 Centos6RabbitMQ 3.8.3

系统版本 ip 主机名
Centos 6 192.168.201.170 mq1
Centos 6 192.168.201.171 mq2
Centos 6 192.168.201.172 mq3

三台服务器记得配置好 hosts

cat <<EOF>> /etc/hosts
192.168.201.170 mq1
192.168.201.171 mq2
192.168.201.172 mq3
EOF

安装

# 三台都要操作
wget https://mirrors.huaweicloud.com/rabbitmq-server/v3.8.3/rabbitmq-server-3.8.3-1.el6.noarch.rpm
wget https://github.com/rabbitmq/erlang-rpm/releases/download/v22.3.2/erlang-22.3.2-1.el6.x86_64.rpm
yum localinstall erlang-22.3.2-1.el6.x86_64.rpm rabbitmq-server-3.8.3-1.el6.noarch.rpm -y

配置

# 三台都要操作
# 安装简单,配置比较麻烦
# 我这里需要修改 RabbitMQ 的默认数据目录
mkdir -p /data/rabbitmq/{mnesia,log}
chown -R rabbitmq.rabbitmq /data/rabbitmq/
cat <<EOF> /etc/rabbitmq/rabbitmq-env.conf 
RABBITMQ_MNESIA_BASE=/data/rabbitmq/mnesia
RABBITMQ_LOG_BASE=/data/rabbitmq/log
EOF
#不知道为什么,只要修改过 /etc/rabbitmq 的文件,就要重新授权
chown -R rabbitmq.rabbitmq /etc/rabbitmq/
# 启动
/etc/init.d/rabbitmq-server start
# 启用 web 界面,此处必须,不然搭建集群会提示 “Node statistics not available”
rabbitmq-plugins enable rabbitmq_management
# 查看状态
/etc/init.d/rabbitmq-server status

搭建普通集群

前面我们在安装 RabbitMQ的时候也装了 erlang,装完以后本机会出现一个隐藏文件叫 .erlang.cookie,路径在 $HOME/var/lib/rabbitmq/.erlang.cookie ,但是官方文档说的是或,不清楚为什么我这里三个路径都有。

On UNIX systems, the cookie will be typically located in /var/lib/rabbitmq/.erlang.cookie (used by the server) and $HOME/.erlang.cookie (used by CLI tools). Note that since the value of $HOME varies from user to user, it's necessary to place a copy of the cookie file for each user that will be using the CLI tools. This applies to both non-privileged users and root.

这玩意干嘛用的呢?RabbitMQ的集群是依赖erlang集群,而 erlang集群是通过这个cookie进行通信认证的,所以要保证所有机器的 .erlang.cookie 内容一致,且为只读权限。

所以可以把 mq1.erlang.cookie 复制到 mq2mq3 机器,然后修改权限

# mq1 操作
scp /var/lib/rabbitmq/.erlang.cookie 192.168.201.171:/var/lib/rabbitmq
# mq2 操作
chmod 400 /var/lib/rabbitmq/.erlang.cookie

mq2mq3 加入集群

rabbitmqctl stop_app
# => Stopping node rabbit@mq2 ...done.

rabbitmqctl reset
# => Resetting node rabbit@mq2 ...

# 如果要设置为内存节点,则改为 rabbitmqctl join_cluster --ram rabbit@mq1
rabbitmqctl join_cluster rabbit@mq1
# => Clustering node rabbit@mq2 with [rabbit@mq1] ...done.

rabbitmqctl start_app
# => Starting node rabbit@mq2 ...done.

查看集群状态

rabbitmqctl cluster_status
...
Basics

Cluster name: rabbit@mq1

Disk Nodes

rabbit@mq1
rabbit@mq2
rabbit@mq3

Running Nodes

rabbit@mq1
rabbit@mq2
rabbit@mq3
...

镜像集群

J简单的说,镜像队列机制就是将队列在 N 个节点之间设置主从关系,消息会在 N 个节点之间进行自动同步,且如果其中一个节点不可用,并不会导致消息丢失或服务不可用的情况,提升 MQ 集群的整体高可用性。

配置

rabbitmqctl set_policy ha-all "^" '{"ha-mode":"all"}'
上一篇:spring-AMQP-RabbitMQ


下一篇:RabbitMQ-工作原理