Rancher中部署RabbitMQ集群


Rancher中部署RabbitMQ集群

如何搭建Rancher请自行查看官网文档,默认已经搭建完成Rancher集群环境。

演示Rancher版本为v2.3.5

rabbitmq节点:

  • rabbitmq-test-node1
  • rabbitmq-test-node2
  • rabbitmq-test-node3

创建工作负载

创建工作负载

服务名称为rabbitmq-test-node1,镜像这里使用带管理端的版本rabbitmq:3.8.3-rc.2-management-alpine

添加配置映射

RabbitMQ集群通过 Erlang 的分布式特性(magic cookie 认证节点)来实现。所以必须保证所有节点的cookie一致。这里创建的配置映射是为保证三个节点通过环境变量挂在相同的配置,来保证三个节点使用的是同一个cookie。

配置端口映射

主要端口说明

  • 4369端口: epmd,RabbitMq节点和CLI工具使用的对等点发现服务
  • 5672端口: AMQP协议使用的端口
  • 15672端口: HTTP API客户端、管理UI和RabByMQADmin(只有启用管理插件)
  • 25672端口: 用于节点间和CLI工具通信(Erlang分发服务器端口),并从动态范围分配(默认为单个端口,计算为AMQP端口+ 20000)。除非这些端口上的外部连接真的是必需的(例如,集群使用联盟或CLI工具在子网之外的机器上),这些端口不应该公开暴露。详情请参阅网络指南。
  • 1883,8883端口:MQTT客户端不带TLS,只有启用MQTT插件。
  • 15674端口:STOMP的Websocket客户端使用的端口,只有Web STOMP插件启用才可以使用。
  • 15675端口:MQTT的Websocket客户端使用的端口,只有Web MQTT插件启用才可以使用。
  • 35672-35682端口:CLI工具(Erlang分发客户端端口)用于与节点通信,并从动态范围分配(计算为服务器分发端口+ 10000通过服务器分发端口+ 10010)。

添加密文(可选)

这一步是可选的,主要是为来修改默认的用户名和密码。如果不需要修改可以跳过此步骤。默认的用户名和密码均为guest

设置环境变量

环境变量RABBITMQ_NODENAME的值为rabbit@+服务名称,否则可能造成节点无法加入集群

持久化数据(可选)

数据持久化,可以把数据挂载到pvc,数据存放目录为/var/lib/rabbitmq/mnesia

设置主机名

在高级设置的网络中设置主机名为服务名

主机名必须和RABBITMQ_NODENAME中@后面的部分一致,否则Pod可能会无法启动

依次部署rabbitmq-test-node2和rabbitmq-test-node3节点并启动,这时可以正常启动三个独立的RabbitMQ服务


也可以进入容器,查看三个节点的cookie hash值是否一致

管理页面地址:IP:15672 帐号guest 密码guest

搭建集群

分别在rabbitmq-test-node2和rabbitmq-test-node3执行命令关闭服务,并加入到rabbitmq-test-node1中

关闭服务

rabbitmqctl stop_app

加入集群

rabbitmqctl join_cluster rabbit@rabbitmq-test-node1
# 默认rabbitmq启动后是磁盘节点,如果要改为内存节点可以加参数--ram参数
# 例如:
# rabbitmqctl join_cluster --ram rabbit@rabbitmq-test-node1

启动服务

rabbitmqctl start_app

再次登陆到任何要一个节点的管理页面,已经可以看到集群里面有三个节点了

RabbitMQ镜像集群配置

上面已经完成RabbitMQ默认集群模式,但并不保证队列的高可用性,尽管交换机、绑定这些可以复制到集群里的任何一个节点,但是队列内容不会复制。虽然该模式解决一项目组节点压力,但队列节点宕机直接导致该队列无法应用,只能等待重启,所以要想在队列节点宕机或故障也能正常应用,就要复制队列内容到集群里的每个节点,必须要创建镜像队列。

镜像队列是基于普通的集群模式的,然后再添加一些策略,所以你还是得先配置普通集群,然后才能设置镜像队列,我们就以上面的集群接着做。
设置的镜像队列可以通过开启的网页的管理端,也可以通过命令,这里WebUI为例。

创建RabbitMQ策略

在node1节点的控制台上创建策略
点击admin菜单–>右侧的Policies选项–>左侧最下下边的Add/update a policy。

  1. Name:策略名称
  2. Pattern:匹配的规则,这里表示匹配a开头的队列,如果是匹配所有的队列,那就是^.
  3. Definition:使用ha-mode模式中的all,也就是同步所有匹配的队列。问号链接帮助文档。

点击Add policy添加策略

此时分别其他两个节点的控制台,可以看到上面添加的这个策略

扩展内容

常用命令

列出集群状态

rabbitmqctl cluster_status

更改节点类型

rabbitmqctl stop_app
rabbitmqctl change_cluster_node_type disc
rabbitmqctl change_cluster_node_type ram
rabbitmqctl start_app

查看镜像队列

rabbitmqctl list_policies

删除镜像队列

rabbitmqctl clear_policy

查看所有队列信息

rabbitmqctl list_queues

从集群中移除节点

rabbitmqctl forget_cluster_node 'rabbit@rabbitmq-test-node3'

变更

RABBITMQ_ERLANG_COOKIE 环境变量支持已弃用,将在未来版本中删除。 请改用 $HOME/.erlang.cookie 文件或 --erlang-cookie。

从版本3.8.6开始,rabbitmq-diagnostics包含一个命令,该命令提供有关 CLI 工具使用的 Erlang cookie 文件的相关信息:

rabbitmq-diagnostics erlang_cookie_sources

该命令将报告有效用户、用户主目录和 cookie 文件的预期位置:

Cookie File

Effective user: antares
Effective home directory: /home/cli-user
Cookie file path: /home/cli-user/.erlang.cookie
Cookie file exists? true
Cookie file type: regular
Cookie file access: read
Cookie file size: 20

Cookie CLI Switch

--erlang-cookie value set? false
--erlang-cookie value length: 0

Env variable  (Deprecated)

RABBITMQ_ERLANG_COOKIE value set? false
RABBITMQ_ERLANG_COOKIE value length: 0

声明:初心|版权所有,违者必究|如未注明,均为原创|本网站采用BY-NC-SA协议进行授权

转载:转载请注明原文链接 - Rancher中部署RabbitMQ集群


愿你勿忘初心,并从一而终