天天看點

實戰分享:activemq 在災備雙活建設中的研究 1) 現象描述

activemq 是業界非常流行的、功能強大的、開源消息中間件。以快速、支援多種跨語言用戶端和協定著稱;完全支援 JMS 1.1 and J2EE 1.4。在各個行業中有大量的應用案例。

由于 activemq 承擔着消息服務的重要角色,在這篇文章中我們重點講述在災備雙活建設中 activemq 設計、規劃、部署。

随着各個行業對 IT 災備建設的重視,越來越多的企業、機關正在籌備、實施 IT 災備建設。由于早期的建設并沒有充分考慮多資料中心下容災方案,勢必在新的多資料中心環境需要做一番整體架構的調整、重建。

本文是對目前業界流行的消費服務産品 active 在災備雙活建設的一些探讨,希望起到抛磚引玉的效果。

目标

災備雙活建設最完美的架構設計:在同城、異地 2 個資料中心,在最極端情況下,例如單資料中心垮掉情況下,保證消息零丢失,支援 7*24 服務要求。

需求描述

機房故障

1) 現象描述

消息隊列中間件部署在 A、B 兩個不同的機房中,用戶端根據負載的政策轉發到對應機房的消息中間件,其中 A 或者 B 機房因為斷電或者災難等因素出現故障,無法繼續提供服務。此時僅有一個機房正常。

2) 現象圖示

實戰分享:activemq 在災備雙活建設中的研究 1) 現象描述

3) 服務影響

正常情況下,對于用戶端的連接配接平均分布在兩個機房中,出現單個機房故障後,連接配接在故障機房中的連接配接會斷開,正在執行未送出的事務将會復原,對于發起的新連接配接不受任何影響,依然可以通過配置的負載政策通路正常機房中的消息中間件服務。

4) 故障恢複

當機房恢複正常後,啟動消息中間件服務,此時,隻要主機、網絡恢複正常,消息中間件服務就可以啟動成功。這時,AB 機房按照負載政策繼續處理連接配接,最終使得每個機房的中間件連接配接數無限接近。

活動預告

雲南的朋友們有福利了,雲和恩墨大講堂-雲南站,将于 8.31(下周五)在昆明舉辦。本次活動邀請到了 ACOUG 聯合創始人,Oracle ACE 總監,雲和恩墨創始人蓋國強先生、雲和恩墨西區傳遞總監郭耀龍先生。演講議題涵蓋 Oracle 18c 的新特性解析和 DBA 的未來、 Oracle 資料庫故障診斷、金融行業 PaaS 雲資料庫平台解決方案等。歡迎各位資料庫愛好者報名參與!

實戰分享:activemq 在災備雙活建設中的研究 1) 現象描述

伺服器DOWN

在運作的消息中間件叢集架構中,存在 N 個主機,其中任意 N-2 個主機 DOWN 機,不具備服務提供能力,僅剩餘大于 1 個主機存活可以提供服務的場景。

實戰分享:activemq 在災備雙活建設中的研究 1) 現象描述

主機 DOWN 掉後,已經連接配接在該主機消息中間件上的連接配接會斷開,對應的事務會復原,新的連接配接不受到影響。

當主機故障處理後,啟動故障主機,并啟動消息中間件服務。根據負載均衡算法,用戶端連接配接會重新配置設定到該主機上的節點。

消息中間件節點崩潰

在運作的消息中間件叢集架構中,存在 N 個節點,其中任意 N-2 個節點崩潰,不具備服務提供能力,僅剩餘大于1個節點存活可以提供服務的場景。

實戰分享:activemq 在災備雙活建設中的研究 1) 現象描述

當消息中間件節點崩潰後,已經連接配接在該主機消息中間件上的連接配接會斷開,對應的事務會復原,新的連接配接不受到影響。

當消息隊列節點故障處理後,啟動消息中間件服務。根據負載均衡算法,用戶端連接配接會重新配置設定到該節點。

架構設計

架構設計要點

● 采用 activemq 的何種架構來實作上述需求?

采用 主從+Broker-Cluster 方式來實作,主從架構實作了 HA(高可用)功能,借用 zookeeper 的選舉投票功能,保證“過半即可用”,是以推薦的 HA 架構的節點數為單數,至少 3 個節點,任何時候垮掉一個節點都不影響正常使用。

同時結合 Broker-Cluster,Broker-Cluster 的部署方式可以解決負載均衡和分布式問題,因為單一主從方式無法解決負載均衡的問題。

● 如何保證未消費消息在各個節點間的同步?

采用 leveldb(LevelDB 是 Google 開源的持久化KV單機資料庫,具有很高的随機寫,順序讀/寫性能)實作各個節點間的同步寫,保證資料在同一個 Broker-Cluster 組下複制,以 3 個節點為例,同一條堆積消息,在 3個 節點保持同步,在最極端情況下,即使2個節點的資料檔案丢失,也能防止資料丢失。

● 如何保證在災難情況下,消息服務仍然可以正常提供服務?例如考慮最極端情況下,單邊資料中心當機?

采用 2 套主從、2套 Broker-Cluster,并且保證 2 個資料中心各包含一套主從的2個節點,如下圖所示,cluster1 的 2 個節點在 B 中心,cluster2 的 2 個節點在 A 中心,即使 A、B 整個資料中心發生災難,都不影響 jms 服務正常運作。

● 保證在各種災難場景都實作了 7*24 和消息零丢失嗎?

是的,隻要保證一個 cluster 下的 2 個節點可用的情況下,不管在任何一種組合下,jms 服務都是可用的。

● 用戶端如何來調用叢集的 jms 位址

connectionFactory = new ActiveMQConnectionFactory(

ActiveMQConnection.DEFAULT_USER,

ActiveMQConnection.DEFAULT_PASSWORD,

"failover:(tcp://192.168.40.140:61616,tcp://192.168.40.140:61617,tcp://192.168.40.141:61619,tcp://192.168.40.141:61620,tcp://192.168.40.141:61621,tcp://192.168.40.140:61618)");

如上例子,activemq 根據随機政策,調用任一可用的節點。

架構圖示

● 架構示例圖如下:

實戰分享:activemq 在災備雙活建設中的研究 1) 現象描述

◆ 哪一個節點是 master,沒有要求,那個先啟動那個就可能成為 master。

◆ master 節點是目前提供服務的節點。

原文釋出時間為:2018-08-22

本文作者:劉韬

本文來自雲栖社群合作夥伴“

資料和雲

”,了解相關資訊可以關注“

”。