具有 Apache Cassandra 的多層式架構 (N-tier) 應用程式

DNS
Load Balancer
監視器
虛擬機器
虛擬網路

此參考架構展示如何在 Linux 上使用 Apache Cassandra 作為資料層,來部署針對多層式架構 (N-Tier) 應用程式設定的虛擬機器 (VM) 和虛擬網路。 部署這個解決方案

使用 Microsoft Azure 的多層式架構

下載這個架構的 Visio 檔案

架構

此架構具有下列元件。

一般

  • 資源群組資源群組可用來將 Azure 資源組合在一起,讓它們可以依存留期、擁有者或其他準則管理。

  • 可用性區域可用性區域 是 Azure 區域內的實體位置。 每個區域都是由一或多個資料中心所組成,其具有獨立的電源、冷卻和網路功能。 藉由將 Vm 放在不同區域,應用程式就能在區域內成為失敗的彈性。

網路和負載平衡

  • 虛擬網路和子網。 每部 Azure VM 都會部署到可以分割成子網路的虛擬網路。 針對每一層建立不同的子網路。

  • 應用程式閘道應用程式閘道 是第7層負載平衡器。 在此架構中,它會將 HTTP 要求路由傳送至 Web 前端。 應用程式閘道也會提供 Web 應用程式防火牆 (WAF),該防火牆會保護應用程式免於常見惡意探索和弱點。

  • 負載平衡器。 使用 Azure Standard Load Balancer 將網路流量從 web 層散發至商務層。

  • (Nsg) 的網路安全性群組。 使用 nsg 來限制虛擬網路內的網路流量。 例如,在如下所示的三層式架構中,資料庫層不接受來自 Web 前端的流量,只接受來自 Business 層和管理子網路的流量。

  • DDoS 保護。 雖然 Azure 平台提供基本的保護,可抵禦分散式阻斷服務 (DDoS) 攻擊,但我們建議您使用 DDoS 保護標準,其中具有增強的 DDoS 風險降低功能。 請參閱安全性考量

  • Azure DNSAzure DNS 是適用于 DNS 網域的主機服務。 其使用 Microsoft Azure 基礎結構來提供名稱解析。 只要將您的網域裝載於 Azure,就可以像管理其他 Azure 服務一樣,使用相同的認證、API、工具和計費方式來管理 DNS 記錄。

虛擬機器

  • Apache Cassandra 資料庫。 藉由啟用複寫和容錯移轉,在資料層提供高可用性。

  • OpsCenter。 部署監視解決方案(例如 DataStax OpsCenter )來監視 Cassandra 叢集。

  • Jumpbox。 也稱為防禦主機。 網路上系統管理員用來連線到其他 VM 的安全 VM。 Jumpbox 具有 NSG,只允許來自安全清單上公用 IP 位址的遠端流量。 NSG 應該允許遠端桌面 (RDP) 流量。

建議

您的需求可能和此處所述的架構不同。 請使用以下建議作為起點。

虛擬機器

如需有關設定 Vm 的建議,請參閱 在 Azure 上執行 LINUX VM

虛擬網路

當您建立虛擬網路時,請判斷您在每個子網路中的資源需要多少個 IP 位址。 使用 CIDR 標記法,針對所需的 IP 位址指定子網路遮罩和夠大的網路位址範圍。 使用落在標準私人 IP 位址區塊內的位址空間,其為 10.0.0.0/8、172.16.0.0/12 及 192.168.0.0/16。

如果您稍後需要在 VNet 和內部部署網路之間設定閘道,請選擇未與內部部署網路重迭的位址範圍。 一旦建立 VNet 之後,就無法變更位址範圍。

請記得以功能和安全性需求來設計子網路。 位於相同層或角色的所有 VM 都應移入相同的子網路,它可以是安全性界限。 如需設計 VNet 和子網路的詳細資訊,請參閱規劃和設計 Azure 虛擬網路

應用程式閘道

如需設定應用程式閘道的詳細資訊,請參閱 應用程式閘道設定總覽

負載平衡器

請勿直接向網際網路公開虛擬機器。 相反地,給每個虛擬機器私人 IP 位址。 用戶端會使用與應用程式閘道相關聯的 IP 位址進行連接。

定義負載平衡器規則,以將網路流量導向至 VM。 例如,若要啟用 HTTP 流量,請建立一個規則,將前端設定的連接埠 80 對應至後端位址集區的連接埠 80。 當用戶端將 HTTP 要求傳送到連接埠 80 時,負載平衡器會藉由使用雜湊演算法 (其中包含來源 IP 位址) 來選取後端 IP 位址。 用戶端要求會散發到所有 VM。

