普通集群与镜像集群配置

一. 环境准备

关闭防火墙和selinux,进行时间同步

rabbitmq-1

Rocky_linux9.4

192.168.226.22
rabbitmq-2Rocky_linux9.4192.168.226.23
rabbitmq-3Rocky_linux9.4192.168.226.24
修改主机名#192.168.226.22
hostnamectl set-hostname rabbitmq-1#192.168.226.22
hostnamectl set-hostname rabbitmq-2#192.168.226.22
hostnamectl set-hostname rabbitmq-3注:修改完后都手动断开重新连接,不要使用bash

配置域名解析,三台虚拟机都配置

cat >> /etc/hosts <<EOF
192.168.226.22 rabbitmq-1
192.168.226.23 rabbitmq-2
192.168.226.24 rabbitmq-3
EOF

参考博文RabbitMQ消息中间件介绍与安装-CSDN博客 

三台虚拟机都安装RabbitMQ,并进入到web管理界面,如下图:

 

 

 

 二. 开始配置集群

 

1.首先创建好数据存放目录和日志存放目录

[root@rabbitmq-1 ~]# mkdir -p /data/rabbitmq/data
[root@rabbitmq-1 ~]# mkdir -p /data/rabbitmq/logs
[root@rabbitmq-1 ~]# chmod 777 -R /data/rabbitmq
[root@rabbitmq-1 ~]# chown rabbitmq.rabbitmq /data/ -R创建配置文件:
[root@rabbitmq-1 ~]#cat > /etc/rabbitmq/rabbitmq-env.conf <<EOF
RABBITMQ_MNESIA_BASE=/data/rabbitmq/data
RABBITMQ_LOG_BASE=/data/rabbitmq/logs
EOF重启服务
[root@rabbitmq-1 ~]# systemctl restart rabbitmq-server

2. 拷⻉erlang.cookie

Rabbitmq的集群是依附于erlang的集群来⼯作的,所以必须先构建起erlang的集群景象。Erlang的集群中

各节点是经由过程⼀个magic cookie来实现的,这个cookie存放在/var/lib/rabbitmq/.erlang.cookie中,⽂件是400的权限。所以必须保证各节点cookie⼀致,不然节点之间就⽆法通信.

(官方在介绍集群的文档中提到过.erlang.cookie 一般会存在这两个地址:第一个是home/.erlang.cookie;第二个地方就是/var/lib/rabbitmq/.erlang.cookie。如果我们使用解压缩方式安装部署的rabbitmq,那么这个文件会在{home}目录下,也就是$home/.erlang.cookie。如果我们使用rpm等安装包方式进行安装的,那么这个文件会在/var/lib/rabbitmq目录下。)  

[root@rabbitmq-1 ~]# cat /var/lib/rabbitmq/.erlang.cookie
HVYPGZCOFCYBEZHGUHQB⽤scp的⽅式将rabbitmq-1节点的.erlang.cookie的值复制到其他两个节点中,一次保证cookie一致。
[root@rabbitmq-1 ~]# scp /var/lib/rabbitmq/.erlang.cookie root@192.168.226.23:/var/lib/rabbitmq/
[root@rabbitmq-1 ~]# scp /var/lib/rabbitmq/.erlang.cookie root@192.168.226.24:/var/lib/rabbitmq/

3.将rabbitmq-2、rabbitmq-3作为内存节点加⼊rabbitmq-1节点集群中

 

在rabbitmq-2、rabbitmq-3执⾏如下命令:
[root@rabbitmq-2 ~]# systemctl restart rabbitmq-server
[root@rabbitmq-2 ~]# rabbitmqctl stop_app  #停止节点
[root@rabbitmq-2 ~]# rabbitmqctl reset   #如果有数据需要重置,没有则不用
[root@rabbitmq-2 ~]# rabbitmqctl join_cluster --ram rabbit@rabbitmq-1  #添加到内存节点
Clustering node 'rabbit@rabbitmq-2' with 'rabbit@rabbitmq-1' ...
[root@rabbitmq-2 ~]# rabbitmqctl start_app  #启动节点
Starting node 'rabbit@rabbitmq-2' ...======================================================================(1)默认rabbitmq启动后是磁盘节点,在这个cluster命令下,mq-2和mq-3是内存节点,
mq-1是磁盘节点。
(2)如果要使mq-2、mq-3都是磁盘节点,去掉--ram参数即可。
(3)如果想要更改节点类型,可以使⽤命令rabbitmqctl change_cluster_node_type
disc(ram),前提是必须停掉rabbit应⽤
注:
#如果有需要使用磁盘节点加入集群,使用下述命令格式,默认即为磁盘节点,内存节点是加上--ram参数
rabbitmqctl join_cluster  rabbit@rabbitmq-1#如果执行rabbitmqctl stop_app 这条命令报错:需要执行
#chmod 400 .erlang.cookie
#chown rabbitmq.rabbitmq .erlang.cookie

