RabbitMQ高级-应用问题、集群搭建

news2024/11/25 11:26:59

1.消息补偿

消息可靠性保障:——消息补偿机制

需求:100%确保消息发送成功

2.幂等性保障

幂等性指一次和多次请求某一资源,对于资源本身应该具有同样的结果。也就是说,其任意多次执行对资源本身所产生的影响均与第一次执行的影响相同

在MQ中是指,消费多条相同的消息,得到与消费该消息一次相同的结果

消息幂等性保障——乐观锁机制

3.集群搭建-镜像队列 

集群方案原理

RabbitMQ这款消息队列中间件产品本身是基于Erlang编写,Erlang语言天生具备分布式特性(通过同步Erlang集群各节点的magic cookie来实现)。因此,RabbitMQ天然支持Clustering。这使得RabbitMQ本身不需要像ActiveMQ、Kafka那样通过ZooKeeper分别来实现HA方案和保存集群的元数据。集群是保证可靠性的一种方式,同时可以通过水平扩展以达到增加消息吞吐量能力的目的

此处展示单机多实例部署,多个节点之间用端口来区分,在使用真正的集群时用ip来区分即可

单机多实例部署

启动单实例RabbitMQ

查看RabbitMQ运行状态,确保RabbitMQ运行正常

查看正常无误后,停止以上单实例RabbitMQ

systemctl stop rabbitmq-server

启动第1个节点实例(前台启动)

端口:5673,web管理插件端默认端口:15672

注: 这里将默认端口5672留给HA使用

RABBITMQ_NODE_PORT=5673 RABBITMQ_NODENAME=rabbit1 rabbitmq-server start

(前台启动方式)

启动第2个节点实例

 RABBITMQ_NODE_PORT=5674 RABBITMQ_SERVER_START_ARGS="-rabbitmq_management listener [{port,15674}]" RABBITMQ_NODENAME=rabbit2 rabbitmq-server start

附:结束集群节点命令

rabbitmqctl -n rabbit1 stop

rabbitmqctl -n rabbit2 stop

重置rabbit1实例为主节点

在新的会话窗口,依次执行命令(停止—>重置—>启动)

rabbitmqctl -n rabbit1 stop_app

rabbitmqctl -n rabbit1 reset

rabbitmqctl -n rabbit1 start_app

重置rabbit2实例为从节点

在新的会话窗口,依次执行命令(停止—>重置—>设为从节点—>启动)

将rabbit2加入到rabbit1节点,作为rabbit1的从节点

命令格式:
rabbitmqctl -n rabbit2 join_cluster rabbit1@'###'

注: 引号''内的“#”换成真实环境的主机名,如master等

rabbitmqctl -n rabbit2 join_cluster rabbit1@'master'

rabbitmqctl -n rabbit2 start_app

查看集群状态命令 

rabbitmqctl cluster_status -n rabbit1

说明: 此时在rabbit1节点创建的队列和队列内的消息在rabbit2节点也能看到。但是当rabbit1节点宕机时,rabbit2也将无法看到rabbit1之前的队列和消息(造成消息丢失),原因是配置到此步骤,仍然没能实现队列和消息等的同步 

附:集群管理相关命令

rabbitmqctl join_cluster {cluster_node} [–ram]
将节点加入指定集群中。在这个命令执行前需要停止RabbitMQ应用并重置节点

rabbitmqctl cluster_status
显示集群的状态

rabbitmqctl change_cluster_node_type {disc|ram}
修改集群节点的类型。在这个命令执行前需要停止RabbitMQ应用

rabbitmqctl forget_cluster_node [–offline]
将节点从集群中删除,允许离线执行

rabbitmqctl update_cluster_nodes {clusternode}
在集群中的节点应用启动前咨询clusternode节点的最新信息,并更新相应的集群信息。这个和join_cluster不同,它不加入集群。考虑这样一种情况,节点A和节点B都在集群中,当节点A离线了,节点C又和节点B组成了一个集群,然后节点B又离开了集群,当A醒来的时候,它会尝试联系节点B,但是这样会失败,因为节点B已经不在集群中了

