消息中间件:RabbitMQ镜像集群部署配置全流程

目录

1、特点

2、RabbitMQ的消息传递模式

2.1、简单模式(Simple Mode)

2.2、工作队列模式(Work Queue Mode)

2.3、发布/订阅模式(Publish/Subscribe Mode)

2.4、路由模式(Routing Mode)

3、RabbitMQ集群

3.1、RabbitMQ部署和集群配置的三种模式

3.2、RabbitMQ集群的基本概念

3.2.1、节点类型

3.2.2、核心组件

4、rabbitMQ普通集群部署

4.1、环境准备

4.2、安装relang环境(三台服务器安装配置一致)

4.3、安装rabbitMQ(三台服务器安装配置一致)

下载安装

启动

4.4、开启web访问页面(启用插件)

4.5、访问(新增用户,设置权限)

4.6、创建日志、数据保存目录

4.7、创建配置文件并配置

4.8、构建erlang集群

4.9、将节点加入集群,并指定角色

4.10、查看集群状态

4.11、验证

5、rabbitMQ镜像集群配置

RabbitMQ 是一个基于 AMQP(高级消息队列协议)的开源的消息代理。

1、特点

  1.   支持多种协议(AMQP, MQTT, STOMP等)。
  2.   强大的消息路由功能。
  3.   支持事务和确认机制,保证消息传递的可靠性。
  4.   提供丰富的管理界面和监控功能。

2、RabbitMQ的消息传递模式

2.1、简单模式(Simple Mode)

P2P模式包含三个角色:消息队列(Queue)、发送者(Sender)、接收者(Receiver)。每个消息都被发送到一个特定的队列,接收者从队列中获取消息。队列保留着消息,直到它们被消费或超时。适用于简单的点对点通信场景

  • 每个消息只有一个消费者(Consumer),即一旦被消费,消息就不再在消息队列中
  • 发送者和接收者之间在时间上没有依赖性,也就是说当发送者发送了消息之后,不管接收者有没有正在运行它不会影响到消息被发送到队列
  • 接收者在成功接收消息之后需向队列应答成功
  • 如果希望发送的每个消息都会被成功处理的话,那么需要P2P模式

2.2、工作队列模式(Work Queue Mode)

适用于需要并行处理任务的场景,如图像处理、数据计算等。

特点:

允许多个消费者从同一个队列中接收消息。这种模式通过在消费者之间分配任务来提高消息处理的效率。

2.3、发布/订阅模式(Publish/Subscribe Mode)

P2P模式包含三个角色:消息队列(Queue)、发送者(Sender)、接收者(Receiver)。每个消息都被发送到一个特定的队列,接收者从队列中获取消息。队列保留着消息,直到它们被消费或超时。适用于需要消息广播的场景,例如新闻更新、日志记录等。

特点:

  1. 每个消息可以有多个消费者发布者和订阅者之间有时间上的依赖性。
  2. 针对某个主题(Topic)的订阅者,它必须创建一个订阅者之后,才能消费发布者的消息
  3. 为了消费消息,订阅者必须保持运行的状态
  4. 如果希望发送的消息可以不被做任何处理、或者只被一个消息者处理、或者可以被多个消费者处理的话,那么可以采用Pub/Sub模型

2.4、路由模式(Routing Mode)

适用于需要根据特定条件或规则将消息路由到不同处理者的场景。

特点:

生产者将消息发送到交换机,交换机根据消息的路由键(Routing Key)将消息发送到特定的队列。消费者监听这些队列以接收消息。

3、RabbitMQ集群

3.1、RabbitMQ部署和集群配置的三种模式

1、单机模式。

2、普通模式(默认的集群模式)。

3、镜像模式(把需要的队列做成镜像队列,存在于多个节点,属于RabbiMQ的HA方案,在对业务可靠性要求较高的场合中比较适合)。要实现镜像模式,需要先搭建出普通集群模式,在这个模式的基础上再配置镜像模式以实现高可用。

3.2、RabbitMQ集群的基本概念

在 RabbitMQ 集群中,所有节点都会同步元数据,包括队列、交换器、绑定和 vhost 的定义。这意味着无论在哪个节点上创建或修改这些资源,其他节点都会自动更新。

3.2.1、节点类型

磁盘节点:默认的节点类型,将元数据(包括队列、交换器、绑定和 vhost 的定义)存储在磁盘上。集群中至少需要一个磁盘节点来持久化元数据。