4. 查看集群状态

在 RabbitMQ 集群任意节点上执行 rabbitmqctl cluster_status来查看是否集群配置成功。
这里我在rabbitmq-1磁盘节点上面查看
[root@rabbitmq-1 ~]# rabbitmqctl cluster_status

每台机器显示出三台节点,表示已经添加成功!
(1)默认rabbitmq启动后是磁盘节点,在这个cluster命令下,mq-2和mq-3是内存节点,mq-1是磁盘节点。
(2)如果要使mq-2、mq-3都是磁盘节点,去掉--ram参数即可。
(3)如果想要更改节点类型,可以使用命令rabbitmqctl change_cluster_node_type disc(ram),前提是必须停掉
rabbit应用
在RabbitMQ集群集群中,必须⾄少有⼀个磁盘节点,否则队列元数据⽆法写⼊到集群中,当磁盘节点宕掉时,集群将⽆法写⼊新的队列元数据信息。

 

 5.登录rabbitmq web管理控制台,创建新的队列

打开浏览器输⼊http://192.168.226.22:15672  输入用户名密码进入

登录后出现如图所示的界⾯执行操作。

 

在RabbitMQ集群集群中,必须⾄少有⼀个磁盘节点,否则队列元数据⽆法写⼊到集群中,当

磁盘节点宕掉时,集群将⽆法写⼊新的队列元数据信息。

 

三. RabbitMQ镜像集群配置

 

上面已经完成RabbitMQ默认集群模式,但并不保证队列的高可用性,尽管交换机、绑定这些可以复制到集群里的任何一个节点,但是队列内容不会复制。但队列节点宕机直接导致该队列无法应用,只能等待重启,所以要想在队列节点宕机或故障也能正常应用,就要复制队列内容到集群里的每个节点,必须要创建镜像队列。

镜像队列是基于普通的集群模式的,然后再添加一些策略,所以你还是得先配置普通集群,然后才能设置镜像队列,我们就以上面的集群接着做。 保证各个节点之间数据同步;

1. 创建镜像集群

[root@rabbitmq-1 ~]# rabbitmqctl set_policy  ha-all "^" '{"ha-mode":"all"}'参数解释:
rabbitmqctl set_policy:这是RabbitMQ的命令行工具rabbitmqctl中设置策略的命令。
ha-all:这是策略定义的名称,可以为任何你选择的名称,这里选择的是"ha-all"。
"^":这是策略模式,这里的"^"代表这个策略将应用到所有的队列和交换器上。
'{"ha-mode":"all"}':这是策略的定义,这里设置的是ha-mode(高可用模式)为all。这意味着所有的队列将在所有的节点上进行镜像,来提供一个高可用的队列。
"0":这是策略的优先级。如果一个队列同时匹配多个策略,那么优先级高的策略将被使用。这里设置的优先级为0。
for vhost "/":这是策略应用的虚拟主机,这里是应用到了默认的虚拟主机上。

则此时镜像队列设置成功。(这里的虚拟主机是代码中需要用到的虚拟主机,虚拟主机的作用是做一个消息的隔离,本质上可认为是一个rabbitmq-server,是否增加虚拟主机,增加几个,这是由开发中的业务决定,即有哪几类服务,哪些服务用哪一个虚拟主机,这是一个规划)。  

 再次查看队列已经同步到其他两台节点:

这样就设置完成了 

2. 镜像队列策略设置说明

