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插件。