内存节点:将元数据存储在内存中,不提供持久化。通常用于提高性能,但重启后元数据会丢失。

内存节点虽然不写入磁盘,但是它执行比磁盘节点要好。集群中,只需要一个磁盘节点来保存数据就足够了

如果集群中只有内存节点,那么不能停止它们,否则所有的状态,消息等都会丢失。

3.2.2、核心组件

Broker:消息队列服务器实体

ConnectionFactory(连接管理器):应用程序与Rabbit之间建立连接的管理器,程序代码中使用;

Exchange(交换器):用于接受、分配消息;

Routing Key:路由关键字,exchange根据这个关键字进行消息投递;

Queue(队列):用于存储生产者的消息;

Bindding:绑定,把exchange和queue按照路由规则绑定起来。

vhost:虚拟主机,一个broker里可以开设多个vhost,用作不同用户的权限分离.

producer:消息生产者,就是投递消息的程序。

consumer:消息消费者,就是接受消息的程序。

channel:(信道)消息通道,在客户端的每个连接里,可建立多个channel,每个channel代表一个会话任务。消息推送使用的通道;

4、rabbitMQ普通集群部署

4.1、环境准备

主机名

ip地址

版本

rebbitMQ01

10.211.55.57

aarch64的centos9

rebbitMQ02

10.211.55.58

aarch64的centos9

rebbitMQ03

10.211.55.59

aarch64的centos9

安装依赖(三台服务器安装配置一致)

yum install -y *epel* gcc-c++ unixODBC openssl-devel ncurses-devel

配置host文件

[root@rabbitMQ2 ~]# vim /etc/hosts 

10.211.55.57 rabbitMQ1

10.211.55.58 rabbitMQ2

10.211.55.59 rabbitMQ3

4.2、安装relang环境三台服务器安装配置一致

下载地址:https://github.com/rabbitmq/erlang-rpm/releases/

根据自身环境下载安装

wget https://github.com/rabbitmq/erlang-rpm/releases/download/v27.2.2/erlang-27.2.2-1.amzn2023.aarch61.rpm

rpm -ivh erlang-27.2.2-1.amzn2023.aarch61.rpm 

[root@rabbitMQ1 ~]# rpm -ivh erlang-27.2.2-1.amzn2023.aarch61.rpm Verifying...                          ################################# [100%]Preparing...                          ################################# [100%]Updating / installing...1:erlang-27.2.2-1.amzn2023         ################################# [100%]

验证是否安装成功

[root@rabbitMQ1 ~]# erlErlang/OTP 27 [erts-15.2.2] [source] [64-bit] [smp:2:2] [ds:2:2:10] [async-threads:1] [jit]Eshell V15.2.2 (press Ctrl+G to abort, type help(). for help)

4.3、安装rabbitMQ(三台服务器安装配置一致)

官方安装教程:Installing on RPM-based Linux | RabbitMQ

下载安装

[root@rabbitMQ1 ~]# wget https://github.com/rabbitmq/rabbitmq-server/releases/download/v1.0.5/rabbitmq-server-1.0.5-1.el8.noarch.rpm

[root@rabbitMQ1 ~]# yum localinstall -y rabbitmq-server-1.0.5-1.el8.noarch.rpm

启动

systemctl start rabbitmq-server

systemctl enable rabbitmq-server

4.4、开启web访问页面(启用插件)

rabbitmq-plugins enable rabbitmq_management

4.5、访问(新增用户,设置权限)

http://10.211.55.57:15672/

http://ip:15672

用户名:guest

密码:guest

上述用户仅支持本机登录

远程登录需添加新用户

添加新用户

rabbitmqctl add_user zjp zjp

设置管理员

rabbitmqctl set_user_tags zjp administrator

设置新用户的权限

rabbitmqctl set_permissions -p / zjp ".*" ".*" ".*"

查看用户

rabbitmqctl list_users

备注:

4369 -- erlang端口

5672 --程序连接端口

15672 -– web界面访问端口

25672 -- server间内部通信端口

4.6、创建日志、数据保存目录

三个服务器均操作

[root@rabbitMQ1 ~]# mkdir -p /data/rabbitmq/data[root@rabbitMQ1 ~]# mkdir -p /data/rabbitmq/logs[root@rabbitMQ1 ~]# chmod 777 -R /data/rabbitmq[root@rabbitMQ1 ~]# chown rabbitmq.rabbitmq /data/ -R