rabbitmqctl set_policy [-p Vhost] Name Pattern Definition [Priority]-p Vhost: 可选参数,针对指定vhost下的queue进行设置
Name: policy的名称
Pattern: queue的匹配模式(正则表达式)
Definition:镜像定义,包括三个部分ha-mode, ha-params, ha-sync-modeha-mode:指明镜像队列的模式,有效值为 all/exactly/nodesall:表示在集群中所有的节点上进行镜像exactly:表示在指定个数的节点上进行镜像,节点的个数由ha-params指定nodes:表示在指定的节点上进行镜像,节点名称通过ha-params指定ha-params:ha-mode模式需要用到的参数ha-sync-mode:进行队列中消息的同步方式,有效值为automatic和manual
priority:可选参数,policy的优先级

3. 准备测试 

#在192.168.226.22上下载一个mysql
[root@rabbitmq-1 ~]# yum install -y mysql-server git unzip
[root@rabbitmq-1 ~]# systemctl enable --now mysqld
[root@rabbitmq-1 ~]# mysqladmin -uroot password "1234"[root@rabbitmq-1 rabbitmq-test]# mysql -uroot -p1234
mysql: [Warning] Using a password on the command line interface can be insecure.
Welcome to the MySQL monitor.  Commands end with ; or \g.
Your MySQL connection id is 9
Server version: 8.0.36 Source distributionCopyright (c) 2000, 2024, Oracle and/or its affiliates.Oracle is a registered trademark of Oracle Corporation and/or its
affiliates. Other names may be trademarks of their respective
owners.Type 'help;' or '\h' for help. Type '\c' to clear the current input statement.mysql> CREATE USER 'root'@'%' IDENTIFIED BY '1234';
Query OK, 0 rows affected (0.02 sec)mysql> GRANT ALL PRIVILEGES ON *.* TO 'root'@'%';
Query OK, 0 rows affected (0.00 sec)mysql> FLUSH PRIVILEGES;
Query OK, 0 rows affected (0.00 sec)mysql> exit
Bye#上传rabbitmq-test-main.zip
[root@rabbitmq-1 ~]# git clone https://gitea.beyourself.org.cn/newrain001/rabbitmq-test.git
[root@rabbitmq-1 ~]# ll
total 18300
-rw-------. 1 root root      815 Jun  6 14:00 anaconda-ks.cfg
-rw-r--r--  1 root root 18713463 Jun 29 14:28 rabbitmq-server-3.13.3-1.el8.noarch.rpm
-rw-r--r--  1 root root     8221 Jun 29 16:05 rabbitmq-test-main.zip
-rw-r--r--. 1 root root     4747 Jun 24 19:46 rocky_linux.sh
[root@rabbitmq-1 ~]# unzip rabbitmq-test-main.zip
[root@rabbitmq-1 ~]# vim rabbitmq-test/requirements.txt
#修改如下图所示,要把版本号去掉,原因是因为当前系统没有这个版本,去掉让其自行安装别的版本即可

修改成图中所示即可。 

然后视情况修改这个配置文件,改对应的IP,如果对应的IP在本机可以使用localhost不用改,不在本机上的话就必须改,用户名和密码也要改成你自己的。

[root@rabbitmq-1 ~]# vim rabbitmq-test/settings.py

 

 

下载工具并启动Flask应用

[root@rabbitmq-1 ~]# yum install -y python3 python3-devel
[root@rabbitmq-1 ~]# pip3 install -r requirements.txt -i https://mirrors.aliyun.com/pypi/simple
[root@rabbitmq-1 ~]# export FLASK_ENV=development ; flask run --reload -p 80 -h 0.0.0.0

访问框选的web网页,打开后下1000单。

 

 

 下单后可以看到rabbit mq集群队列中开始记录下单的数据,这时,由于下单但是还没有付费成交,数据并没有写入到数据库中,可以查看下mysql数据库

mysql> show databases;
+--------------------+
| Database           |
+--------------------+
| information_schema |
| mysql              |
| performance_schema |
| sys                |
+--------------------+
4 rows in set (0.01 sec)

现在模式成交后的数据,来到http://192.168.226.22/read  页面进行模拟成交发货,这时数据就要写入到数据库中。

 

 

再次查看mysql,发现数据这时才会写入下数据库中,由于前面我们点击发货的是200,也就是模拟正式交易成功的数据数量是200,此时查看这个库中记录也是200

