Rabbitmq互为主备的理解和prometheus监控

今天又有人问起来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的插件有一个是rabbitmq_prometheus,当开启这个插件后,rabbitmq-sever就会开启一个15692的端口提供prometheus获取监控信息,通过访问链接:http://ip:15692/metrics 获取监控信息。prometheus官网也提供了rabbitmq_exporter插件,如果启动了rabbitmq_prometheus插件,就不需要rabbitmq_exporter插件了,并且rabbitmq_prometheus插件获取到的监控信息远大于exporter获取的信息。所以推荐使用rabbitmq_prometheus插件。