RabbitMQ集群安装

RabbitMQ集群安装

1.前言

OS: CentOS Linux release 7.9.2009 (Core)

机器:

IPnodecpu内存存储
10.106.1.241max-rabbitmg-018 核16 G100 G
10.106.1.242max-rabbitmg-028 核16 G100 G
10.106.1.243max-rabbitmg-038 核16 G100 G

因为操作系统版本是 centos7,所以RabbitMQ安装版本,选的是最后一个支持RHEL7的版本。

在安装RabbitMQ之前,需要安装Erlang/OTP支持的版本。RabbitMQ是实现了高级消息队列协议(AMQP)的开源消息代理软件(亦称面向消息的中间件)。RabbitMQ服务器是用Erlang语言编写的。

再确定要下载的RabbitMQ的版本号之后,访问网址选择Erlang版本查看匹配对应Erlang的版本号,并进行下载。

本次下载RabbitMQ版本为3.10.0-1对应的Erlang版本为23.3.4.11-1

RabbitMQ: 3.10.0-1
Erlang: 23.3.4.11-1

2.准备

注意,以下操作,分别在3台机器上执行

配置hosts:

cat << \EOF >> /etc/hosts
10.106.1.241 max-rabbitmq-01
10.106.1.242 max-rabbitmq-02
10.106.1.243 max-rabbitmq-03
EOF

查看hosts配置是否正确:

ping max-rabbitmq-01
ping max-rabbitmq-02
ping max-rabbitmq-03

关闭selinux:

sed -i 's/SELINUX=enforcing/SELINUX=disabled/g' /etc/sysconfig/selinux
setenforce 0

关闭防火墙:

systemctl stop firewalld
systemctl disable firewalld

安装存储库:

curl -s https://packagecloud.io/install/repositories/rabbitmq/erlang/script.rpm.sh | bash
curl -s https://packagecloud.io/install/repositories/rabbitmq/rabbitmq-server/script.rpm.sh | bash

下载rpm安装包:

wget --content-disposition https://packagecloud.io/rabbitmq/erlang/packages/el/7/erlang-23.3.4.11-1.el7.x86_64.rpm/download.rpm?distro_version_id=205
wget --content-disposition https://packagecloud.io/rabbitmq/rabbitmq-server/packages/el/7/rabbitmq-server-3.10.0-1.el7.noarch.rpm/download.rpm?distro_version_id=205

3.安装

注意,以下操作,分别在3台机器上执行

安装:

yum install -y erlang-23.3.4.11-1.el7.x86_64.rpm
yum install -y rabbitmq-server-3.10.0-1.el7.noarch.rpm

启动服务、并设置开机服务:

systemctl start rabbitmq-server
systemctl enable rabbitmq-server

其它服务命令:

# 启动
systemctl start rabbitmq-server
# 查看状态
systemctl status rabbitmq-server
# 停止
systemctl stop rabbitmq-server stop

4.端口授权

RabbitMQ节点绑定到端口(开放服务器TCP套接字)以接受客户端和CLI工具连接。

其他进程和工具(如SELinux)可能会阻止RabbitMQ绑定端口。

当发生这种情况时,节点将无法启动。
CLI工具、客户端库和RabbitMQ节点也可以打开连接(客户端TCP套接字)。

防火墙可以阻止节点和CLI工具之间的通信。

为了确保以下端口可访问,请单独端口开启授权,请直接关闭防火墙。

这里推荐直接关闭防火墙

4369: epmd, RabbitMQ节点和CLI工具使用的对等体发现服务

5672, 5671:用于AMQP 0-9-1和1.0客户端,无论是否使用TLS

25672:用于节点间和CLI工具通信(Erlang分发服务器端口),动态范围分配(默认限制为单个端口,计算为AMQP端口+ 20000)。除非这些端口上的外部连接确实是必要的(例如集群使用联合或在子网外的机器上使用CLI工具),否则这些端口不应该公开。具体请参见组网指南。