網路安全性群組

使用 NSG 規則來限制各層之間的流量。 例如,在如上所示的三層式架構中,Web 層不會直接與資料庫層通訊。 若要強制執行此動作,資料庫層應該封鎖來自 Web 層子網路的連入流量。

  1. 拒絕來自 VNet 的所有輸入流量。 (在規則中使用 VIRTUAL_NETWORK 標記)。
  2. 允許來自 Business 層子網路的輸入流量。
  3. 允許來自資料庫層子網路本身的輸入流量。 此規則允許資料庫 VM 之間的通訊,是進行資料庫複寫和容錯移轉所需的。
  4. 允許來自 Jumpbox 子網路的 ssh 流量 (連接埠 22)。 此規則讓系統管理員能夠從 Jumpbox 連線到資料庫層。

建立規則 2 – 4,其優先順序高於第一個規則,因此它們會覆寫它。

Cassandra

我們建議針對生產環境使用 DataStax Enterprise,但這些建議適用於所有的 Cassandra 版本。 如需在 Azure 中執行 DataStax 的詳細資訊,請參閱適用於 Azure 的DataStax Enterprise 部署指南

在機架感知的模式中設定節點。 在 cassandra-rackdc.properties 檔案中,將容錯網域對應到機架。

您不需要叢集前方的負載平衡器。 用戶端會直接連線至用戶端中的節點。

此架構的部署腳本會使用名稱解析來初始化 (gossip) 之叢集間通訊的種子節點。 為了啟用名稱解析,部署會使用 Cassandra 節點的記錄來建立 Azure 私人 DNS 區域。 根據您的初始化腳本,您可能可以改用靜態 IP 位址。

注意

Azure Private DNS 目前為公開預覽狀態。

Jumpbox

不允許從公用網際網路對執行應用程式工作負載的 VM 進行 ssh 存取。 對這些 VM 所做的所有 ssh 存取都必須改為透過 Jumpbox 進行。 系統管理員會登入 Jumpbox,然後從 Jumpbox 登入其他 VM。 Jumpbox 允許來自網際網路,但只來自已知且安全 IP 位址的 ssh 流量。

Jumpbox 有最低效能需求,因此選取小的 VM 大小。 針對 Jumpbox 建立公用 IP 位址。 將 Jumpbox 放置於與其他 VM 相同的 VNet,但在個別的管理子網路中。

若要保護 Jumpbox,請新增 NSG 規則,只允許來自一組安全公用 IP 位址的 ssh 連線。 設定其他子網路的 NSG,允許來自管理子網路的 ssh 流量。

延展性考量

擴展集

針對 Web 和 Business 層,請考慮使用虛擬機器擴展集,而不是將個別虛擬機器部署至可用性設定組。 擴展集可讓您輕鬆部署及管理一組完全相同的虛擬機器,並根據效能計量自動調整虛擬機器。 當 VM 上的負載增加時,就會將其他 VM 自動新增到負載平衡器。

有兩種基本方法可用來設定擴展集中部署的 VM:

  • 部署虛擬機器之後,使用擴充功能來設定它。 透過此方法,新的 VM 執行個體可能需要較長的時間來啟動不具擴充功能的 VM。

  • 利用自訂的磁碟映像來部署受控磁碟。 這個選項可能會更快速地部署。 不過,它會要求您讓映像保持最新狀態。

如需詳細資訊,請參閱擴展集的設計考量

提示

使用任何自動調整規模解決方案時,事前也要利用生產層級的工作負載來進行測試。

訂用帳戶限制

每個 Azure 訂用帳戶都已經有預設限制,包括每個區域的 VM 最大數目。 您可以藉由提出支援要求來提高限制。 如需詳細資訊,請參閱 Azure 訂用帳戶和服務限制、配額和條件約束

應用程式閘道

應用程式閘道支援固定容量模式或自動調整模式。 固定容量模式適用於工作負載一致且可預測的案例。 針對具有變動流量的工作負載,請考慮使用自動調整模式。 如需詳細資訊,請參閱自動調整和區域備援應用程式閘道 v2

效能考量

若要從 Azure Vm 上的 Cassandra 獲得最佳效能,請參閱在 Azure vm 上執行 Apache Cassandra中的建議。

可用性考量

