RabbitMQ-伪集群部署(Cluster)

作者介绍:简历上没有一个精通的运维工程师。请点击上方的蓝色《运维小路》关注我,下面的思维导图也是预计更新的内容和当前进度(不定时更新)。

中间件,我给它的定义就是为了实现某系业务功能依赖的软件,包括如下部分:

Web服务器

代理服务器

ZooKeeper

Kafka

RabbitMQ(本章节)

前面我们讲解了部署RabbitMQ的相关概念和操作,但是都是使用单机,作为一个分布式系统,怎么能没有集群版呢,今天我们就来讲解集群部署,虽然是伪集群,但是方便我们更好的理解后面的镜像队列(Mirrored Queues)。

1.配置hosts

前面有讲过RabbitMQ依赖主机名存储数据,实际上集群通信也是依赖主机名,所以我们需要先配置hosts。

bash 复制代码
#3台集群都需要配置
vi /etc/hosts

192.168.31.151 rabbitmq01
192.168.31.152 rabbitmq02
192.168.31.153 rabbitmq03

2.配置主机名

csharp 复制代码
#151执行
hostnamectl set-hostname rabbitmq01
#152执行
hostnamectl set-hostname rabbitmq02
#153执行
hostnamectl set-hostname rabbitmq03

3.启动节点rabbitmq01

RabbitMQ启动会自动生成.erlang.cookie文件,这个文件是我们维持集群的重要的配置文件,节点之间必须使用相同的值,所以只能先启动一个节点,其他节点复用他。

csharp 复制代码
[root@rabbitmq01 rabbitmq_server-3.8.35]# ./sbin/rabbitmq-server -detached
[root@rabbitmq01 rabbitmq_server-3.8.35]# cat /root/.erlang.cookie OBTCJOYUIEGQSBZKSDBR
[root@rabbitmq01 rabbitmq_server-3.8.35]# 

4.复制.erlang.cookie到其他节点

RabbitMQ默认读取的HOME这个变量,我们使用root登录操作,所以他会在root目录。

bash 复制代码
scp  /root/.erlang.cookie rabbitmq02:/root/
scp  /root/.erlang.cookie rabbitmq02:/root/

5.rabbitmq02加入集群

先需要按照单机的方式启动RabbitMQ,然后再停止MQ进程,再使用命令加入集群。

ruby 复制代码
[root@rabbitmq02 rabbitmq_server-3.8.35]# ./sbin/rabbitmqctl stop_app
Stopping rabbit application on node rabbit@rabbitmq02 ...
[root@rabbitmq02 rabbitmq_server-3.8.35]# ./sbin/rabbitmqctl reset
Resetting node rabbit@rabbitmq02 ...
[root@rabbitmq02 rabbitmq_server-3.8.35]# ./sbin/rabbitmqctl join_cluster rabbit@rabbitmq01
Clustering node rabbit@rabbitmq02 with rabbit@rabbitmq01
[root@rabbitmq02 rabbitmq_server-3.8.35]# ./sbin/rabbitmqctl start_app
Starting node rabbit@rabbitmq02 ...
[root@rabbitmq02 rabbitmq_server-3.8.35]# 

6.rabbitmq03也以同样的方式加入集群

7.查询集群状态

总共3个节点,都是磁盘节点,目前3个节点都是运行状态,没有分区和告警。

scss 复制代码
[root@rabbitmq03 rabbitmq_server-3.8.35]# ./sbin/rabbitmqctl cluster_status
Cluster status of node rabbit@rabbitmq03 ...
Basics

Cluster name: rabbit@rabbitmq03

Disk Nodes

rabbit@rabbitmq01
rabbit@rabbitmq02
rabbit@rabbitmq03

Running Nodes

rabbit@rabbitmq01
rabbit@rabbitmq02
rabbit@rabbitmq03

Versions

rabbit@rabbitmq01: RabbitMQ 3.8.35 on Erlang 23.3.2
rabbit@rabbitmq02: RabbitMQ 3.8.35 on Erlang 23.3.2
rabbit@rabbitmq03: RabbitMQ 3.8.35 on Erlang 23.3.2

Maintenance status

Node: rabbit@rabbitmq01, status: not under maintenance
Node: rabbit@rabbitmq02, status: not under maintenance
Node: rabbit@rabbitmq03, status: not under maintenance

