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

【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

posted @ 2022-07-11 15:53  郭大侠1  阅读(1581)  评论(0编辑  收藏  举报