CentOS7安装RabbitMQ3.9集群

548 阅读3分钟

CentOS7安装RabbitMQ3.9

开始

官网,点击- Doc,点击- Clustering

image.png

配置hostname

Node names in a cluster must be unique. If more than one node is running on a given host (this is usually the case in development and QA environments), they must use different prefixes, e.g. rabbit1@hostname and rabbit2@hostname.

修改hostname名称

# on rabbit1
hostnamectl set-hostname rabbitmq1

# on rabbit2
hostnamectl set-hostname rabbitmq2

# on rabbit3
hostnamectl set-hostname rabbitmq3

配置hosts

#3个节点分别配置如下
172.20.20.110 rabbitmq1
172.20.20.227 rabbitmq2
172.20.20.248 rabbitmq3

#保存退出

配置COOKIE

RabbitMQ nodes and CLI tools (e.g. rabbitmqctl) use a cookie to determine whether they are allowed to communicate with each other. For two nodes to be able to communicate they must have the same shared secret called the Erlang cookie. The cookie is just a string of alphanumeric characters up to 255 characters in size. It is usually stored in a local file. The file must be only accessible to the owner (e.g. have UNIX permissions of 600 or similar). Every cluster node must have the same cookie

# on rabbit2 rabbit3
mv /var/lib/rabbitmq/.erlang.cookie /var/lib/rabbitmq/.erlang.cookie.back

# on rabbit1 同步cookie到rabbitmq2
scp /var/lib/rabbitmq/.erlang.cookie root@rabbitmq2:/var/lib/rabbitmq/

# on rabbit1 同步cookie到rabbitmq3
scp /var/lib/rabbitmq/.erlang.cookie root@rabbitmq3:/var/lib/rabbitmq/

创建集群

启动

通过将现有 RabbitMQ 节点重新配置为集群配置来建立集群。因此,第一步是以正常方式在所有节点上启动 RabbitMQ

# on rabbit1
rabbitmq-server -detached
# on rabbit2
rabbitmq-server -detached
# on rabbit3
rabbitmq-server -detached

查看

#分别在3节点执行,查看状态,此时集群只有1个节点
# on rabbit1
[root@rabbitmq1 ~]# rabbitmqctl cluster_status
Cluster status of node rabbit@rabbitmq1 ...
Basics

Cluster name: rabbit@rabbitmq1

Disk Nodes

rabbit@rabbitmq1

Running Nodes

rabbit@rabbitmq1

Versions

rabbit@rabbitmq1: RabbitMQ 3.9.13 on Erlang 23.3.4.11

Maintenance status

Node: rabbit@rabbitmq1, status: not under maintenance

xxx

加入集群

In order to link up our three nodes in a cluster, we tell two of the nodes, say rabbit@rabbit2 and rabbit@rabbit3, to join the cluster of the third, say rabbit@rabbit1. Prior to that both newly joining members must be reset.

rabbitmq2加入集群

# on rabbit2 关闭rabbitserver2
[root@rabbitmq2 ~]# rabbitmqctl stop_app
Stopping rabbit application on node rabbit@rabbitmq2 ...

# on rabbit2 重置rabbitserver
[root@rabbitmq2 ~]# rabbitmqctl reset
Resetting node rabbit@rabbitmq2 ...

# on rabbit2 加入rabbitmq1集群
[root@rabbitmq2 ~]# rabbitmqctl join_cluster rabbit@rabbitmq1
Clustering node rabbit@rabbitmq2 with rabbit@rabbitmq1
xxx

# on rabbit2 启动rabbitserver2
[root@rabbitmq2 ~]# rabbitmqctl start_app
Starting node rabbit@rabbitmq2 ...

# on rabbit2 查看状态,此时2个节点
[root@rabbitmq2 ~]# rabbitmqctl cluster_status
Cluster status of node rabbit@rabbitmq2 ...
Basics

Cluster name: rabbit@rabbitmq2

Disk Nodes

rabbit@rabbitmq1
rabbit@rabbitmq2

Running Nodes

rabbit@rabbitmq1
rabbit@rabbitmq2

Versions

rabbit@rabbitmq1: RabbitMQ 3.9.13 on Erlang 23.3.4.11
rabbit@rabbitmq2: RabbitMQ 3.9.13 on Erlang 23.3.4.11

Maintenance status

Node: rabbit@rabbitmq1, status: not under maintenance
Node: rabbit@rabbitmq2, status: not under maintenance

rabbitmq3加入集群

Now we join rabbit@rabbit3 to the same cluster. The steps are identical to the ones above, except this time we'll cluster to rabbit2 to demonstrate that the node chosen to cluster to does not matter - it is enough to provide one online node and the node will be clustered to the cluster that the specified node belongs to.

# on rabbit3 关闭rabbit3
[root@rabbitmq3 rabbitmq]# rabbitmqctl stop_app
Stopping rabbit application on node rabbit@rabbitmq3 ...

# on rabbit3 重置rabbit3
[root@rabbitmq3 rabbitmq]# rabbitmqctl reset
Resetting node rabbit@rabbitmq3 ...

# on rabbit3 尝试加入 rabbit@rabbit2集群
[root@rabbitmq3 rabbitmq]# rabbitmqctl join_cluster rabbit@rabbitmq2
Clustering node rabbit@rabbitmq3 with rabbit@rabbitmq2
xxx

# on rabbit3 启动rabbit3
[root@rabbitmq3 rabbitmq]# rabbitmqctl start_app
Starting node rabbit@rabbitmq3 ...


# on rabbit3 查看状态,此时3个节点
[root@rabbitmq3 rabbitmq]# rabbitmqctl cluster_status
Cluster status of node rabbit@rabbitmq3 ...
Basics

Cluster name: rabbit@rabbitmq3

Disk Nodes

rabbit@rabbitmq1
rabbit@rabbitmq2
rabbit@rabbitmq3

Running Nodes

rabbit@rabbitmq1
rabbit@rabbitmq2
rabbit@rabbitmq3

Versions

rabbit@rabbitmq1: RabbitMQ 3.9.13 on Erlang 23.3.4.11
rabbit@rabbitmq2: RabbitMQ 3.9.13 on Erlang 23.3.4.11
rabbit@rabbitmq3: RabbitMQ 3.9.13 on Erlang 23.3.4.11

Maintenance status

Node: rabbit@rabbitmq1, status: not under maintenance
Node: rabbit@rabbitmq2, status: not under maintenance
Node: rabbit@rabbitmq3, status: not under maintenance

登录控制台

This means that a node cannot be made a member of a cluster and keep its existing data at the same time. When that's desired, using the Blue/Green deployment strategy or backup and restore are the available options.

请注意,必须重置节点才能加入现有集群。重置该节点将删除该节点上以前存在的所有资源和数据。这意味着一个节点不能成为集群的成员并同时保留现有的数据。如果需要,可以使用 Blue/Green 部署策略或备份和恢复。

image.png

重置账号

任意节点执行,再次登录

image.png