rabbitmqctl cancel_sync_queue [-p vhost] {queue}
取消队列queue同步镜像的操作

rabbitmqctl set_cluster_name {name}
设置集群名称。集群名称在客户端连接时会通报给客户端。Federation和Shovel插件也会有用到集群名称的地方。集群名称默认是集群中第一个节点的名称,通过这个命令可以重新设置

RabbitMQ镜像集群配置

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

镜像队列是基于普通的集群模式的,然后再添加一些策略,所以你还是得先配置普通集群,然后才能设置镜像队列,我们就以上面的集群接着做

设置的镜像队列(即添加集群策略Policy:同步交换机和队列)

可以通过RabbitMQ的web管理端设置

参数说明:

Name:策略名称

Pattern:匹配的规则,如果是匹配所有的队列,是^.

Definition:使用ha-mode模式中的all,也就是同步所有匹配的队列。问号链接帮助文档

 通过dos命令设置

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

此时在rabbit1节点rabbit2节点已实现队列和交换机同步

4.集群搭建-安装HAProxy,进行负载均衡 

HAProxy提供高可用性、负载均衡以及基于TCP和HTTP应用的代理,支持虚拟主机,它是免费、快速并且可靠的一种解决方案,包括Twitter,Reddit,StackOverflow,GitHub在内的多家知名互联网公司在使用。HAProxy实现了一种事件驱动、单一进程模型,此模型支持非常大的并发连接数

安装依赖包

下载源码包 :OpenPKG Project: Download

解压到/usr/local目录

tar -xvf haproxy-2.7.5.tar.gz -C /usr/local

进入源码目录、编译、安装

cd /usr/local/haproxy-2.7.5

make TARGET=linux31 PREFIX=/usr/local/haproxy

make install PREFIX=/usr/local/haproxy

添加组、用户,并赋权

groupadd -r -g 149 haproxy

useradd -g haproxy -r -s /sbin/nologin -u 149 haproxy

配置haproxy(创建目录、创建配置文件haproxy.cfg)

mkdir /etc/haproxy

vim /etc/haproxy/haproxy.cfg

haproxy.cfg中写入以下内容 

注: 在配置文件/etc/haproxy/haproxy.cfg中的listen stats下的bind属性中的IP地址需换成服务器IP,不能改为127.0.0.1,否则HAProxy的web管理页面访问不了

#logging options
global
        log 127.0.0.1 local0 info
        maxconn 5120
        chroot /usr/local/haproxy
        uid 99
        gid 99
        daemon
        quiet
        nbproc 20
        pidfile /var/run/haproxy.pid

defaults
        log global

        mode tcp

        option tcplog
        option dontlognull
        retries 3
        option redispatch
        maxconn 2000
        contimeout 5s
   
     clitimeout 60s

     srvtimeout 15s
#front-end IP for consumers and producters

listen rabbitmq_cluster
        bind 0.0.0.0:5672

        mode tcp
        #balance url_param userid
        #balance url_param session_id check_post 64
        #balance hdr(User-Agent)
        #balance hdr(host)
        #balance hdr(Host) use_domain_only
        #balance rdp-cookie
        #balance leastconn
        #balance source //ip

        balance roundrobin

        server node1 127.0.0.1:5673 check inter 5000 rise 2 fall 2
        server node2 127.0.0.1:5674 check inter 5000 rise 2 fall 2

listen stats
        bind 192.168.235.129:8100
        mode http
        option httplog
        stats enable
        stats uri /rabbitmq-stats
        stats refresh 5s

启动HAproxy负载,并查看haproxy进程 

/usr/local/haproxy/sbin/haproxy -f /etc/haproxy/haproxy.cfg

ps -ef | grep haproxy

其他命令