35672-35682: CLI工具(Erlang分发客户端端口)用于与节点通信,按动态范围(服务器分发端口+ 10000 ~服务器分发端口+ 10010计算)分配。具体请参见组网指南。

15672: HTTP API客户端,管理UI和rabbitmqadmin(只有启用了管理插件)

61613,61614: STOMP客户端不带TLS或带TLS(仅当启用STOMP插件时)

1883、8883:MQTT客户端,如果启用了MQTT插件,则不使用TLS或使用TLS

15674: STOMP-over- websockets客户端(仅当Web STOMP插件启用时)

15675: MQTT-over- websockets客户端(仅当启用Web MQTT插件时)

15692: Prometheus metrics(仅当Prometheus插件启用时)

5.开启远程登录

注意,以下操作,分别在3台机器上执行

rabbitmq-plugins enable rabbitmq_management
rabbitmq-plugins enable rabbitmq_mqtt

6.添加用户及权限

注意,以下操作,分别在3台机器上执行

添加RabbitMQ用户及权限:

rabbitmqctl add_user admin 你RabbitMQ的密码
rabbitmqctl set_user_tags admin administrator
rabbitmqctl set_permissions -p "/" admin ".*" ".*" ".*"

执行rabbitmqctl add_user时,出现 Done. Don't forget to grant the user permissions to some virtual hosts! See 'rabbitmqctl help set_permissions' to learn more. 这段是提醒记得设置权限。

执行完创建用户及授权命令后,可以试下账号是否能登录:

http://10.106.1.241:15672

http://10.106.1.242:15672

http://10.106.1.243:15672

7.默认集群配置

在max-rabbitmq-02、max-rabbitmq-03节点执行停RabbitMQ服务的命令:

systemctl stop rabbitmq-server

后面的集群配置,为了确保计算机中erlang.cookie文件是一致的,执行以下脚本scp命令。

拷贝.erlang.cookie到max-rabbitmq-02、max-rabbitmq-03节点:

scp /var/lib/rabbitmq/.erlang.cookie root@max-rabbitmq-02:/var/lib/rabbitmq/.erlang.cookie
scp /var/lib/rabbitmq/.erlang.cookie root@max-rabbitmq-03:/var/lib/rabbitmq/.erlang.cookie

重启max-rabbitmq-02、max-rabbitmq-03的RabbitMQ服务:

systemctl start rabbitmq-server

max-rabbitmq-02加入集群:

rabbitmqctl stop_app
rabbitmqctl reset
rabbitmqctl join_cluster rabbit@max-rabbitmq-01
rabbitmqctl start_app
rabbitmqctl cluster_status

max-rabbitmq-03加入集群:

rabbitmqctl stop_app
rabbitmqctl reset
rabbitmqctl join_cluster rabbit@max-rabbitmq-01
rabbitmqctl start_app
rabbitmqctl cluster_status

登录http://10.106.1.241:15672查看集群状态

正常情况如下图:
1.rabbitmq-cluster_status.png

8.安装插件

安装延迟消息队列插件

插件下载地址:rabbitmq_delayed_message_exchange-3.10.0.ez

请注意插件的版本号,这里下载的是与之相对应的版本。

查看插件存放目录:

rabbitmq-plugins directories -s

执行查看存放目录后,显示如下

Plugin archives directory: /usr/lib/rabbitmq/plugins:/usr/lib/rabbitmq/lib/rabbitmq_server-3.10.0/plugins
Plugin expansion directory: /var/lib/rabbitmq/mnesia/rabbit@max-rabbitmq-01-plugins-expand
Enabled plugins file: /etc/rabbitmq/enabled_plugins

rabbitmq_delayed_message_exchange-3.10.0.ez下载至/usr/lib/rabbitmq/lib/rabbitmq_server-3.10.0/plugins目录下。

执行安装命令:

rabbitmq-plugins enable rabbitmq_delayed_message_exchange

3台rabbitmq分别重启服务:

systemctl restart rabbitmq-server

查看插件安装是否成功:

2.rabbitmq_delayed_message_exchange.png