4.7、创建配置文件并配置

RABBITMQ_MNESIA_BASE=/data/rabbitmq/data

RABBITMQ_LOG_BASE=/data/rabbitmq/logs

填入上述配置

[root@rabbitMQ1 ~]# vim /etc/rabbitmq/rabbitmq-env.conf[root@rabbitMQ1 ~]# cat /etc/rabbitmq/rabbitmq-env.conf RABBITMQ_MNESIA_BASE=/data/rabbitmq/dataRABBITMQ_LOG_BASE=/data/rabbitmq/logs

配置完后三台机子重启服务(可等下面erlang集群构建后再一起重启)

systemctl restart rabbitmq-server

4.8、构建erlang集群

Rabbitmq的集群是依附于erlang的集群来工作的,所以必须先构建起erlang的集群。

erlang集群构建方法很简单,将三台机子中的其中一台的这个文件/var/lib/rabbitmq/.erlang.cookie,的内容拷贝到其他两台即可,拷贝过去后需要设置400权限。

查看rabbitmq-1的.erlang.cookie文件内容,(其他两台机器这个文件的内容替换成这个文件的内容就构成了一个erlang集群)

[root@rabbitMQ1 ~]# cat /var/lib/rabbitmq/.erlang.cookieJXUSRTWCVLRVAMPQWISW

设置/var/lib/rabbitmq/.erlang.cookie的权限为400

[root@rabbitMQ1 ~]# chmod 400 /var/lib/rabbitmq/.erlang.cookie

将rabbitmq-1文件的内容拷贝到其他两台机器rabbitmq-2、rabbitmq-3里

[root@rabbitMQ1 ~]# scp /var/lib/rabbitmq/.erlang.cookie root@10.211.55.58:/var/lib/rabbitmq/[root@rabbitMQ1 ~]# scp /var/lib/rabbitmq/.erlang.cookie root@10.211.55.59:/var/lib/rabbitmq/

重启rebbitmq-2 rebbitmq-3服务(这里因为rabbitmq-1是传过去的本身没有改变所以不需要重启)

systemctl restart rabbitmq-server

4.9、将节点加入集群,指定角色

加入前均先停止并初始化节点

[root@rabbitMQ2 ~]# rabbitmqctl stop_appStopping rabbit application on node rabbit@rabbitMQ2 ...

[root@rabbitMQ2 ~]# rabbitmqctl reset(可不初始化,初始化会使前面创建的用户也删掉)

Resetting node rabbit@rabbitMQ2 ...

rabbitMQ2、rabbitMQ3加入内存节点

rabbit@rabbitMQ1怎么查?[root@rabbitMQ1 ~]# rabbitmqctl cluster_status[root@rabbitMQ2 ~]# rabbitmqctl join_cluster --ram rabbit@rabbitMQ1Clustering node rabbit@rabbitMQ2 with rabbit@rabbitMQ1

加入后启动节点

rabbitmqctl start_app

默认rabbitMQ1启动后是磁盘节点,在这个cluster命令下,mq-2和mq-3是内存节点,

MQ1是磁盘节点。

如果要使mq-2、mq-3都是磁盘节点,去掉--ram参数即可。

(3)如果想要更改节点类型,可以使用命令rabbitmqctl change_cluster_node_type

disc(ram),前提是必须停掉rabbitmq应用

4.10、查看集群状态

在 RabbitMQ 集群任意节点上执行 rabbitmqctl cluster_status来查看是否集群配置成功。

MQ1磁盘节点上面查看(集群里的任意一台机器查看都行,这里选择的是MQ1)

4.11、验证

三台机器访问15672端口的web页面

根据界面提示创建一条队列

其他两台机器的web界面也能看到刚刚创建的队列

5、rabbitMQ镜像集群配置

启用插件rabbitmq_federation

[root@rabbitMQ2 ~]# rabbitmq-plugins enable rabbitmq_federationEnabling plugins on node rabbit@rabbitMQ2:rabbitmq_federationThe following plugins have been configured:rabbitmq_federationrabbitmq_managementrabbitmq_management_agentrabbitmq_web_dispatchApplying plugin configuration to rabbit@rabbitMQ2...The following plugins have been enabled:rabbitmq_federation

在集群里的任意一台机器上输入