启动haproxy
# /usr/local/haproxy/sbin/haproxy -f /etc/haproxy/haproxy.cfg
重启haproxy
# /usr/local/haproxy/sbin/haproxy -f /etc/haproxy/haproxy.cfg -st `cat /usr/local/haproxy/haproxy.pid` 
停止haproxy
# killall haproxy

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

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

相关文章

2024/3/31周报

文章目录 摘要Abstract文献阅读题目创新点实验数据研究区域数据和材料 方法XGBoost algorithmLong Short‑Term Memory AlgorithmEvaluation of the Model Accuracy 实验结果 深度学习XGBoost代码实现AdaBoostBoostingAdaBoost算法AdaBoost代码实现 总结 摘要 本周阅读了一篇基…

上海开放大学2024年春《过程控制技术》网上记分作业参考答案

答案:更多答案,请关注【电大搜题】微信公众号 答案:更多答案,请关注【电大搜题】微信公众号 答案:更多答案,请关注【电大搜题】微信公众号 电大搜题 多的用不完的题库,支持文字、图片搜题&am…

SD-WAN组网面临的安全挑战?如何提供有效的安全措施

SD-WAN(软件定义广域网)技术的广泛应用,企业面临着越来越多的网络安全挑战。尽管SD-WAN带来了灵活性和效率的提升,但其开放性和基于云的特性也带来了一系列安全威胁。本文将探讨SD-WAN组网面临的安全挑战,并提供一些有…

1236. 递增三元组:做题笔记

目录 暴力 代码 二分 代码 前缀和 代码 推荐视频讲解 暴力 这道题说的是有三个元素数量相同的数组,想知道有多少个三元组满足:三个数分别来自 A B C数组且呈现递增。 我想的是既然要求递增,那就先把数组数据都排一下序,…

鸿蒙:滑动条组件Slider

