一种可以提高RabbitMQ高可用性的系统及部署方法技术方案

技术编号:36897019 阅读:26 留言:0更新日期:2023-03-18 09:17
本发明专利技术涉及RabbitMQ高可用性技术领域,尤其涉及一种可以提高RabbitMQ高可用性的系统及部署方法,针对现有的技术是以RabbitMQ作为内存队列,其复制对存储空间会产生较大的影响,且发布消息需要将消息复制到所有节点,特别是对于持久化队列而言,性能的影响会很大的问题,现提出如下方案,其中一种可以提高RabbitMQ高可用性的系统包括设置模块、验证模块、判定模块、通信模块,本发明专利技术的目的是通过验证减少了失效节点的存在数量,使镜像集群模式运用更方便,同时通过删除其他未选择节点的发送数据,使持久化队列的性能的影响减小,并在发出消息时对所发出的消息进行存储,防止了选择的节点失效导致的消息丢失。择的节点失效导致的消息丢失。

【技术实现步骤摘要】
一种可以提高RabbitMQ高可用性的系统及部署方法


[0001]本专利技术涉及RabbitMQ高可用性
,尤其涉及一种可以提高RabbitMQ高可用性的系统及部署方法。

技术介绍

[0002]RabbitMQ是流行的开源消息队列系统,它用erlang语言进行开发,是一个AMQP基础上完整的、可复用的企业消息系统,它遵循Mozilla Public License开源协议,RabbitMQ是AMQP(高级消息队列协议)的标准实现,RabbitMQ的消息默认是在内存里的,实际上不光是消息,Exchange路由等信息实际都在内存中,内存的优点是高性能,问题在于故障后无法恢复,所以RabbitMQ也支持持久化的存储,也就是写磁盘,虽然RabbitMQ的队列实际只会在一个节点上,但元数据可以存在各个节点上,比如当创建一个新的交换器时,RabbitMQ会把该信息同步到所有节点上,这个时候客户端不管连接的哪个RabbitMQ节点,都可以访问到这个新的交换器,也就能找到交换器下的队列,但是目前现有的技术是以RabbitMQ作为内存队列,其复制对存储空间会产生较大的影响,且发布消息需要将消息复制到所有节点,特别是对于持久化队列而言,性能的影响会很大等问题。
[0003]因此,我们提出了一种可以提高RabbitMQ高可用性的系统及部署方法用于解决上述问题。

技术实现思路

[0004]本专利技术的目的是为了解决目前现有的技术是以RabbitMQ作为内存队列,其复制对存储空间会产生较大的影响,且发布消息需要将消息复制到所有节点,特别是对于持久化队列而言,性能的影响会很大等问题,而提出的一种可以提高RabbitMQ高可用性的系统及部署方法。
[0005]为了实现上述目的,本专利技术采用了如下技术方案:
[0006]一种可以提高RabbitMQ高可用性的系统,包括设置模块、验证模块、判定模块、创建进程模块、通信模块、处理模块、发送模块、选择模块、存储模块和删除模块,所述设置模块与验证模块连接,验证模块分别与创建进程模块、存储模块、判定模块、处理模块连接,创建进程模块与通信模块连接,通信模块与处理模块连接,处理模块与发送模块连接,发送模块分别与创建进程模块的接收消息单元、选择模块、存储模块连接,选择模块与删除模块连接,其中创建进程模块包括广播消息单元和接收消息单元;
[0007]优选的,所述设置模块用于通过RabbitMQ管理后台设置镜像队列,所述验证模块用于验证策略配置、镜像集群模式和数据发送至指定节点是否正确,所述判定模块用于判断镜像集群模式运行是否正确,所述创建进程模块用于镜像队列中其他进程的创建,所述通信模块用于创建进程与队列进程之间进行通信,所述处理模块用于对新增节点以及失效节点进行维护处理、master队列对消息进行处理和rabbit_mirror_queue_slave对消息进行的实际处理,所述发送模块用于沿顺时针方向顺着镜像队列循环列表发送消息,所述选
择模块用于选择消息所需到达的slave节点,所述存储模块用于对Master节点发出的消息数据和到达所选择的slave节点的消息数据进行存储,所述删除模块用于删除其他未被选择的slave节点在发送过程产生的数据;
[0008]一种可以提高RabbitMQ高可用性的部署方法,包括以下步骤:
[0009]S1:策略设置及确认:通过RabbitMQ管理后台进行镜像队列设,并确认设置是否成功;
[0010]S2:镜像集群模式:由master队列与slave队列组成镜像队列完成消息的存储和持久化工作;
[0011]S3:模式检测:通过人工输入消息数据,对所述模式流程进行检验,并对错误进行修正;
[0012]S4:镜像对列组群维护:对新增节点以及失效节点进行维护处理;
[0013]S5:镜像对列选择性消息同步:由主镜像队列对数据进行存储,并选择性的对从镜像队列以及新增节点进行消息同步;
[0014]优选的,所述S1中,通过RabbitMQ管理后台进行镜像队列设置,并通过RabbitMQ管理后台中的策略管理验证策略配置是否正确,其中由人工通过队列列表查看队列详情验证策略配置是否正确,并查看镜像队列当前主副本所在节点以及所有从副本所在节点;
[0015]优选的,所述S2中,由master队列与slave队列组成镜像队列完成消息的存储和持久化工作,其中master队列进程为amqqueue_process,slave队列进程为rabbit_mirror_queue_slave,且每个进程会创建一个gm(guaranteed multicast)进程,镜像队列中所有gm进程组成一个进程组用于广播和接收消息,同时每个进程都包含一个用于处理消息逻辑的队列backing_queue(默认为rabbit_variable_queue),集群中每个有客户端连接的节点都会启动channel进程,channel进程中记录着镜像队列中master和所有slave进程的Pid,以便直接与队列进程通信,其中消息的发布和消费都是通过master队列完成,其中通过master队列对消息进行处理并将消息的处理动作通过gm广播给所有slave队列,slave的gm收到消息后通过回调交由rabbit_mirror_queue_slave进行实际处理,其中所述镜像队列gm组将所有gm进程形成一个循环链表,且每个gm都会监控位于其左右两边的gm,其中一个gm左右两边存gm新增,相邻的gm需保证当前广播的消息会通知到新的gm上,其中一个gm左右两边的存在gm失效时,相邻的gm则需接管,保证本次广播消息会广播到所有gm,同时gm组信息会记录在本地数据库中;
[0016]优选的,所述S3中,通过DISC模式(磁盘)和RAM模式(内存)打开RabbitMQ的网页管理端并进行创建集群环境和配置,由人工向队列中100个输入数据,通过查看所述RabbitMQ的网页管理端的Queue页面中Messages里Ready的数据量进行验证,数据量为输入数据量则判定为运行正确,数据量与输入数据量不同则判定为运行异常,由人工对配置进行调整;
[0017]优选的,所述S4中,进行新增节点时需先从gm_group中获取对应group成员信息,随机选择一个节点并向这个节点发送加入请求,集群节点收到新增节点请求后更新gm_group对应信息,同时广播左右节点更新信息,并调整对左右节点的监控,集群节点回复通知新增节点成功加入group,新增节点收到回复后更新rabbit_queue中的相关信息,同时根据策略同步消息,通过相邻节点监控感知到slave节点失效时需重新调整邻居节点信息,并更新rabbit_queue、gm_group的记录;
[0018]优选的,所述S5中,通过Master节点发出消息并对所发出的消息进行存储,同时选择消息所需到达的slave节点,沿顺时针方向顺着镜像队列循环列表发送消息,其中除所选择的slave节点外其他slave节点收到消息后不进行缓本文档来自技高网
...