mysql> show databases;
+--------------------+
| Database           |
+--------------------+
| information_schema |
| mysql              |
| performance_schema |
| shop               |
| sys                |
+--------------------+
5 rows in set (0.00 sec)

 

这个时候我们去把剩下的800发完

 

 

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

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

相关文章

isalpha()方法——判断字符串是否只由字母组成

自学python如何成为大佬(目录):https://blog.csdn.net/weixin_67859959/article/details/139049996?spm1001.2014.3001.5501 语法参考 isalpha()方法用于判断字符串是否只由字母组成。isalpha()方法的格式如下&#xff1a; str.isalpha() 如果字符串中至少有一个字符并且所…

「C++系列」C++ 基本语法

文章目录 一、C 基本语法1. **预处理指令**2. **数据类型**3. **变量和常量**4. **运算符**5. **控制流语句**6. **函数**7. **数组**8. **指针和引用**9. **结构体和类**10. **输入/输出**11. **异常处理**12. **命名空间** 二、C 程序结构1. 程序流程结构2. 文件结构3. 编译预…

银河麒麟高级服务器操作系统V10SP2(X86)配置bond0的mac地址为指定子网卡的mac地址

银河麒麟高级服务器操作系统V10SP2&#xff08;X86&#xff09;配置bond0的mac地址为指定子网卡的mac地址 一 系统环境二 删除和备份原有配置2.1 down掉bond02.2 备份之前的bond配置到/root/bak2.3 删除bond配置&#xff08;网卡文件根据实际情况变化&#xff09; 三 新建bond0…

昇思25天学习打卡营第6天|MindSpore-ResNet50迁移学习

MindSpore-ResNet50迁移学习 迁移学习 图像的迁移学习是一种机器学习方法,它将已经在一个或多个源任务上训练好的预训练模型应用到新的目标任务上。这种方法的核心思想是,通过在大量数据上训练模型,学习到的特征表示可以用于其他相关任务,从而提高目标任务的性能。 应用场…

MySQL之聚簇索引和非聚簇索引

1、什么是聚簇索引和非聚簇索引&#xff1f; 聚簇索引&#xff0c;通常也叫聚集索引。 非聚簇索引&#xff0c;指的是二级索引。 下面看一下它们的含义&#xff1a; 1.1、聚集索引选取规则 如果存在主键&#xff0c;主键索引就是聚集索引。如果不存在主键&#xff0c;将使…

【Lua】第二篇:打印函数和注释

文章目录 一. 打印函数二. 注释方式1. 单行注释2. 多行注释 一. 打印函数 Lua 程序是以 .lua 结尾的文件&#xff0c;创建一个的 Test.lua 的文件&#xff0c;使用 print 函数输出字符串"Hello World"&#xff1a; print(Hello World) 保存之后使用命令lua 文件名编…

MyBatis(14)MyBatis 如何实现多对一和一对多的映射关系

MyBatis 中实现多对一和一对多的映射主要依赖于映射文件中的 <association> 和 <collection> 标签。这两种映射关系的实现&#xff0c;是通过嵌套查询或嵌套结果映射来完成的。在源码层面&#xff0c;MyBatis 使用相应的处理器来处理这些标签&#xff0c;最终实现复…

elasticsearch-6.8.23的集群搭建过程

三个节点的 ElasticSearch 集群搭建步骤 准备三台机器&#xff1a;28.104.87.98、28.104.87.100、28.104.87.101 和 ElasticSearch 的安装包 elasticsearch-6.8.23.tar.gz ----------------------------- 28.104.87.98&#xff0c;使用 root 用户操作 ----------------------…

Java | Leetcode Java题解之第206题反转链表

题目&#xff1a; 题解&#xff1a; class Solution {public ListNode reverseList(ListNode head) {if (head null || head.next null) {return head;}ListNode newHead reverseList(head.next);head.next.next head;head.next null;return newHead;} }

SpringBoot学习04-[定制SpringMVC]

定制SpringMVC 定制SpringMvc的自动配置定制springmvc-configurePathMatch配置定制SpringMVC-拦截器Interceptor定制SpringMVC-CORS配置全局cors配置针对某个方法加跨域解决 WebMvcConfigurer原理定制SpringMVC-JSONJSON开发jackson的使用定制化json序列化和反序列化 JSON国际化…