rabbitmqctl set_policy  federate-me "^" '{"ha-mode":"all"}'

[root@rabbitMQ2 ~]# rabbitmqctl set_policy federate-me "^" '{"federation-upstream-set":"all"}'Setting policy "federate-me" for pattern "^" to "{"federation-upstream-set":"all"}" with priority "0" for vhost "/" ...

federate-me是策略名,^表示匹配所有队列,{"ha-mode":"all"},策略模式all即复制到所有节点,包含新增节点(已有队列不会生效)

查看效果

至此,rabbitMQ的基本部署,集群配置,镜像队列设置就完事了,感谢观看学习,文章有问题可留言作者会查看并分析处理🙂

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.rhkb.cn/news/17154.html

如若内容造成侵权/违法违规/事实不符,请联系长河编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

财务主题数据分析-企业盈利能力分析

企业盈利能力数据主要体现在财务三张表中的利润表里面,盈利能力需要重点需要关注的指标有:毛利率、净利率、净利润增长率、营业成本增长率等; 接下来我们分析一下某上市公司披露的财务数据,看看该企业盈利能力如何: …

图数据库neo4j进阶(一):csv文件导入节点及关系

CSV 一、load csv二、neo4j-admin import<一>、导入入口<二>、文件准备<三>、命令详解 一、load csv 在neo4j Browser中使用Cypher语句LOAD CSV,对于数据量比较大的情况,建议先运行create constraint语句来生成约束 create constraint for (s:Student) req…

npm包管理工具

包管理工具 npm 包管理工具 介绍 Node Package Manager&#xff1a;也就是Node包管理工具但是目前已经不仅仅是Node包管理器&#xff0c;在前端项目中我们也使用它来管理依赖的包比如 vue、vue-router、vuex、express、koa 下载和安装 npm属于Node的管理工具&#xff0c;安…

MyBatis映射文件 <resultMap> 元素详解与示例

引言 <resultMap> 是 MyBatis 中最核心的映射配置元素&#xff0c;用于解决数据库字段与 Java 对象属性之间的复杂映射问题&#xff0c;尤其是字段名不一致、嵌套对象关联、集合映射等场景。ResultMap 的设计思想是&#xff0c;对简单的语句做到零配置&#xff0c;对于复…

时间盲注Boolen盲注之获取表、列、具体数据的函数

时间盲注 时间盲注&#xff08;Time-Based Blind SQL Injection&#xff09;是一种利用数据库响应时间的差异来推断数据的SQL注入技术。它的核心原理是通过构造特定的SQL查询&#xff0c;使得数据库在执行查询时产生时间延迟&#xff0c;从而根据延迟的有无来推断数据。 时间…

通过操作系统中的IO模型理解Java中的BIO,NIO,AIO

操作系统中的三种IO模型 阻塞I/O 先来看看阻塞 I/O&#xff0c;当用户程序执行 read&#xff0c;线程会被阻塞 一直等到内核数据准备好&#xff0c;并把数据从内核缓冲区拷贝到应用程序的缓冲区中&#xff0c;当拷贝过程完成&#xff0c;read 才会返回 注意&#xff1a;阻塞…

JUC并发—2.Thread源码分析及案例应用

大纲 1.什么是线程以及并发编程 2.微服务注册中心案例 3.以工作线程模式开启微服务的注册和心跳线程 4.微服务注册中心的服务注册功能 5.微服务注册中心的心跳续约功能 6.微服务的存活状态监控线程 7.以daemon模式运行微服务的存活监控线程 8.一般不常用到的ThreadGrou…

Excel函数公式合并相同项目的行数据

今天公司同事问我&#xff0c;如何将相同项目的数据行的行数据合并起来 于是我首先想到textjoin函数&#xff0c;但是条件筛选怎么办&#xff0c;后来想了下&#xff0c;可以用filter函数或者if IF公式如下 TEXTJOIN("|",TRUE,IF($A$2:$A$30A2,$B$2:$B$30,"&q…

【DeepSeek系列专栏大纲:深入探索与实践深度学习】

第一部分:深度学习基础篇 第1章:深度学习概览 1.1 深度学习的历史背景与发展轨迹 1.2 深度学习与机器学习、传统人工智能的区别与联系 1.3 深度学习的核心组件与概念解析 神经网络基础 激活函数的作用与类型 损失函数与优化算法的选择 1.4 深度学习框架简介与选择建议 第2…

