首页 > 其他 > 详细

rabbitmq 集群配置

时间:2021-02-26 19:23:29      阅读:46      评论:0      收藏:0      [点我收藏+]

参考:https://www.cnblogs.com/caoweixiong/p/14371487.html
环境:

centos7

这里使用两台,生产环境建议使用三台

ip 主机名 安装软降
192.168.137.126 node01 erlang、rabbitmq,jdk
192.168.137.125 node02 erlang、rabbitmq,jdk

准备集群

修改主机名并写入hosts文件

vim /etc/hosts

192.168.137.126	node01

192.168.137.125	node02
hostnamectl set-hostname node01	#修改主机名

部署rabbitmq(略)

这里采用的离线部署,下载的tar.gz二进制包直接拿来启动

启动node01,node02上的rabbitmq

后台启动Rabbit node

rabbitmq-server -detached	#启动Erlang node和Rabbit应用
rabbitmqctl stop	#停止mq跟erlang节点

并且开启相关插件(方便以后使用)

rabbitmq-plugins enable rabbitmq_management rabbitmq_web_stomp rabbitmq_stomp rabbitmq_web_stomp_examples	#重启后生效

重新开启并确认服务状态

rabbitmqctl -detached
rabbitmqctl status

技术分享图片

准备复制.erlang.cookie文件

RabbitMQ的集群是依赖erlang集群,而erlang集群是通过这个cookie进行通信认证的,将一台主机上的 .erlang.cookie 文件拷贝到其他两台主机上。该 cookie 文件相当于密钥令牌,集群中的 RabbitMQ 节点需要通过交换密钥令牌以获得相互认证,因此处于同一集群的所有节点需要具有相同的密钥令牌,否则在搭建过程中会出现 Authentication Fail 错误。

一般这个文件在 $HOME/.erlang.cookie ,也可能在/var/lib/rabbitmq/.erlang.cookie下视安装方式而定

/var/lib/rabbitmq/.erlang.cookie
或 
$HOME/.erlang.cookie

复制前需要停止所有节点的mq跟erlang节点

rabbitmqctl stop

复制cookie文件

cd
scp .erlang.cookie root@node02:/root/
chmod 600 .erlang.cookie	#这步可以省略

集群加入操作

启动所有节点

rabbitmqctl -detached

以node01为 ‘主节点’ ,将node02加入到集群中,node2上操作如下

rabbitmqctl stop_app	#只停止mq服务

rabbitmqctl reset	#重置状态

rabbitmqctl join_cluster rabbit@node01	#加入集群

rabbitmqctl start_app	#重新开启mq服务

join_cluster 命令有一个可选的参数 --ram ,该参数代表新加入的节点是内存节点,默认是磁盘节点。

如果是内存节点,则所有的队列、交换器、绑定关系、用户、访问权限和 vhost 的元数据都将存储在内存中,如果是磁盘节点,则存储在磁盘中。

内存节点可以有更高的性能,但其重启后所有配置信息都会丢失,因此RabbitMQ 要求在集群中至少有一个磁盘节点,其他节点可以是内存节点。

当内存节点离开集群时,它可以将变更通知到至少一个磁盘节点;然后在其重启时,再连接到磁盘节点上获取元数据信息。

除非是将 RabbitMQ 用于 RPC 这种需要超低延迟的场景,否则在大多数情况下,RabbitMQ 的性能都是够用的,可以采用默认的磁盘节点的形式。

另外,如果节点以磁盘节点的形式加入,则需要先使用 reset 命令进行重置,然后才能加入现有群集,重置节点会删除该节点上存在的所有的历史资源和数据。

采用内存节点的形式加入时可以略过 reset 这一步,因为内存上的数据本身就不是持久化的。

在node01上确认集群信息

rabbitmqctl cluster_status

技术分享图片

创建管理用户

rabbitmqctl add_user admin password

rabbitmqctl add_vhos admin

rabbitmqctl set_user_tags admin administrator

rabbitmq set_permissions -p admin admin ".*" ".*" ".*"

浏览器登录并查看集群状态

技术分享图片

集群关闭与重启

没有一个直接的命令可以关闭整个集群,需要逐一进行关闭。但是需要保证在重启时,最后关闭的节点最先被启动。

如果第一个启动的不是最后关闭的节点,那么这个节点会等待最后关闭的那个节点启动,默认进行 10 次连接尝试,超时时间为 30 秒,如果依然没有等到,则该节点启动失败。

这带来的一个问题是,假设在一个三节点的集群当中,关闭的顺序为 node01,node02,node03,如果 node1 因为故障暂时没法恢复,此时 node2 和 node3 就无法启动。

想要解决这个问题,可以先将 node1 节点进行剔除,命令如下:

rabbitmqctl forget_cluster_node rabbit@node01 -offline

此时需要加上 -offline 参数,它允许节点在自身没有启动的情况下将其他节点剔除。

集群节点移除操作

方法一:

可以先使用 rabbitmqctl stop 停止该节点上的服务,然后在其他任意一个节点上执行 forget_cluster_node 命令。这里以剔除 node02上的服务为例,此时可以在 node01上执行下面的命令:

rabbitmqctl forget_cluster_node rabbit@node02	#要记得先停止node02节点上的服务

方法二:

先使用 rabbitmqctl stop 停止该节点上的服务,然后再执行 rabbitmqctl reset 这会清空该节点上所有历史数据,并主动通知集群中其它节点它将要离开集群。

配置集群模式

配置镜像队列策略

rabbitmqctl set_policy [-p Vhost] Name Pattern Definition [Priority]
-p Vhost: 可选参数,针对指定vhost下的queue进行设置
Name: policy的名称
Pattern: queue的匹配模式(正则表达式)
Definition:镜像定义,包括三个部分ha-mode, ha-params, ha-sync-mode
    ha-mode:指明镜像队列的模式,有效值为 all/exactly/nodes
        all:表示在集群中所有的节点上进行镜像
        exactly:表示在指定个数的节点上进行镜像,节点的个数由ha-params指定
        nodes:表示在指定的节点上进行镜像,节点名称通过ha-params指定
    ha-params:ha-mode模式需要用到的参数
    ha-sync-mode:进行队列中消息的同步方式,有效值为automatic和manual
priority:可选参数,policy的优先级

示例:

rabbitmqctl set_policy -p admin  ha-all "^" ‘{"ha-mode":"all"}‘

查询策略详情:(查询 admin vshost下的策略详情)

rabbitmqctl list_policies -p admin

验证:

网页界面添加一条队列,并查看详情

技术分享图片

技术分享图片

技术分享图片

rabbitmq 集群配置

原文:https://www.cnblogs.com/yhy223/p/14453418.html

(0)
(0)
   
举报
评论 一句话评论(0
关于我们 - 联系我们 - 留言反馈 - 联系我们:wmxa8@hotmail.com
© 2014 bubuko.com 版权所有
打开技术之扣,分享程序人生!