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>	

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

运维小路

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

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

相关推荐
EMTime2 小时前
Docker运行OpenWRT
运维·docker·容器
lolo大魔王2 小时前
Linux 文件系统超全面详解(原理、结构、挂载、分区、inode、日志、管理命令)
linux·运维·服务器
磊 子4 小时前
详细讲解一下epoll
linux·io·epoll·io多路复用
printfLILEI4 小时前
php中的类与对象以及反序列化
linux·开发语言·php
zyl837215 小时前
Docker 使用手册
运维·docker·容器
古月方枘Fry5 小时前
MGRE实验
运维·服务器
叠叠乐6 小时前
redmi k90 pro max 强解BL,刷海外rom, 并刷入sukisu ultra
linux
stolentime6 小时前
FreeDomain 本地开发环境快速搭建指南
运维·服务器·网络
xiaoye-duck6 小时前
《Linux系统编程》Linux 进程间通信之管道基础解析:从匿名管道原理到基于管道的进程池实现
linux