可用性區域可在單一區域內提供最佳的復原能力。 如果您需要更高的可用性,請考慮跨兩個區域複寫應用程式。

並非所有區域都支援可用性區域,而且並非所有 VM 大小都支援所有區域。 執行下列 Azure CLI 命令,以尋找區域內每個 VM 大小支援的區域:

az vm list-skus --resource-type virtualMachines --zone false --location <location> \
    --query "[].{Name:name, Zones:locationInfo[].zones[] | join(','@)}" -o table

如果您將此架構部署至不支援可用性區域的區域,請將每一層的 Vm 放在 可用性設定組內。 相同可用性內的 Vm 會部署到多部實體伺服器、電腦架、儲存單位和網路交換器以進行冗余。 擴展集會自動使用放置群組,其可做為隱含的可用性設定組。

部署至可用性區域時,請使用 Azure Load Balancer 的標準 SKU 和應用程式閘道的 v2 sku。 這些 Sku 支援跨區域冗余。 如需詳細資訊,請參閱

單一應用程式閘道部署可以執行多個閘道實例。 針對生產工作負載,請執行至少兩個實例。

Cassandra 叢集

針對 Cassandra 叢集,容錯移轉案例取決於應用程式所使用的一致性層級,以及複本數目。 如需 Cassandra 中的一致性層級和使用方式,請參閱設定 資料一致性Cassandra:有多少節點與仲裁交談? Cassandra 中的資料可用性是由應用程式和複寫機制所使用的一致性層級所決定。 如需 Cassandra 中的複寫,請參閱 NoSQL 資料庫的資料複寫說明

健康狀態探查

應用程式閘道和 Load Balancer 都會使用健康情況探查來監視 VM 實例的可用性。

  • 應用程式閘道一律會使用 HTTP 探查。
  • Load Balancer 可以測試 HTTP 或 TCP。 一般而言,如果 VM 執行 HTTP 伺服器,請使用 HTTP 探查。 否則,請使用 TCP。

如果探查無法在超時期間內連線到實例,閘道或負載平衡器就會停止將流量傳送到該 VM。 探查會繼續檢查,如果 VM 再次變成可用,則會將 VM 傳回至後端集區。

HTTP 探查會將 HTTP GET 要求傳送至指定的路徑,並接聽 HTTP 200 回應。 此路徑可以是根路徑 ("/"),或是實作一些自訂邏輯來檢查應用程式健康情況的健康情況監視端點。 端點必須允許匿名的 HTTP 要求。

如需健康情況探查的詳細資訊,請參閱:

如需設計健康情況探查端點的考慮,請參閱 健康情況端點監視模式

成本考量

使用 Azure 定價計算機 來預估成本。 以下是一些其他考慮。

虛擬機器擴展集

虛擬機器擴展集適用于所有 Linux VM 大小。 您只需針對您部署的 Azure Vm,以及使用的任何其他基礎結構資源(例如儲存體和網路)付費。 虛擬機器擴展集服務本身不會有累加的費用。

如需單一 Vm 定價選項,請參閱 Linux vm 定價

負載平衡器

您只需支付已設定的負載平衡和輸出規則數目。 輸入 NAT 規則是免費的。 未設定任何規則時,Standard Load Balancer 不會收取每小時費用。

如需詳細資訊,請參閱 Microsoft Azure Well-Architected Framework 中的成本一節。

安全性考量

虛擬網路是 Azure 中的流量隔離界限。 某一個 VNet 中的 VM 無法直接與不同 VNet 中的 VM 通訊。 除非您建立網路安全性群組 (NSG) 來限制流量,否則,相同 VNet 中的 VM 可以彼此通訊。 如需詳細資訊,請參閱 Microsoft 雲端服務和網路安全性

針對傳入的網際網路流量,負載平衡器規則會定義哪些流量可以連線到後端。 不過,負載平衡器規則不支援 IP 安全清單,因此,如果您想要將特定的公用 IP 位址新增至安全清單,請將 NSG 新增至子網路。

DMZ。 請考慮新增網路虛擬設備 (NVA),在網際網路和 Azure 虛擬網路之間建立 DMZ。 NVA 是虛擬設備的通稱,可以執行網路相關的工作,例如防火牆、封包檢查、稽核和自訂路由傳送。 如需詳細資訊,請參閱實作 Azure 和網際網路之間的 DMZ