9.镜像集群配置

为什么要配置镜像集群?因为默认集群无法达到高可用的效果。

  • 默认模式:

即普通模式,默认模式,以两个节点(rabbit01,rabbit02)为例来进行说明,对于Queue来说,消息实体只存在于其中一个节点rabbit01(或者rabbit02),rabbit01和rabbit02两个节点仅有相同的元数据,即队列结构。当消息进入rabbit01节点的Queue后,consumer从rabbit02节点消费时,RabbitMQ会临时在rabbit01,rabbit02间进行消息传输,把A中的消息实体取出并经过B发送给consumer,所以consumer应尽量连接每一个节点,从中取消息。即对于同一个逻辑队列,要在多个节点建立物理Queue。否则无论consumer连rabbit01或rabbit02,出口总在rabbit01,会产生瓶颈。当rabbit01节点故障后,rabbit02节点无法取到rabbit01节点中还未消费的消息实体。如果做了消息持久化,那么等到rabbit01节点恢复,然后才可被消费。如果没有消息持久化,就会产生消息丢失的现象。

  • 镜像模式:

把需要的队列做成镜像队列,存在与多个节点属于RabibitMQ的HA方案,该模式解决了普通模式中的问题,其实质和普通模式不同之处在于,消息体会主动在镜像节点间同步,而不是在客户端取数据时临时拉取,该模式带来的副作用也很明显,除了降低系统性能外,如果镜像队列数量过多,加之大量的消息进入,集群内部的网络带宽将会被这种同步通讯大大消耗掉,所以在对可靠性要求比较高的场合中适用。

配置镜像集群:

镜像模式要依赖policy模块,policy中文来说是政策,策略的意思,那么他就是要设置,那些Exchanges或者queue的数据需要复制,同步,如何复制同步?对就是做这些的。

  1. 进入Policies配置页面:

通过Web控制台操作,随便找一台节点服务,这里以max-rabbitmq-01节点为例,按下图中标记出的数字先后顺序,点击进入Policies配置页面。
3.rabbitmq_policies.png

  1. Policies配置页面介绍:
    4.rabbitmq_policies.png

参数解释:

name: 策略名称,自定义命名;
Pattern: 匹配符,只有一个代表匹配所有,test为匹配名称为test的exchanges或者queue;
***Apply to:***使用对象,使用Exchanges and queues;
Priority:配置了多个策略时候的优先级,值越大,优先级越高。(单个策略配置意义不大),注意:没有指定优先级的消息会将优先级以0对待,即没有配置Priority时默认为0。 对于超过优先级队列所定最大优先级的消息,优先级以最大优先级对待;
Definition: 匹配类型,他分为3种模式:all-所有(所有的queue),exctly-部分(需配置ha-params参数,此参数为int类型比如3,众多集群中的随机3台机器),nodes-指定(需配置ha-params参数,此参数为数组类型比如[“3rabbit@F”,“rabbit@G”]这样指定为F与G这2台机器。)

  1. 查验镜像集群是否生效:
    查看Queues,会发现在Node字段中,默认指向了Master,当Master故障后,会切换至新选择产生的Maseter,可自行测试验证,比如将max-rabbitmq-01服务停掉,再来看此处的Node字段,是不是指向了新的节点上。
    5.rabbitmq_queues.png
    此至,镜像集群配置已经完成。

10.引用Reference

CentOS8搭建nfs服务
Kubernetes 1.25.4版本安装
kubeasz安装kubernetes1.25.5
k8s一键安装redis单机版
k8s一键安装mysql8单机版
k8s部署springboot应用
Docker安装及学习
Docker制作springboot运行应用镜像
Docker制作Java8环境镜像
Docker安装Mysql5.7.31
Docker安装Mysql8.1.0
Elasticsearch单机版本安装
Elasticsearch集群安装
ELK安装
Docker安装ELK
zookeeper集群安装
Nginx日志切割
RabbitMQ集群安装
springboot集成prometheus+grafana
windows11安装android应用

  • 0
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值