RabbitMQ集群
RabbitMQ概述
1.RabbiMQ简介
RabbiMQ是⽤Erang开发的,集群⾮常⽅便,因为Erlang天⽣就是⼀⻔分布式语⾔,但其本身并不⽀持负载均衡。支持高并发,支持可扩展。支持AJAX,持久化,用于在分布式系统中存储转发消息,在易用性、扩展性、高可用性等方面表现不俗。
2.RabbitMQ 特点
可靠性
扩展性
高可用性
多种协议
多语言客户端
管理界面
插件机制
3.什么是消息队列
MQ 全称为Message Queue, 。是一种应用程序对应用程序的通信方法。应用程序通过读写出入队列的消息(针对应用程序的数据)来通信,而无需专用连接来链接它们。
消息传递指的是程序之间通过在消息中发送数据进行通信,而不是通过直接调用彼此来通信。
集群中有两种节点
1 内存节点:只保存状态到内存(一个例外的情况是:持久的queue的持久内容将被保存到disk)
2 磁盘节点:保存状态到内存和磁盘。---推荐
内存节点虽然不写入磁盘,但是它执行比磁盘节点要好。集群中,只需要一个磁盘节点来保存状态 就足够了
如果集群中只有内存节点,那么不能停止它们,否则所有的状态,消息等都会丢失。
普通集群准备环境(安装配置RabbitMQ)
这里准备三台服务器,在三台服务器上都安装rabbitmq并且配置本地解析。(三台服务器都配置)
[root@server01 ~]# cat >> /etc/hosts<<EOF
192.168.134.165 server01
192.168.134.166 server02
192.168.134.163 server03
EOF
1.三个节点都安装rabbitmq
[root@server01 ~]# yum install -y epel-release gcc-c++ unixODBC unixODBC-devel openssl-devel ncurses-devel[root@server01 ~]#rz #上传erlang和rabbitmq两个软件包
[root@server01 ~]# yum install -y erlang-21.3.8.21-1.el7.x86_64
root@server01 ~]# yum install -y rabbitmq-server-3.7.10-1.el7.noarch.rpm
-
启动
[root@server01 ~]# systemctl daemon-reload
[root@server01 ~]# systemctl start rabbitmq-server
[root@server01 ~]# systemctl enable rabbitmq-server###每台都操作开启rabbitmq的web访问界面:
[root@server01 ~]# rabbitmq-plugins enable rabbitmq_management
-
创建用户
[root@server01 ~]# rabbitmqctl add_user aren 123 #添加用户和密码
[root@server01 ~]#rabbitmqctl set_user_tags aren administrator #设置为管理员
[root@server01 ~]# rabbitmqctl list_users #查看用户
Listing users ...
user tags
aren [administrator]
admin []
guest [administrator]aren设置这三个权限前是没有权限查询队列,在ui界面也看不见
[root@server01 ~]# rabbitmqctl set_permissions -p "/" aren ".*" ".*" ".*"
Setting permissions for user "aren" in vhost "/" ...
...done.
-
配置开启用户远程登录
[root@server01 ~]# vim /etc/rabbitmq/rabbitmq.config +61{loopback_users, []}[root@server01 ~]# cp /usr/share/doc/rabbitmq-server-3.7.10/rabbitmq.config.example /etc/rabbitmq/rabbitmq.config[root@server01 rabbitmq]# ll
总用量 44
-rw-r--r-- 1 root rabbitmq 23 11月 8 10:43 enabled_plugins
-rw-r--r-- 1 root rabbitmq 33096 11月 8 10:44 rabbitmq.config
测试
- 查看端口
4369 -- erlang发现端口
5672 --程序连接端口
15672 -- 管理界面ui端口
25672 -- server间内部通信口

- 访问192.168.134.165:15672
- rabbitmq默认管理员用户:guest 密码:guest