CriticGPT: 用 GPT-4 找出 GPT-4 的错误

CriticGPT 是 OpenAI 发布的一个基于 GPT-4 的模型&#xff0c;它可以帮助我们人类 Review 并纠正 ChatGPT 在生成代码时的错误。使用 CriticGPT 审查代码时&#xff0c;有 60% 的概率生成的代码更好更正确。

最近写javaweb出现的一个小bug---前端利用 form 表单传多项数据,后端 Servlet 取出的各项数据均为空

目录&#xff1a; 一. 问题引入二 解决问题 一. 问题引入 近在写一个 java web 项目时&#xff0c;遇到一个让我头疼了晚上的问题&#xff1a;前端通过 post 提交的 form 表单数据可以传到后端&#xff0c;但当我从 Servlet 中通过 request.getParameter(“name”) 拿取各项数…

【小沐学AI】Python实现语音识别(faster-whisper-webui)

文章目录 1、简介1.1 whisper1.2 faster-whisper 2、安装3、测试结语 1、简介 1.1 whisper https://github.com/openai/whisper Whisper 是一种通用语音识别模型。它是在各种音频的大型数据集上训练的&#xff0c;也是一个多任务模型&#xff0c;可以执行多语言语音识别、语音…

软考初级网络管理员_04_硬件单选题

1.进程是程序的一次执行&#xff0c;()是进程存在的唯一标志。 程序 数据 进程控制块 进程标识符 2.(请作答此空)是计算机内部运算部件一次能同时处理的二进制数据位数。计算机的运行速度使用每秒钟所能执行的()指令数目来评估。 字长 带宽 内存 寄存器 3.某银行的一…

安装ant-design-vue的报错集合

20240629vue版本&#xff1a;4.x vue/cli5.x运行项目报错error Replace xxx with xxx prettier/prettier 解决办法_replace 路路路路路路路路 with 路路路路-CSDN博客 Ant Design 使用出现 Error_ Can‘t resolve ‘_antd_dist_antd.css‘-CSDN博客

【JVM基础篇】垃圾回收

文章目录 垃圾回收常见内存管理方式手动回收&#xff1a;C内存管理自动回收(GC)&#xff1a;Java内存管理自动、手动回收优缺点 应用场景垃圾回收器需要对哪些部分内存进行回收&#xff1f;不需要垃圾回收器回收需要垃圾回收器回收 方法区的回收代码测试手动调用垃圾回收方法Sy…

Matlab|分时电价环境下用户负荷需求响应分析方法

主要内容 本程序复现《分时电价环境下用户负荷需求响应分析方法》文献中的方法&#xff0c;通过用户对不同时间下用电需求的自弹性和交叉弹性系数分析获得用户需求响应矩阵&#xff0c;进而利用该矩阵对用户在实行基于电价的需求侧管理后的负荷变化情况进行快速分析。 1.1…

Linux 文件系统详解:ext4、XFS、Btrfs

1. 引言 Linux 操作系统支持多种文件系统&#xff0c;其中 ext4、XFS 和 Btrfs 是最为常用的三种。它们各自具有独特的特点和优势&#xff0c;适用于不同的使用场景。本文将详细介绍这三种文件系统的概念、结构、使用场景以及常用命令&#xff0c;帮助读者更好地理解和使用这些…

ONLYOFFICE8.1版本桌面编辑器简单测评

ONLYOFFICE官网链接&#xff1a;在线PDF查看器和转换器 | ONLYOFFICE ONLYOFFICE介绍&#xff1a;https://www.onlyoffice.com/zh/office-suite.aspx OnlyOffice 是一款免费且开源的 Office 协作办公套件&#xff0c;支持桌面端和移动端等多平台&#xff0c;由一家领先的 IT 公…

【python】OpenCV—Aruco

文章目录 Detect ArucoGuess Aruco Type Detect Aruco 学习参考来自&#xff1a;OpenCV基础&#xff08;19&#xff09;使用 OpenCV 和 Python 检测 ArUco 标记 更多使用细节可以参考&#xff1a;【python】OpenCV—Color Correction 源码&#xff1a; 链接&#xff1a;http…