滑动条组件,通常用于快速调节设置值,如音量调节、亮度调节等应用场景。 说明 该组件从API Version 7开始支持。 子组件 无 接口 Slider(options?: {value?: number, min?: number, max?: number, step?: number, style?: SliderStyle, direc…

如何使用potplayer在公网环境访问内网群晖NAS中储存在webdav中的影视资源

🌈个人主页: Aileen_0v0 🔥热门专栏: 华为鸿蒙系统学习|计算机网络|数据结构与算法 ​💫个人格言:“没有罗马,那就自己创造罗马~” #mermaid-svg-D7WJh3JaNVrLcj2b {font-family:"trebuchet ms",verdana,arial,sans-serif;font-siz…

渐变颜色作图

clear clc close all % 生成 x 值 x linspace(0, 5, 1000); % 计算对应的 y 值(二次函数分布) y x .^ 2; % 添加一些随机噪声 y y randn(size(y)); clinspace(1,10,length(x)); arry1[x,y]; arry2sortrows(arry1,2,descend); arry3[arry2,c]…

LabVIEW双通道太阳射电频谱观测系统

LabVIEW双通道太阳射电频谱观测系统 开发了一个基于LabVIEW平台开发的双通道高速太阳射电频谱观测系统。该系统实时监测太阳射电爆发,具有随机性、持续时间短、变化快等特点。通过高速信号采集卡实现1.5 GS/s的信号采集,时间分辨率可达4ms,频…

跑腿小程序|基于微信小程序的跑腿平台小程序设计与实现(源码+数据库+文档)

跑腿平台小程序目录 目录 基于微信小程序的跑腿平台小程序设计与实现 一、前言 二、系统设计 三、系统功能设计 1、用户信息管理 2、跑腿任务管理 3、任务类型管理 4、公告信息管理 四、数据库设计 五、核心代码 六、论文参考 七、最新计算机毕设选题推荐 八、…

MySQL 优化及故障排查

目录 一、mysql 前置知识点 二、MySQL 单实例常见故障 故障一 故障二 故障三 故障四 故障五 故障六 故障七 故障八 三、MySQL 主从故障排查 故障一 故障二 故障三 四、MySQL 优化 1.硬件方面 (1)关于 CPU (2)关…

备战蓝桥杯---贪心刷题2

话不多说&#xff0c;直接看题&#xff1a; 首先我们大致分析一下&#xff0c;先排序一下&#xff0c;Kn&#xff0c;那就全部选。 当k<n时&#xff0c;k是偶数&#xff0c;那么结果一定非负&#xff0c;因为假如负数的个数有偶数个&#xff0c;那么我们成对选它&#xff0…

单链表的一些个人易错的问题(有理解不正确的地方请大佬指正)

请看下列代码 代码1&#xff1a;&#xff08;正确示范&#xff09; #include<stdio.h> #include<stdlib.h> struct node {int data;struct node *next;}; int main() {int n;int a;printf("请输入数字个数&#xff1a;");scanf("%d",&n)…

行车记录打不开?数据恢复有高招!

行车记录打不开&#xff0c;是许多车主在使用行车记录仪时常遇到的问题。当启动设备时&#xff0c;屏幕无反应或提示错误&#xff0c;让人不禁焦虑&#xff0c;担心重要的行车记录丢失。 行车记录打不开原因分析 行车记录打不开&#xff0c;其背后的原因可能复杂多样。硬件故障…

每日学习笔记:C++ STL算法分类

非更易型 更易型 移除型 变序型 排序型 已排序区间算法 数值型算法

【嵌入式系统设计师】软考2024年5月报名流程及注意事项

2024年5月软考嵌入式系统设计师报名入口&#xff1a; 中国计算机技术职业资格网&#xff08;http://www.ruankao.org.cn/&#xff09; 2024年软考报名时间暂未公布&#xff0c;考试时间上半年为5月25日到28日&#xff0c;下半年考试时间为11月9日到12日。不想错过考试最新消息…

行车记录打不开?别慌,数据恢复有高招!

行车记录打不开&#xff0c;这恐怕是许多车主都曾经遭遇过的烦恼。在驾驶途中&#xff0c;行车记录仪本应是记录美好瞬间、保障行车安全的重要工具&#xff0c;但一旦它出现打不开的情况&#xff0c;所有的期待与信赖便瞬间化为乌有。面对这种情况&#xff0c;我们该如何应对&a…

【C++的奇迹之旅(二)】C++关键字命名空间使用的三种方式C++输入输出命名空间std的使用惯例

文章目录 &#x1f4dd;前言&#x1f320; C关键字(C98)&#x1f309; 命名空间&#x1f320;命名空间定义&#x1f309;命名空间使用 &#x1f320;命名空间的使用有三种方式&#xff1a;&#x1f309;加命名空间名称及作用域限定符&#x1f320;使用using将命名空间中某个成员…

SAP ABAP批量复制PFCG角色并生效

文章目录 需求整体流程1. 检查角色是否存在2. 复制角色3. 批量生成参数文件4. 如果角色用户还是出现未比较&#xff0c;可在PFCG界面选择批量比较 细节上载模板代码&#xff1a; 小结 需求 最近碰到一个需求&#xff0c;需要对大批量的PFCG角色进行复制并使其生效 整体流程 …

Java 堆外内存及调优

文章目录 直接内存简介为什么DirectByteBuffer可以优化 IO 性能 直接内存的分配直接内存的回收直接内存跟踪与诊断 直接内存简介 直接内存(Direct Memory) 并不是虚拟机运行时数据区的一部分&#xff0c;并非Java虚拟机规范中定义的内存区域。但是这部分内存的频繁使用&#x…

动手机器学习支持向量机+习题

非参数化模型&#xff0c;当数据集规模增大时&#xff0c;其参数量也相应变多 希望从这无数个可以分隔两个点集的超平面中&#xff0c;挑选出与任意一点间隔&#xff08;margin&#xff09;的最小值最大的平面 支持向量机的数学描述 对上式来说&#xff0c;当w和b的大小同时变…