部署集群
注意:在三台机器上都部署。
1.创建好数据目录和日志目录
[root@server01~]# mkdir -p /data/rabbitmq/data
[root@server01 ~]# mkdir -p /data/rabbitmq/logs
[root@server01 ~]# chmod 777 -R /data/rabbitmq创建配置文件:
[root@server01 ~]# vim /etc/rabbitmq/rabbitmq-env.conf
RABBITMQ_MNESIA_BASE=/data/rabbitmq/data
RABBITMQ_LOG_BASE=/data/rabbitmq/logs###重启
[root@server01 ~]# systemctl restart rabbitmq-server
2.拷⻉.erlang.cookie 到其他两台服务器,使服务器的cookie保持一致
Rabbitmq的集群是依附于erlang的集群来⼯作的,所以必须先构建起erlang的集群景象。Erlang的集群中
各节点是经由过程⼀个magic cookie来实现的,这个cookie存放在/var/lib/rabbitmq/.erlang.cookie中,⽂件是400的权限。所以必须保证各节点cookie⼀致,不然节点之间就⽆法通信.
⽤scp的⽅式将server01节点的.erlang.cookie的值复制到其他两个节点中.
[root@server01 ~]# cat /var/lib/rabbitmq/.erlang.cookie
JSNEBPKQZWUGDKNCRKAM
[root@server01 ~]# scp /var/lib/rabbitmq/.erlang.cookie root@192.168.134.166:/var/lib/rabbitmq/
[root@server01 ~]# scp /var/lib/rabbitmq/.erlang.cookie root@192.168.134.163:/var/lib/rabbitmq/
3.将server02和server03作为内存结点加入server01节点集群
在server02和server03执行一下命令
注意:在改了主机名的情况下需要重启后才能添加磁盘节点,当然本地解析也要配置。
[root@server02 ~]# systemctl restart rabbitmq-server
[root@server02 ~]# rabbitmqctl stop_app #停止节点
[root@server02 ~]# rabbitmqctl reset #如果有数据需要重置,没有则不用
[root@server02 ~]# rabbitmqctl join_cluster --ram rabbit@server01 #添加到磁盘节点
[root@server02 ~]#rabbitmqctl start_app #启动节点[root@server03 ~]# systemctl restart rabbitmq-server
[root@server03 ~]# rabbitmqctl stop_app #停止节点
[root@server03 ~]# rabbitmqctl reset #如果有数据需要重置,没有则不用
[root@server03 ~]# rabbitmqctl join_cluster --ram rabbit@server01
[root@server03 ~]#rabbitmqctl start_app #启动节点
(1)默认rabbitmq启动后是磁盘节点,在这个cluster命令下,server02和server03是内存节点,server01是磁盘节点。
(2)如果要使server02,server03都是磁盘节点,去掉--ram参数即可。
(3)如果想要更改节点类型,可以使⽤命令rabbitmqctl change_cluster_node_type
disc(ram),前提是必须停掉rabbit应⽤.
4.查看集群状态
在server01磁盘节点上查看集群的配置。
[root@server01 ~]# rabbitmqctl cluster_status

RabbitMQ镜像集群配置
上面已经完成RabbitMQ默认集群模式,但并不保证队列的高可用性,尽管交换机、绑定这些可以复制到集群里的任何一个节点,但是队列内容不会复制。但队列节点宕机直接导致该队列无法应用,只能等待重启,所以要想在队列节点宕机或故障也能正常应用,就要复制队列内容到集群里的每个节点,必须要创建镜像队列。
镜像队列是基于普通的集群模式的,然后再添加一些策略,所以你还是得先配置普通集群,然后才能设置镜像队列,我们就以上面的集群接着做。 保证各个节点之间数据同步;
创建镜像集群:
rabbitmqctl set_permissions ".*" ".*" ".*" (后面三个”*”代表用户拥有配置、写、读全部权限)
[root@server01 ~]# rabbitmqctl set_policy ha-all "^" '{"ha-mode":"all"}'
[root@server02 ~]# rabbitmqctl set_policy ha-all "^" '{"ha-mode":"all"}'
[root@server03 ~]# rabbitmqctl set_policy ha-all "^" '{"ha-mode":"all"}'
再次查看队列已经同步到其他两台节点:

安装并配置负载均衡器HA
- 安装haproxy
[root@server01 ~]# yum -y install haproxy
- 修改 /etc/haproxy/haproxy.cfg
[root@server01 ~]# vim /etc/haproxy/haproxy.cfg
globallog 127.0.0.1 local2chroot /var/lib/haproxypidfile /var/run/haproxy.pidmaxconn 4000user haproxygroup haproxynbproc 4daemon# turn on stats unix socketstats socket /var/lib/haproxy/stats
#---------------------------------------------------------------------
defaultsmode httplog globalretries 3timeout connect 10stimeout client 1mtimeout server 1mtimeout check 10smaxconn 2048
#---------------------------------------------------------------------
##监控查看本地状态#####
listen admin_statsbind *:89mode httpoption httplogoption httpcloselog 127.0.0.1 local0 errstats uri /haproxystats auth aren:123456stats refresh 30s
####################################
###反代监控
frontend serverbind *:5670log globalmode tcp#option forwardfordefault_backend rabbitmqmaxconn 3
backend rabbitmqmode tcplog globalbalance roundrobinserver rabbitmq1 192.168.134.165:5672 check inter 2000s rise 2 fall 3server rabbitmq2 192.168.134.166:5672 check inter 2000s rise 2 fall 3server rabbitmq3 192.168.134.163:5672 check inter 2000s rise 2 fall 3[root@server01 ~]# systemctl start haproxy
相关文章:
RabbitMQ集群
RabbitMQ概述 1.RabbiMQ简介 RabbiMQ是⽤Erang开发的,集群⾮常⽅便,因为Erlang天⽣就是⼀⻔分布式语⾔,但其本身并不⽀持负载均衡。支持高并发,支持可扩展。支持AJAX,持久化,用于在分布式系统中存储转发消…...
Qt QtCreator调试Qt源码配置
目录 前言1、编译debug版Qt2、QtCreator配置3、调试测试4、总结 前言 本篇主要介绍了在麒麟V10系统下,如何编译debug版qt,并通过配置QtCreator实现调试Qt源码的目的。通过调试源码,我们可以对Qt框架的运行机制进一步深入了解,同时…...
JavaScript如何实现钟表效果,时分秒针指向当前时间,并显示当前年月日,及2024春节倒计时,源码奉上
本篇有运用jQuery,记得引入jQuery库,否则不会执行的喔~ <!DOCTYPE html> <html> <head> <meta charset"utf-8"> <title></title> <meta name"chenc" content"Runoob"> <met…...
重生奇迹MU套装大全中的极品属性
在重生奇迹MU之中,你不能如其他游戏一般只看攻击与防御,你更要看属性,这才是重生奇迹中的王道!属性好,才是极品,属性不佳,即便攻击、防御再出色,也只能沦落成为一件替用品࿰…...
用Python解决猴子分桃问题
1 问题 海滩上有一堆桃子,五只猴子来分。第一只猴子把这堆桃子平均分为五份,多了一个,这只猴子把多的一个扔入海中,拿走了一份。第二只猴子把剩下的桃子又平均分成五份,又多了一个,它同样把多的一个扔入海中…...
YOLOv8-Seg改进:分割注意力系列篇 | 新型的多尺度卷积注意力(MSCA)模块
🚀🚀🚀本文改进: 新型的多尺度卷积注意力(MSCA)模块,实现创新,MSCA包含三个部分:深度卷积聚合局部信息,多分支深度条卷积捕获多尺度上下文,以及11卷积建模不同通道之间的关系。 🚀🚀🚀MSCA多尺度特性在小目标分割检测领域表现优异 🚀🚀🚀YOLOv8-seg…...
基于springboot实现致远汽车租赁平台管理系统项目【项目源码+论文说明】计算机毕业设计
基于springboot实现致远汽车租赁平台管理系统演示 摘要 首先,论文一开始便是清楚的论述了系统的研究内容。其次,剖析系统需求分析,弄明白“做什么”,分析包括业务分析和业务流程的分析以及用例分析,更进一步明确系统的需求。然后在明白了系统的需求基础上需要进一步地设计系统…...
真的设计师做图只需要一个炫云客户端就够了
真的设计师做图只需要一个炫云客户端就够了,为什么这么说呢?因为炫云的这个客户端功能真的太全了,设计师想要的功能在炫云客户端上都有,而且还很多功能是免费的,非常的实用,具体有哪些功能我们一起来看看吧…...
简述 HTTP 请求的过程是什么?
HTTP(Hypertext Transfer Protocol)请求的过程可以简单地描述为客户端与服务器之间的通信交互。下面是一般的 HTTP 请求过程: 解析 URL:客户端解析目标 URL,提取出服务器的主机名(域名)和端口号…...
免root修改手机imei的技术原理是什么?如何实现的?hook吗
在过去,修改手机IMEI(International Mobile Equipment Identity)通常需要Root权限,这给用户带来了一些不便,也存在一定的安全风险。然而,近年来,一些技术爱好者提出了一种免Root修改手机IMEI的方…...
【Redis】整合使用,进行注解式开发及应用场景和击穿、穿透、雪崩的讲解
目录 一、整合 1. 为什么 2. 整合应用 ( 1 ) pom配置 ( 2 ) 所需配置 3. 注解式开发及应用场景 1. Cacheable 2. CachePut 3. CacheEvict 4. 击穿、穿透、雪崩 一、整合 1. 为什么 Redis可以与SSM项目整合,主要是为了提高项目的性能和效率。以下是整合Re…...
数据分析-numpy
numpy numpy numpy简介优点下载ndarray的属性输出数据类型routines 函数ndarray对象的读写操作ndarray的级联和切分级联切分 ndarray的基本运算广播机制(Broadcast)ndarry的聚合操作数组元素的操作numpy 数学函数numpy 查找和排序 写在最后面 简介 nump…...
【Java】云HIS云端数字医院信息平台源码
一、云HIS系统特色 • 使用简易化 即开即用,快速复制,按需开通功能模块,多机构共享机房、软件、服务器、存储设备等资源,资源利用最大化。 • 连锁集团化 可支持连锁集团化管理,1N模式,支撑运营&#x…...
Jupyter Notebook 内核似乎挂掉了,它很快将自动重启
报错原因: OMP: Error #15: Initializing libiomp5md.dll, but found libiomp5md.dll already initialized. OMP: Hint This means that multiple copies of the OpenMP runtime have been linked into the program. That is dangerous, since it can degrade perfo…...
Flink -- 事件时间 Watermark
1、事件时间: 指的是数据产生的时间或是说是数据发生的时间。 在Flink中有三种时间分别是: Event Time:事件时间,数据产生的时间,可以反应数据真实发生的时间 Infestion Time:事件接收时间 Processing Tim…...
Django框架简介
文章目录 Django框架介绍MVC与MVT模型MVCMTV 版本问题运行django注意事项 Django的下载与基本命令下载Django方式一:在命令界面使用pip安装方式二:使用pycharm安装 Django的基础命令命令行操作pycharm操作 Django项目命令行操作与Pycharm操作的区别应用D…...
把wpf的窗体保存为png图片
昨晚在stack overflow刷问题时看到有这个问题,今天早上刚好来尝试学习一下 stack overflow的链接如下: c# - How to render a WPF UserControl to a bitmap without creating a window - Stack Overflow 测试步骤如下: 1 新建.net frame…...
2023NOIP A层联测28-大眼鸹猫
给你两个长度为 n n n 的序列 a , b a,b a,b,这两个序列都是单调不降的。 你可以对 a a a 进行不超过 m m m 次操作,每次操作你可以选择一个 i i i 满足 1 ≤ i ≤ n 1\le i\le n 1≤i≤n,然后选择一个整数(可以是负数&…...
电机应用-直流有刷电机
目录 直流有刷电机 工作原理 直流有刷减速电机的重要参数 电路原理与分析 驱动芯片分析 L298N驱动芯片 直流有刷减速电机控制实现 控制速度原理 硬件设计 L298N 野火直流有刷电机驱动板-MOS管搭建板 软件设计1:两个直流有刷减速电机按键控制 开发设计 …...
BIM、建筑机器人、隧道工程施工关键技术
一、BIM简介 (一)BIM概念 BIM(Building Information Modeling),建筑信息模型。该技术通过数字化手段,在计算机中建立虚拟建筑,该虚拟建筑提供从单一到完整、包含逻辑关系的建筑信息库。信息库…...
蓝牙 BLE 扫描面试题大全(2):进阶面试题与实战演练
前文覆盖了 BLE 扫描的基础概念与经典问题蓝牙 BLE 扫描面试题大全(1):从基础到实战的深度解析-CSDN博客,但实际面试中,企业更关注候选人对复杂场景的应对能力(如多设备并发扫描、低功耗与高发现率的平衡)和前沿技术的…...
Element Plus 表单(el-form)中关于正整数输入的校验规则
目录 1 单个正整数输入1.1 模板1.2 校验规则 2 两个正整数输入(联动)2.1 模板2.2 校验规则2.3 CSS 1 单个正整数输入 1.1 模板 <el-formref"formRef":model"formData":rules"formRules"label-width"150px"…...
USB Over IP专用硬件的5个特点
USB over IP技术通过将USB协议数据封装在标准TCP/IP网络数据包中,从根本上改变了USB连接。这允许客户端通过局域网或广域网远程访问和控制物理连接到服务器的USB设备(如专用硬件设备),从而消除了直接物理连接的需要。USB over IP的…...
管理学院权限管理系统开发总结
文章目录 🎓 管理学院权限管理系统开发总结 - 现代化Web应用实践之路📝 项目概述🏗️ 技术架构设计后端技术栈前端技术栈 💡 核心功能特性1. 用户管理模块2. 权限管理系统3. 统计报表功能4. 用户体验优化 🗄️ 数据库设…...
力扣热题100 k个一组反转链表题解
题目: 代码: func reverseKGroup(head *ListNode, k int) *ListNode {cur : headfor i : 0; i < k; i {if cur nil {return head}cur cur.Next}newHead : reverse(head, cur)head.Next reverseKGroup(cur, k)return newHead }func reverse(start, end *ListNode) *ListN…...
uniapp手机号一键登录保姆级教程(包含前端和后端)
目录 前置条件创建uniapp项目并关联uniClound云空间开启一键登录模块并开通一键登录服务编写云函数并上传部署获取手机号流程(第一种) 前端直接调用云函数获取手机号(第三种)后台调用云函数获取手机号 错误码常见问题 前置条件 手机安装有sim卡手机开启…...
libfmt: 现代C++的格式化工具库介绍与酷炫功能
libfmt: 现代C的格式化工具库介绍与酷炫功能 libfmt 是一个开源的C格式化库,提供了高效、安全的文本格式化功能,是C20中引入的std::format的基础实现。它比传统的printf和iostream更安全、更灵活、性能更好。 基本介绍 主要特点 类型安全:…...
MyBatis中关于缓存的理解
MyBatis缓存 MyBatis系统当中默认定义两级缓存:一级缓存、二级缓存 默认情况下,只有一级缓存开启(sqlSession级别的缓存)二级缓存需要手动开启配置,需要局域namespace级别的缓存 一级缓存(本地缓存&#…...
Modbus RTU与Modbus TCP详解指南
目录 1. Modbus协议基础 1.1 什么是Modbus? 1.2 Modbus协议历史 1.3 Modbus协议族 1.4 Modbus通信模型 🎭 主从架构 🔄 请求响应模式 2. Modbus RTU详解 2.1 RTU是什么? 2.2 RTU物理层 🔌 连接方式 ⚡ 通信参数 2.3 RTU数据帧格式 📦 帧结构详解 🔍…...
C++实现分布式网络通信框架RPC(2)——rpc发布端
有了上篇文章的项目的基本知识的了解,现在我们就开始构建项目。 目录 一、构建工程目录 二、本地服务发布成RPC服务 2.1理解RPC发布 2.2实现 三、Mprpc框架的基础类设计 3.1框架的初始化类 MprpcApplication 代码实现 3.2读取配置文件类 MprpcConfig 代码实现…...