Jenkins 通过 Execute Shell 执行 shell 脚本 七

Jenkins 通过 Execute Shell 执行 shell 脚本 七 一、创建 .sh 文件 项目目录下新建 .sh 文件 jenkins-script\shell\ci_android_master.sh添加 Execute Shell 模块 在 Command 中添加 # 获取 .sh 路径 CI_ANDROID_MASTER_PATH"${WORKSPACE}/jenkins-script/shell/…

NixHomepage - 简单的个人网站

&#x1f4bb; NixHomepage - 简单的个人网站 推荐下个人的开源项目&#xff0c;演示网站&#xff0c;项目链接 https://github.com/nixgnauhcuy/NixHomepage&#xff0c;喜欢的话可以为我的项目点个 Star~ &#x1f4f7; 预览 ⚙️ 功能特性 多平台适配 明亮/暗黑模式切换 W…

八大排序——简单选择排序

目录 1.1基本操作&#xff1a; 1.2动态图&#xff1a; 1.3代码&#xff1a; 代码解释 1. main 方法 2. selectSort 方法 示例运行过程 初始数组 每轮排序后的数组 最终排序结果 代码总结 1.1基本操作&#xff1a; 选择排序&#xff08;select sorting&#xff09;也…

2025有哪些关键词优化工具好用

越来越多的企业和个人开始意识到搜索引擎优化&#xff08;SEO&#xff09;对于网站曝光和业务增长的重要性。在SEO优化的过程中&#xff0c;关键词优化占据着至关重要的地位。关键词是用户在搜索引擎中输入的词语&#xff0c;优化关键词有助于提高网站在搜索结果中的排名&#…

(Xshell 8 + Xftp 8)下载安装miniconda至服务器指定目录+配置虚拟环境

一一一一 Xshell 8 Xftp 8均已登录&#xff0c;miniconda.sh安装包已经放在服务器指定目录中 二二二二 赋予脚本执行权限 chmod x Miniconda3-latest-Linux-x86_64.sh安装miniconda ./Miniconda3-latest-Linux-x86_64.sh -p /data1/huyan/zhangyifeng/miniconda3一直Enter…

Python学习

1 class MyClass:def __init__(self):print("Constructor called.")def __str__(self):return "MyClass instance"obj MyClass()print(obj) # 调用__str__方法 在Python中&#xff0c;__str__是一个特殊的方法&#xff0c;当你使用print()函数打印一个…

vueDevtools和文档整合(前端常用工具/插件)

3.vueDevtools安装 chrome插件vue-devtools下载地址&#xff1a; https://chrome.zzzmh.cn/info/nhdogjmejiglipccpnnnanhbledajbpd下载完放到chrome的拓展程序中即可&#xff0c;注意点&#xff1a;vue2和vue3下载版本不同&#xff0c;vue2的话使用稍微老点的版本才行。 详细…

dify.ai 配置链接到阿里云百练等云厂商的 DeepSeek 模型

要将 dify.ai 配置链接到阿里云百练等云厂商的 DeepSeek 模型. 申请阿里云百练的KEY 添加模型 测试模型

将Sqlite3数据库挂在内存上处理

创作灵感&#xff1a;最近把小学生的口算题从2位数改到3位数&#xff0c;100以内四则运算练习&#xff08;千纬数学&#xff09;再次更新&#xff0c;选取难题-CSDN博客要不断刷题目&#xff0c;以前100以内的加减乘除也是这样刷出来的&#xff0c;代码如下&#xff1a; impor…

【第1章:深度学习概览——1.1 深度学习的历史背景与发展轨迹】

你可能不知道,现在能自动给照片上色、帮医生看CT片、甚至写诗作曲的AI技术,其实早在二战时期就埋下了种子。这段故事里充满了天才的灵光乍现、整个行业的集体打脸、以及无数个"山穷水尽疑无路,柳暗花明又一村"的神转折。系好安全带,我们要从1943年的脑科学实验室…

九.Spring Boot使用 ShardingSphere + MyBatis + Druid 进行分库分表

文章目录 前言一、引入依赖二、创建一个light-db_1备用数据库三、配置文件 application-dev.yml四、创建shardingsphere-config.yml完整项目结构 五、测试总结 前言 在现代化微服务架构中&#xff0c;随着数据量的不断增长&#xff0c;单一数据库已难以满足高可用性、扩展性和…