0


10. RabbitMq 集群搭建

1. RabbitMq集群搭建

在本系列第一篇文章中介绍了搭建RabbitMq环境的过程,现在要搭建含有3台RabbitMq服务器的集群环境。

1. 首先通过克隆方式,从第一台RabbitMq服务器环境克隆出另外2套出来,如下所示
在这里插入图片描述
2. 修改克隆出的2台RabbitMq服务器的Ip地址,修改成喜欢的IP即可
只需修改

/etc/sysconfig/network-scripts/ifcfg-ens33

文件中的IPADDR即可。

3. 修改3台RabbitMq服务器的hostname
3台服务器的hostname分别设置为node1、node2、node3
比如以第一台为例,通过

vi /etc/hostname

直接编辑hostname文件内容为node1即可,另外2台同样设置。

4. 分别修改3台RabbitMq服务器节点的hosts文件,目的是为了让各个节点互相识别对方
修改方式,分别在各个节点执行

vi /etc/hosts

,在hosts文件中追加下面内容

192.168.85.100 node1
192.168.85.101 node2
192.168.85.102 node2

5. 把第1个节点上的cookie文件复制到另外2台克隆的节点上,确保各节点用的同一个cookie
在node1上执行下面2条命令,把node1节点上的cookie文件复制到node2和node3上。

scp /var/lib/rabbitmq/.erlang.cookie root@node2:/var/lib/rabbitmq/.erlang.cookie
scp /var/lib/rabbitmq/.erlang.cookie root@node3:/var/lib/rabbitmq/.erlang.cookie

6. 配置每个节点上rabbitmq的名字
在node1服务器上执行

vi /etc/rabbitmq/rabbitmq-env.conf

打开文件添加如下配置

RABBITMQ_NODENAME=rabbit@node1

同理在node2节点上执行

vi /etc/rabbitmq/rabbitmq-env.conf

添加如下配置

RABBITMQ_NODENAME=rabbit@node2

同理在node3节点上执行

vi /etc/rabbitmq/rabbitmq-env.conf

添加如下配置

RABBITMQ_NODENAME=rabbit@node3

7. 启动 RabbitMQ 服务,顺带启动 Erlang 虚拟机和 RbbitMQ 应用服务
分别在3个节点上执行下面命令

rabbitmq-server -detached

8. 分别把node2、ndoe3加入到node1集群中
首先把node2加到node1中,在node2上执行下面命令,把Rabbitmq服务器先停止,加入到node1中,然后再重启

rabbitmqctl stop_app
rabbitmqctl reset
rabbitmqctl join_cluster rabbit@node1
rabbitmqctl start_app

在执行完上面命令后如没有任何报错,则说明node2已经加入到node1集群中了。但有不少老铁们在执行joint_cluster一步时会报下面的错误

[root@node2~]# rabbitmqctl join_cluster rabbit@node1Clustering node rabbit@node2withrabbit@node1Error: unable toperform an operation on node 'rabbit@node1'.Please see diagnostics information and suggestions below.

Most common reasons forthis are:*Target node is unreachable (e.g. due tohostname resolution, TCP connection or firewall issues)* CLI tool fails toauthenticatewiththe server (e.g. due to CLI tool's Erlang cookie not matching that of the server)*Target node is not running

In addition tothe diagnostics info below:*See the CLI, clustering and networking guides on https://rabbitmq.com/documentation.html tolearn more
 *Consult server logs on node rabbit@node1*If target node is configured touselong node names, don't forget touse--longnames with CLI tools

DIAGNOSTICS
===========

attempted tocontact:[rabbit@node1]

rabbit@node1:* connected toepmd(port 4369) on node1
  * epmd reports node 'rabbit'usesport25672for inter-node and CLI tool traffic 
  * can't establish TCP connection tothe target node, reason: ehostunreach (host is unreachable)* suggestion: check if host 'node1' resolves, is reachable and ports 25672,4369 are not blocked by firewall

Current node details:* node name: 'rabbitmqcli-9574-rabbit@node2'
 * effective user's home directory:/var/lib/rabbitmq
 *Erlang cookie hash: pFfLvMk3grI/EMzFLFq+Mw==

针对该问题,是因为没有放开4369和25672两个端口防火墙,可以在3个节点上分别执行下面命令放开端口

firewall-cmd --permanent --add-port=4369/tcp
firewall-cmd --permanent --add-port=25672/tcp 
service firewalld restart

开放端口后重新执行join_cluster,则会显示加入node1集群成功。

9. 检查集群的状态
执行命令

rabbitmqctl cluster_status

在这里插入图片描述
10. 需要为集群重新添加账户
在node1节点上执行下面命令
创建账号

rabbitmqctl add_user admin 123

设置用户角色

 rabbitmqctl set_user_tags admin administrator

设置用户权限

rabbitmqctl set_permissions -p "/" admin ".*"".*"".*"

执行完后,admin用户拥有了管理员的权限,可以登录管理端进行查看了
在这里插入图片描述
提示:集群搭建好后如果只可以通过一个节点访问页面管理端,比如192.168.85.101:15672无法访问,有可能是不能访问的节点未关闭防火墙缘故,只需要分别在不能访问的节点上执行下面命令关闭防火墙即可。

systemctl stop firewalld.service
systemctl disable firewalld.service

2. 镜像队列

创建好集群后,集群中有3个broker节点,如果创建的队列在其中任何一个节点上,当该节点宕机后,容易导致消息丢失,即使队列设置了durable持久化属性依然不能绝对保证消息不丢失,因为broker节点宕机后,不能保证队列中所有消息立即刷到磁盘中。
鉴于这种原因,镜像队列(mirror queue)机制尤为重要,镜像队列机制可以保证一个节点上的队列被镜像到其它节点上,当一个节点挂了后还有其它几点继续运行,保证了消息不丢失。可以为镜像队列设置镜像属性n,比如设置的n=2,表示队列在集群中会有2个副本,当一个节点宕机后,还有一个副本队列继续运行,该副本队列会在其他broker节点上继续镜像一个副本,保证每时每刻集群中都有2个副本。

下面进行创建镜像队列
首先创建一个策略,表示对什么样的队列进行镜像,登录管理端,进入policies创建策略
其中hello_policy为自定义的策略名字;^hello为策略的模式,表示名字以hello开头的队列会被镜像,比如hello_queue队列就会被镜像;然后设置ha-mode、ha-params、ha-sync-mode三兄弟属性,ha-mode=explicty表示随机镜像到一些节点上,ha-params=2表示镜像到2个节点上,ha-sync-mode=automatic表示自动镜像的,非手动。

在这里插入图片描述
策略创建好后,我们通过客户端创建一个名字为hello_my_queue队列,当然也可通过程序创建
在这里插入图片描述
创建好队列后,进入队列进行查看,如下所示,表示镜像策略生效了,在rabbit@node2节点上创建的队列,在rabbit@node1上有镜像队列。
在这里插入图片描述

标签: rabbitmq 集群

本文转载自: https://blog.csdn.net/u010502101/article/details/127081418
版权归原作者 苍鹰蛟龙 所有, 如有侵权,请联系我们删除。

“10. RabbitMq 集群搭建”的评论:

还没有评论