【技术保护点】

【技术特征摘要】
1.一种可以提高RabbitMQ高可用性的系统,包括设置模块、验证模块、判定模块、创建进程模块、通信模块、处理模块、发送模块、选择模块、存储模块和删除模块,其特征在于,所述设置模块与验证模块连接,验证模块分别与创建进程模块、存储模块、判定模块、处理模块连接,创建进程模块与通信模块连接,通信模块与处理模块连接,处理模块与发送模块连接,发送模块分别与创建进程模块的接收消息单元、选择模块、存储模块连接,选择模块与删除模块连接,其中创建进程模块包括广播消息单元和接收消息单元。2.根据权利要求1所述的一种可以提高RabbitMQ高可用性的系统,其特征在于,所述设置模块用于通过RabbitMQ管理后台设置镜像队列,所述验证模块用于验证策略配置、镜像集群模式和数据发送至指定节点是否正确,所述判定模块用于判断镜像集群模式运行是否正确,所述创建进程模块用于镜像队列中其他进程的创建,所述通信模块用于创建进程与队列进程之间进行通信,所述处理模块用于对新增节点以及失效节点进行维护处理、master队列对消息进行处理和rabbit_mirror_queue_slave对消息进行的实际处理,所述发送模块用于沿顺时针方向顺着镜像队列循环列表发送消息,所述选择模块用于选择消息所需到达的slave节点,所述存储模块用于对Master节点发出的消息数据和到达所选择的slave节点的消息数据进行存储,所述删除模块用于删除其他未被选择的slave节点在发送过程产生的数据。3.一种可以提高RabbitMQ高可用性的部署方法,其特征在于,包括以下步骤:S1:策略设置及确认:通过RabbitMQ管理后台进行镜像队列设,并确认设置是否成功;S2:镜像集群模式:由master队列与slave队列组成镜像队列完成消息的存储和持久化工作;S3:模式检测:通过人工输入消息数据,对所述模式流程进行检验,并对错误进行修正;S4:镜像对列组群维护:对新增节点以及失效节点进行维护处理;S5:镜像对列选择性消息同步:由主镜像队列对数据进行存储,并选择性的对从镜像队列以及新增节点进行消息同步。4.根据权利要求3所述的一种可以提高RabbitMQ高可用性的部署方法,其特征在于,所述S1中,通过RabbitMQ管理后台进行镜像队列设置,并通过RabbitMQ管理后台中的策略管理验证策略配置是否正确,其中由人工通过队列列表查看队列详情验证策略配置是否正确,并查看镜像队列当前主副本所在节点以及所有从副本所在节点。5.根据权利要求3所述的一种可以提高RabbitMQ高可用性的部署方法,其特征在于,所述S2中,由master队列与slave队列组成镜像队列完成消息的存储和持久化工作,其中master队列进程为amqqueue_process,slave队列进程为rabbit_mirror_queue_slave,且每个进程会创建一个gm进程,镜像队列中所有gm进程组成一个进程组用于广播和接收消息,同时每个进程都包含一个用于处理消息逻辑的队列backing_que...

【专利技术属性】
技术研发人员:顾也科
申请(专利权)人:帆一尚行郑州科技有限公司
类型:发明
国别省市:

网友询问留言 已有0条评论
  • 还没有人留言评论。发表了对其他浏览者有用的留言会获得科技券。

1