RabbitMQ集群安装
1.前言
OS: CentOS Linux release 7.9.2009 (Core)
机器:
IP | node | cpu | 内存 | 存储 |
---|---|---|---|---|
10.106.1.241 | max-rabbitmg-01 | 8 核 | 16 G | 100 G |
10.106.1.242 | max-rabbitmg-02 | 8 核 | 16 G | 100 G |
10.106.1.243 | max-rabbitmg-03 | 8 核 | 16 G | 100 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查看集群状态
正常情况如下图:
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
查看插件安装是否成功:
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的数据需要复制,同步,如何复制同步?对就是做这些的。
- 进入Policies配置页面:
通过Web控制台操作,随便找一台节点服务,这里以max-rabbitmq-01节点为例,按下图中标记出的数字先后顺序,点击进入Policies配置页面。
-
Policies配置页面介绍:
参数解释:
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台机器。)文章来源:https://www.toymoban.com/news/detail-451043.html
-
查验镜像集群是否生效:
查看Queues,会发现在Node字段中,默认指向了Master,当Master故障后,会切换至新选择产生的Maseter,可自行测试验证,比如将max-rabbitmq-01服务停掉,再来看此处的Node字段,是不是指向了新的节点上。
此至,镜像集群配置已经完成。
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应用文章来源地址https://www.toymoban.com/news/detail-451043.html
到了这里,关于RabbitMQ集群安装的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!