ICode9

精准搜索请尝试: 精确搜索
首页 > 其他分享> 文章详细

rabbitmq高可用,rabbitmq主从,rabbitmq镜像

2022-07-11 16:04:44  阅读:168  来源: 互联网

标签:插件 队列 rabbitmq 节点 集群 镜像 ha 主从


【1】架构介绍

  • 普通集群:主备架构,只是实现主备方案,不至于主节点宕机导致整个服务无法使用
  • 镜像集群:同步结构,基于普通集群实现的队列同步

(1.1)rabbitmq 主从集群

slave节点复制 master节点的所有数据和状态,除了队列数据;

  队列数据只存在master节点,但是Rabbitmq slave节点可以实现队列的转发,也就是说消息消费者可以连接到slave节点,但是slave需要连接到master节点转发队列;

由此说明只能保证了服务可以用,无法达到高可用

  

slave节点队列可以查看到,但是不会同步数据

主从架构集群:

  从节点可以和主节点的交换机、队列进行备份,但是不能对从节点中队列的消息进行备份,也就是说,一但主节点宕机,从节点中只有队列名,但是队列中的消息也就没有了,不能够做到高可用的一种状态

 

通过浏览器访问:如果页面起不来,运行命令rabbitmq-plugins enable rabbitmq_management即可,启动其页面管理插件

(1.2)rabbitmq 镜像高可用集群

今天又有人问起来rabbitmq的高可用方式,因为和常见的主从模式有点区别,所以就记录一下。

rabbitmq集群的镜像队列提供了更高级的主从备份,就是互为主备的主从队列:

  rabbitmq-server为客户端提供了访问其中任何一个节点都能获取整个集群的元数据,所以生产者消费者是直观看到具体是连接到集群中的哪台机器,但可以肯定的是主队列接收exchange路由过来的消息,及推送消息给消费者,从队列是无法接收到exchange路由过来的消息的;但从队列可以接收主队列同步过来的消息,并提供给消费者。

总结来说就是rabbitmq的主从队列的角色:主队列提供读写消息的能力,从队列只提供读消息的能力。那如何理解互为主备的主从队列呢?

先看一张图:

    

   

 

 

这个是三台机器组成的集群,ha-mode是all(rabbitmq官网推荐的exactly,且ha-params=N/2 +1,在这设置为all是为了方便后面的解释),rabbitmq提供完整的管理界面;

  queue1队列在创建时,可以通过node选择放到集群中的哪个节点,默认是登录的当前机器上。为了分散机器压力,提高性能,创建队列时,主队列分散建到不同的机器上。

  因为镜像队列参数设置的是all,所以queue1会自动把queue1的元数据同步到另外2台机器上,同理,在其他机器创建的queue2和queue3.这样就会形成上图中的部署结构。

  对于queue1,机器1是主,机器2,3为从;对于queue2,机器2为主,机器1,3为从;对于queue3,机器3位主,机器1,2位从;这样整体看机器1,2,3互为主备,分散了集群的压力,提供了发送消息速率,同时还提高了集群的高可用性。

Rabbitmq_prometheus 监控插件

  Rabbitmq的插件有一个是rabbitmq_prometheus,当开启这个插件后,rabbitmq-sever就会开启一个15692的端口提供prometheus获取监控信息;

  通过访问链接:http://ip:15692/metrics 获取监控信息。prometheus官网也提供了rabbitmq_exporter插件,如果启动了rabbitmq_prometheus插件,就不需要rabbitmq_exporter插件了,并且rabbitmq_prometheus插件获取到的监控信息远大于exporter获取的信息。所以推荐使用rabbitmq_prometheus插件。

集群相关参数与策略:

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


# 2.添加策略
    rabbitmqctl set_policy ha-all '^hello' '{"ha-mode":"all","ha-sync-mode":"automatic"}'
    说明:策略正则表达式为 “^” 表示所有匹配所有队列名称  ^hello:匹配hello开头队列


# 3.删除策略
    rabbitmqctl clear_policy ha-all


# 4.测试集群

 

 

 

【参考文档】

搭建参考:

  rabbitmq集群https://blog.csdn.net/yangshihuz/article/details/114120589

  主从复制,高可用集群部署:https://app.yinxiang.com/fx/b0b3020a-b90a-45c7-b4ae-3e70c0ab48fe

  Rabbitmq主从集群和镜像集群搭建:https://blog.csdn.net/wang_hahah/article/details/119925086

纯概念参考:

  集群模式:https://blog.csdn.net/wangdonghello/article/details/109624500

标签:插件,队列,rabbitmq,节点,集群,镜像,ha,主从
来源: https://www.cnblogs.com/gered/p/16466689.html

本站声明: 1. iCode9 技术分享网(下文简称本站)提供的所有内容,仅供技术学习、探讨和分享;
2. 关于本站的所有留言、评论、转载及引用,纯属内容发起人的个人观点,与本站观点和立场无关;
3. 关于本站的所有言论和文字,纯属内容发起人的个人观点,与本站观点和立场无关;
4. 本站文章均是网友提供,不完全保证技术分享内容的完整性、准确性、时效性、风险性和版权归属;如您发现该文章侵犯了您的权益,可联系我们第一时间进行删除;
5. 本站为非盈利性的个人网站,所有内容不会用来进行牟利,也不会利用任何形式的广告来间接获益,纯粹是为了广大技术爱好者提供技术内容和技术思想的分享性交流网站。

专注分享技术,共同学习,共同进步。侵权联系[81616952@qq.com]

Copyright (C)ICode9.com, All Rights Reserved.

ICode9版权所有