Alarms

(none)

Network Partitions

(none)

Listeners

Node: rabbit@rabbitmq01, interface: [::], port: 25672, protocol: clustering, purpose: inter-node and CLI tool communication
Node: rabbit@rabbitmq01, interface: [::], port: 5672, protocol: amqp, purpose: AMQP 0-9-1 and AMQP 1.0
Node: rabbit@rabbitmq02, interface: [::], port: 25672, protocol: clustering, purpose: inter-node and CLI tool communication
Node: rabbit@rabbitmq02, interface: [::], port: 5672, protocol: amqp, purpose: AMQP 0-9-1 and AMQP 1.0
Node: rabbit@rabbitmq03, interface: [::], port: 25672, protocol: clustering, purpose: inter-node and CLI tool communication
Node: rabbit@rabbitmq03, interface: [::], port: 5672, protocol: amqp, purpose: AMQP 0-9-1 and AMQP 1.0

Feature flags

Flag: implicit_default_bindings, state: enabled
Flag: maintenance_mode_status, state: enabled
Flag: quorum_queue, state: enabled
Flag: user_limits, state: enabled
Flag: virtual_host_metadata, state: enabled
[root@rabbitmq03 rabbitmq_server-3.8.35]# 

到这这里集群就算部署完成。

8.web管理查看

出现2个节点没有数据,是因为其他2个节点还未开通web管理功能。

9.集群使用

正常写入消息和和消费都没有问题,但是如果我们出现节点宕机,就会出现无法消费的问题,因为前面讲到过,内存节点和元数据的问题,他们是可以同步的或者存储在本地。但是消息并不会,你可以理解消息是存在master节点的,当前的配置是不会同步消息的。如果master宕机就无法发送和消费消息。

下图就是当前整个伪集群运行情况,已经存在了大量的消息。

下面查询结果就是当前消息存储在哪里,已经镜像在哪里(由于我们还没有开启镜像队列,所以他的镜像为空)。

perl 复制代码
[root@rabbitmq03 rabbitmq_server-3.8.35]# ./sbin/rabbitmqctl list_queues name pid slave_pids
Timeout: 60.0 seconds ...
Listing queues for vhost / ...
name	pid	slave_pids
test06	<rabbit@rabbitmq01.1749897041.575.0>	
test07	<rabbit@rabbitmq01.1749897041.578.0>	
test04	<rabbit@rabbitmq01.1749897041.581.0>	
test02	<rabbit@rabbitmq01.1749897041.584.0>	
test05	<rabbit@rabbitmq01.1749897041.587.0>	

存储数据节点离线,集群里面的数据消失,所以他是一个伪集群。

运维小路

一个不会开发的运维!一个要学开发的运维!一个学不会开发的运维!欢迎大家骚扰的运维!

关注微信公众号《运维小路》获取更多内容。

相关推荐
悄悄敲敲敲4 分钟前
操作系统的运行-中断
linux·操作系统
邵小的运维之路10 分钟前
静态路由与 BFD 联动
运维·网络·智能路由器
代码游侠11 分钟前
学习笔记——Linux 进程管理笔记
linux·运维·笔记·学习·算法
Logic10115 分钟前
《数据库运维》 郭文明 实验5 数据库性能监视与优化实验核心操作与思路解析
运维·数据库·sql·mysql·计算机网络技术·形考作业·国家开放大学
ooolmf16 分钟前
【无标题】TemperatureMonitor.m matlab2024串口监控温度run_temperature_monitor.m
linux·运维·网络
UP_Continue24 分钟前
Linux--vim编辑器
linux·编辑器·vim
鹿衔`28 分钟前
StarRocks 4.0.2 (CDH 环境)与Paimon数据湖集成混合部署文档
linux·硬件架构·paimon·starroks
lingggggaaaa34 分钟前
CS配合CrossC2插件,实现MacOS/Linux上线
linux·运维·笔记·安全·macos
shawnyz35 分钟前
RHCSE--SHELL--LNMP+LAMP脚本实验
linux
java_logo41 分钟前
AdguardHome Docker 容器化部署指南
运维·docker·容器·jenkins·adguardhome·部署adguardhome·docker adguard