加密。 將機密的待用資料加密,並使用 Azure Key Vault 來管理資料庫加密金鑰。 Key Vault 可以在硬體安全模組 (HSM) 中儲存加密金鑰。 也建議將應用程式密碼 (例如資料庫連接字串) 儲存在金鑰保存庫中。

DDoS 保護。 Azure 平台預設會提供基本的 DDoS 保護。 此基本保護的目標是保護整個 Azure 基礎結構。 雖然基本 DDoS 保護會自動啟用,我們仍建議您使用 DDoS 保護標準。 標準保護使用彈性調整,可根據您的應用程式網路流量模式來偵測威脅。 這可讓它針對 DDoS 攻擊套用風險降低措施,這些攻擊可能因整個基礎結構的 DDoS 原則而未被察覺。 標準保護也會提供警示、遙測以及透過 Azure 監視器的分析。 如需詳細資訊,請參閱 Azure DDoS 保護:最佳做法與參考架構

部署解決方案

此參考架構的部署可在 GitHub 上取得。

如果您指定支援可用性區域的區域,則會將 Vm 部署到可用性區域。 否則,Vm 會部署到可用性設定組中。 如需支援「可用性區域」的區域清單,請參閱 依區域支援的服務

必要條件

  1. 複製、派生或下載適用於參考架構 GitHub 存放庫的 zip 檔案。

  2. 安裝 Azure CLI 2.0

  3. 安裝 Node 和 NPM

  4. 安裝 Azure 建置組塊 npm 封裝。

    npm install -g @mspnp/azure-building-blocks
    
  5. 從命令提示字元、Bash 提示字元或 PowerShell 提示字元中登入 Azure 帳戶,如下所示:

    az login
    

使用 azbb 部署解決方案

若要以多層式架構 (N-Tier) 應用程式參考架構部署 Linux VM,請依以下步驟進行:

  1. 流覽至 virtual-machines\n-tier-linux 您在上述必要條件的步驟1中複製之存放庫的資料夾。

  2. 參數檔案會指定部署中每個 VM 的預設管理員使用者名稱及密碼。 在部署參考架構前先變更這些內容。 開啟 n-tier-linux.json 檔案,並用新設定取代每個 n-tier-linux.jsonadminPassword 欄位。 儲存檔案。

  3. 使用如下所示的 azbb 工具來部署參考架構。

    azbb -s <your subscription_id> -g <your resource_group_name> -l <azure region> -p n-tier-linux.json --deploy
    

DevOps 考量

在此架構中,您會使用 Azure 建立區塊範本 來布建 azure 資源及其相依性。 由於所有的主要資源及其相依性都位於相同的虛擬網路中,因此它們會在相同的基本工作負載中隔離,以便更輕鬆地將工作負載的特定資源關聯至 DevOps 小組,讓小組可以獨立管理這些資源的所有層面。 這種隔離可讓 DevOps Teams 和服務 (CI/CD) 執行持續整合和持續傳遞。

此外,您可以使用不同的部署範本,並將其與Azure DevOps Services整合,以在幾分鐘內布建不同的環境,例如,只在需要時才複寫生產案例或負載測試環境,以節省成本。

在此 sceanario 中,您可以使用虛擬機器擴充功能來設定虛擬機器,因為它們提供安裝特定軟體(例如 Apache Cassandra)的可能性。 尤其是,自訂腳本擴充功能可讓您在虛擬機器上下載並執行任意程式碼,以允許無限制地自訂 Azure VM 的作業系統。 VM 擴充功能只會在 VM 建立期間安裝並執行。 這表示,如果作業系統在稍後的階段未正確設定,就需要手動介入,才能將它移回正確的狀態。 您可以使用設定管理工具來解決此問題。

請考慮使用 Azure 監視器,不需要登入您的虛擬機器即可分析和最佳化基礎結構的效能、監視和診斷網路問題。 Application Insights 實際上是 Azure 監視器的其中一個元件,可提供您豐富的計量和記錄,以驗證您的完整 Azure 環境狀態。 Azure 監視器可協助您遵循基礎結構的狀態。

請務必只監視支援應用程式程式碼的計算元素,但您的資料平臺(尤其是您的資料庫),因為應用程式資料層的低效能可能會造成嚴重的後果。

為了測試應用程式執行所在的 Azure 環境,它應該透過與應用程式程式碼相同的機制進行版本控制和部署,然後也可以使用 DevOps 測試範例來進行測試和驗證。

如需詳細資訊,請參閱Microsoft Azure Well-Architecture Framework中的卓越操作一節。

下一步