教學課程:將 WebSphere Liberty/Open Liberty 遷移至具有高可用性和災害復原的 Azure Kubernetes Service (AKS)
本教學課程說明使用 Azure Kubernetes Service 上的 WebSphere Liberty/Open Liberty 為 Java 實作高可用性和災害復原 (HA/DR) 的簡單且有效方式。 此解決方案說明如何使用在 WebSphere Liberty/Open Liberty 上執行的簡單資料庫驅動 Jakarta EE 應用程式,達成低復原時間目標 (RTO) 和恢復點目標 (RPO)。
HA/DR 是一個複雜的主題,有許多可能的解決方案。 最佳解決方案取決於您的獨特需求。 如需實作 HA/DR 的其他方式,請參閱本文結尾的資源。
在本教學課程中,您會了解如何:
- 使用 Azure 優化的最佳作法來達成高可用性和災害復原。
- 在配對區域中設定 Microsoft Azure SQL 資料庫 故障轉移群組。
- 在 AKS 上設定主要 WebSphere Liberty/Open Liberty 叢集。
- 使用 Azure 備份 設定叢集的災害復原。
- 設定次要 AKS 叢集。
- 設定 Azure 流量管理員。
- 測試從主要故障轉移到次要複本。
下圖說明您所建置的架構:
Azure 流量管理員 檢查區域的健康情況,並據以將流量路由傳送至應用層。 主要區域和次要區域都有自由叢集的完整部署。 不過,只有主要區域會主動維護來自用戶的網路要求。 次要區域是被動的,而且只有在主要區域遇到服務中斷時,才會啟動以接收流量。 Azure 流量管理員 會使用 Azure 應用程式閘道的健康情況檢查功能來實作此條件式路由。 主要叢集正在執行,且次要叢集已關閉。 應用層的異地故障轉移 RTO 取決於啟動虛擬機 (VM) 和執行次要叢集的時間。 RPO 取決於 Azure SQL 資料庫,因為數據會保存在 Azure SQL 資料庫 故障轉移群組中並加以複寫。
資料庫層包含具有主伺服器和輔助伺服器的 Azure SQL 資料庫 故障轉移群組。 讀取/寫入接聽程式端點一律指向主伺服器,並聯機到每個區域中的WebSphere Liberty/Open Liberty 叢集。 異地容錯移轉會將群組中所有次要資料庫切換到主要角色。 如需 Azure SQL 資料庫 的異地故障轉移 RPO 和 RTO,請參閱 Azure SQL 資料庫 商務持續性概觀。
本教學課程是以 Azure 備份 和 Azure SQL 資料庫 服務撰寫,因為本教學課程依賴這些服務的 HA 功能。 其他資料庫選擇是可能的,但您必須考慮您選擇的任何資料庫的HA功能。
必要條件
- Azure 訂用帳戶。 如果您沒有 Azure 訂用帳戶,請在開始前建立免費帳戶。
- 確定您已獲指派訂用帳戶的
Owner
角色或Contributor
和User Access Administrator
角色。 您可以依照使用 Azure 入口網站 列出 Azure 角色指派中的步驟來確認指派。 - 準備已安裝 Windows、Linux 或 macOS 的本機電腦。
-
安裝 Azure CLI 2.62.0 或更新版本以執行 Azure CLI 命令。
- 使用 az login 命令登入 Azure CLI。 若要完成驗證程式,請遵循終端機中顯示的步驟。 如需查看其他登入選項,請參閱 使用 Azure CLI 登入 Azure。
- 出現提示時,請先安裝 Azure CLI 擴充功能。 如需擴充功能的詳細資訊,請參閱 使用和管理 Azure CLI 的擴充功能。
- 執行 az version,以查看已安裝的版本和相依函式庫。 若要升級至最新版本,請執行 az upgrade 。
- 安裝和設定 Git。
- 安裝 Java SE 實作版本 17 或更新版本 - 例如 OpenJDK 的Microsoft組建。
- 安裝 Maven 3.9.3 版或更新版本。
在配對區域中設定 Azure SQL 資料庫 故障轉移群組
在本節中,您會在配對區域中建立 Azure SQL 資料庫 故障轉移群組,以搭配 WebSphere Liberty/Open Liberty 叢集和應用程式使用。 在稍後的章節中,您會將 WebSphere Liberty/Open Liberty 設定為將其會話資料儲存至此資料庫。 這種做法參考 建立會話持續性的數據表。
首先,遵循快速入門:建立單一資料庫 - Azure SQL 資料庫 中的 Azure 入口網站 步驟,建立主要 Azure SQL 資料庫。 請遵循步驟,但不包括「清除資源」一節。 當您流覽本文時,請使用下列指示,然後在建立並設定 Azure SQL 資料庫 之後返回本文。
當您連線到建立單一資料庫一節時,請使用下列步驟:
- 在建立新資源群組的步驟 4 中,儲存 [ 資源組名] 值 ,例如
myResourceGroup
。 - 在資料庫名稱的步驟 5 中,另存另一 個資料庫名稱 值 ,例如
mySampleDatabase
。 - 在建立伺服器的步驟 6 中,使用下列步驟:
- 填入唯一的伺服器名稱,例如
sqlserverprimary-mjg032524
。 - 針對 [ 位置],選取 [美國) 美國東部]。
- 針對 [ 驗證方法],選取 [ 使用 SQL 驗證]。
- 將伺服器管理員登入值儲存
- 請儲存 [ 密碼 ] 值。
- 填入唯一的伺服器名稱,例如
- 在步驟 8 中,針對 [工作負載環境],選取 [ 開發]。 查看描述,並考慮工作負載的其他選項。
- 在步驟 11 中,針對 [備份記憶體備援],選取 [ 本地備援備份記憶體]。 請考慮備份的其他選項。 如需詳細資訊,請參閱 Azure SQL 資料庫 中自動備份的備份記憶體備援一節。
- 在步驟 14 的 [防火牆規則 設定] 中,針對 [允許 Azure 服務和資源存取此伺服器],選取 [ 是]。
然後,依照設定 Azure SQL 資料庫 故障轉移群組中的 Azure 入口網站 步驟,建立 Azure SQL 資料庫 故障轉移群組。 您只需要下列各節: 建立故障轉移群組 和 測試計劃性故障轉移。 當您流覽本文時,請使用下列步驟,然後在建立及設定 Azure SQL 資料庫 故障轉移群組之後返回本文:
當您到達建立故障轉移群組一節時,請使用下列步驟:
- 在建立故障轉移群組的步驟 5 中,輸入並儲存唯一的故障轉移組名,例如
failovergroup-mjg032524
。 - 在設定伺服器的步驟 5 中,選取選項以建立新的輔助伺服器,然後使用下列步驟:
- 輸入唯一的伺服器名稱 ,例如
sqlserversecondary-mjg032524
。 - 輸入與主伺服器相同的伺服器管理員和密碼。
- 針對 [ 位置],選取 [美國) 美國西部]。
- 請確定 已選取 [允許 Azure 服務存取伺服器 ]。
- 輸入唯一的伺服器名稱 ,例如
- 在設定群組內資料庫的步驟 5 中,選取您在主伺服器中建立的資料庫,例如
mySampleDatabase
。
- 在建立故障轉移群組的步驟 5 中,輸入並儲存唯一的故障轉移組名,例如
完成測試計劃性故障轉移一節中的所有步驟之後,請讓故障轉移群組頁面保持開啟,並在稍後用於 WebSphere Liberty/Open Liberty 叢集的故障轉移測試。
注意
本文會引導您建立具有 SQL 驗證的 Azure SQL Database 單一資料庫,以便簡單起見,因為本文著重於的 HA/DR 設定已經非常複雜。 更安全的做法是針對 Azure SQL 使用
在 AKS 上設定主要 WebSphere Liberty/Open Liberty 叢集
在本節中,您會使用 IBM WebSphere Liberty 和 Azure Kubernetes Service 上的 Open Liberty 供應專案,在 AKS 上建立主要 WebSphere Liberty/Open Liberty 叢集。 次要叢集會在故障轉移期間,於稍後使用 Azure 備份 從主要叢集還原。
部署主要 WebSphere Liberty/Open Liberty 叢集
使用下列步驟來部署主要叢集:
在 瀏覽器中開啟 IBM WebSphere Liberty 和 Open Liberty on Azure Kubernetes Service 供應專案,然後選取 [ 建立]。 您應該會看到 供應專案的 [基本] 窗格。
使用下列步驟填寫 [基本] 窗格:
- 請確定 [ 訂用帳戶 ] 所顯示的值與必要條件區段中所列角色的值相同。
- 您必須在空的資源群組中部署供應項目。 在 [ 資源群組 ] 字段中,選取 [新建 ] 並填入資源群組的唯一值,例如
liberty-aks-eastus-mjg032524
。 - 在 [實例詳細數據] 底下,針對 [區域],選取 [美國東部]。
- 選取 [下一步 ] 以移至 [AKS ] 窗格。
請稍候一段時間。 您應該會在 AKS 窗格中看到所有預先填入預設值的欄位。 選取 [下一步 ] 以移至 [負載平衡] 窗格。
使用下列步驟填寫 [負載平衡 ] 窗格:
- 針對 [連線至 Azure 應用程式閘道?],選取 [是]。
- 保留其他欄位的預設值。
- 選取 [下一步 ] 以移至 [ 操作員和應用程式 ] 窗格。
使用下列步驟填寫 [操作員和應用程式 ] 窗格:
保留所有欄位的預設值。
注意
本教學課程會使用預設值來部署 Open Liberty 運算符。 您可以選擇性地為 IBM 支援選取 [是?] 來部署 WebSphere Liberty 操作員。
選取 [檢閱 + 建立]。
等到 執行最終驗證 ...成功完成,然後選取 [ 建立]。
一段時間之後,您應該會看到 [部署進行中] 頁面。
注意
如果您在執行最終驗證期間 看到任何問題...,請加以修正,然後再試一次。
視所選區域中的網路狀況和其他活動而定,部署最多可能需要 30 分鐘才能完成。 之後,您應該會在部署頁面上看到 [您的部署已完成] 文字顯示。
確認叢集的部署
您已部署 AKS 叢集、Azure Container Registry (ACR) 實例,以及主要區域中的 Azure 應用程式閘道。 AKS 叢集是部署和執行應用程式的目標運算平臺。 ACR 實例會儲存 AKS 在應用程式部署期間提取的應用程式映像。 Azure 應用程式閘道 做為部署至 AKS 叢集之應用程式的負載平衡器。
在移至下一個步驟之前,請使用下列步驟來驗證這些重要元件:
返回 [ 部署] 頁面,然後選取 [ 輸出]。
複製 cmdToConnectToCluster 屬性的值。 開啟終端機,貼上複製的命令,然後按 Enter 來執行。 您應該會看到類似輸出中包含的下列範例的訊息:
Merged "cluster3984d1-admin" as current context in <your-user>\.kube\config
將命令儲存在一邊,以便稍後使用命令來連線到叢集。
在終端機中執行
kubectl get pod --all-namespaces
,以列出在 AKS 叢集上執行的所有 Pod。 您應該會看到類似下列範例的結果:NAMESPACE NAME READY STATUS RESTARTS AGE cert-manager cert-manager-66bc9756fd-255pk 1/1 Running 0 8m55s cert-manager cert-manager-cainjector-669c9fb694-k4q88 1/1 Running 0 8m55s cert-manager cert-manager-webhook-84967d556d-vj4lp 1/1 Running 0 8m55s kube-system azure-ip-masq-agent-dgzkt 1/1 Running 0 29m kube-system cloud-node-manager-6x7bp 1/1 Running 0 29m kube-system coredns-789789675-6b7dh 1/1 Running 0 28m kube-system coredns-789789675-n68wt 1/1 Running 0 29m kube-system coredns-autoscaler-649b947bbd-zhdbn 1/1 Running 0 29m kube-system csi-azuredisk-node-h9p7m 3/3 Running 0 29m kube-system csi-azurefile-node-jnllw 3/3 Running 0 29m kube-system ingress-appgw-deployment-69944d8fb9-v9btr 1/1 Running 5 (12m ago) 17m kube-system konnectivity-agent-94878f88c-hfqng 1/1 Running 0 29m kube-system konnectivity-agent-94878f88c-ln2vp 1/1 Running 0 29m kube-system kube-proxy-28lkg 1/1 Running 0 29m kube-system metrics-server-5fffcb8954-549xl 2/2 Running 0 28m kube-system metrics-server-5fffcb8954-fn56g 2/2 Running 0 28m open-liberty olo-controller-manager-7954d76cf8-qhmxw 1/1 Running 0 8m40s
在終端機中執行
kubectl get secret
,以列出 AKS 叢集上安裝的所有秘密。 您應該會在輸出中看到一個秘密,如下列範例所示:NAME TYPE DATA AGE secret3984d1 kubernetes.io/tls 2 24m
此秘密是 TLS 秘密,其中包含 TLS 流量的憑證和密鑰數據。 複製並儲存秘密的名稱,例如,
secret3984d1
您稍後會在應用程式部署中使用它。切換回 [ 輸出] 頁面。 複製 cmdToLoginInRegistry 屬性的值。 將複製的命令貼到終端機中,然後按 Enter 來執行。 您應該會在輸出中看到 登入成功 。 讓終端機保持開啟,並在稍後再將其用於 WebSphere Liberty/Open Liberty 叢集的進一步設定。
使用下列步驟來取得 Azure 應用程式閘道 公用IP位址的名稱和 DNS 名稱。 您稍後會將其用於應用程式部署和 Azure 流量管理員 設定。
- 在 Azure 入口網站 的搜尋方塊中,輸入 [資源群組],然後從搜尋結果中選取 [資源群組]。
- 選取主要區域的資源組名 ,例如,liberty-aks-eastus-mjg032524。
- 尋找 公用IP位址 資源前面加上 gwip,然後複製並儲存其名稱。
- 選取 公用 IP 位址 資源,然後複製並儲存 DNS 名稱 值,例如,olgw3984d1.eastus.cloudapp.azure.com。
啟用 ACR 實例的異地複寫
ACR 實例的設計目的是儲存主要和次要叢集的應用程式映像。 使用下列步驟來啟用 ACR 實例的異地複寫:
在 Azure 入口網站 的搜尋方塊中,輸入 [資源群組],然後從搜尋結果中選取 [資源群組]。
選取主要區域的資源組名 ,例如,liberty-aks-eastus-mjg032524。
尋找
Container Registry 前面加上 acr資源,然後選取它加以開啟。 選取 [屬性]。 針對 [定價方案],選取 [進階],然後選取 [儲存]。 等到完成為止。
選取 [ 異地複寫],然後選取 [ 新增]。 針對 [ 位置],選取 [美國西部],然後選取 [ 建立]。 等到完成為止。
等候一段時間,選取 [ 重新整理]。 重複作業,直到您看到兩個位置已列出,且 狀態 為 [ 就緒]。
使用下列步驟來取得 ACR 登入認證。 您稍後會使用它們進行應用程式部署。
選取 [存取金鑰]。
複製並分別儲存 註冊表名稱 的值以及 登入伺服器。
注意
本文使用
az acr build
命令來建置 Docker 映射,並將 Docker 映射推送至 Container Registry,而不需使用容器登錄的username
和password
。 您仍然可以搭配docker login
和docker push
使用使用者名稱和密碼。 使用使用者名稱和密碼比無密碼驗證不安全。
部署範例應用程式
使用下列步驟在 WebSphere Liberty/Open Liberty 叢集上部署和執行範例 CRUD Java/Jakarta EE 應用程式,以供稍後進行災害復原故障轉移測試:
使用下列命令下載範例:
git clone https://github.com/Azure-Samples/open-liberty-on-aks.git cd open-liberty-on-aks export BASE_DIR=$PWD git checkout 20240325
應用程式會設定數據源 jdbc/JavaEECafeDB,以連線到您先前部署的 Azure SQL 資料庫。 數據源用於 儲存 HTTP 會話數據,可跨 WebSphere Liberty/Open Liberty 伺服器叢集進行故障轉移和負載平衡。 範例應用程式也會設定 持續性架構 ,以將應用程式資料
coffee
保存在相同的數據源中。 請注意,範例的內容根目錄在 server.xml/
設定為 。使用下列命令,以您先前儲存的值來定義環境變數:
export DB_SERVER_NAME=<failover-group-name>.database.windows.net export DB_NAME=mySampleDatabase export DB_USER=azureuser@<failover-group-name> export DB_PASSWORD='<SQL-Server-admin-login-password>' export REGISTRY_NAME=<ACR-registry-name> export LOGIN_SERVER=<ACR-login-server> export INGRESS_TLS_SECRET=<TLS-secret-name>
使用
az acr build
命令來建置 Docker 映射並將其推送至 Container Registry,如下列範例所示:cd $BASE_DIR/java-app mvn clean install cd $BASE_DIR/java-app/target # If you deployed WebSphere Liberty Operator previously, use "Dockerfile-wlp" instead of "Dockerfile" az acr build \ --registry ${REGISTRY_NAME} \ --image javaee-cafe:v1 \ --file Dockerfile \ .
使用下列命令將範例應用程式部署至 AKS 叢集:
cd $BASE_DIR/java-app/target kubectl apply -f db-secret.yaml # If you deployed WebSphere Liberty Operator previously, use "webspherelibertyapplication-agic.yaml" instead of "openlibertyapplication-agic.yaml" kubectl apply -f openlibertyapplication-agic.yaml
執行下列命令以取得您部署的範例應用程式:
# If you deployed WebSphere Liberty Operator previously, use "WebSphereLibertyApplication" instead of "OpenLibertyApplication" kubectl get OpenLibertyApplication
您應該在輸出中看到 READY 應用程式:
NAME IMAGE EXPOSED RECONCILED RESOURCESREADY READY AGE javaee-cafe-cluster-agic acr3984d1.azurecr.io/javaee-cafe:v1 True True True 45s
執行下列命令以取得部署期間所建立 Pod 的狀態:
kubectl get pods
下列範例指出所有 Pod 都在執行中。 如果您沒有看到類似的輸出,請等候一段時間並重複作業。
NAME READY STATUS RESTARTS AGE javaee-cafe-cluster-agic-6bbb8d6f5c-2xjc4 1/1 Running 0 1m javaee-cafe-cluster-agic-6bbb8d6f5c-4f449 1/1 Running 0 1m javaee-cafe-cluster-agic-6bbb8d6f5c-m2wg6 1/1 Running 0 1m
使用下列步驟來確認應用程式如預期般執行:
在新瀏覽器索引標籤中,開啟您先前儲存之 Azure 應用程式閘道 之公用 IP 位址的 DNS 名稱。 使用通訊
https
協定 ─ 例如https://olgw3984d1.eastus.cloudapp.azure.com
。 您應該會看到範例應用程式的歡迎頁面。使用名稱和價格建立新的咖啡 -例如,具有價格 10 的 Coffee 1 ,其會保存在資料庫的應用程式數據表和會話數據表中。 您看到的 UI 應該類似下列螢幕快照:
如果您的UI看起來不類似,請先進行疑難解答並解決問題,再繼續進行。
使用 Azure 備份 設定叢集的災害復原
在本節中,您會使用 Azure 備份,為主要區域中的 AKS 叢集設定災害復原。
建立儲存體帳戶
AKS 備份會使用 Blob 容器來保存 AKS 叢集資源。 您可以建立另一個 Blob 容器作為暫存位置,以在跨區域還原期間使用。
使用下列步驟建立記憶體帳戶和兩個容器。 其中一些步驟會引導您前往其他指南。
- 登入 Azure 入口網站。
- 依照建立記憶體帳戶中的 步驟建立記憶體帳戶。 您不需要執行文章中的所有步驟。 使用下列步驟填寫 [基本] 窗格上所示的欄位:
- 針對 [ 資源群組],選取部署主要叢集的現有資源群組,例如
liberty-aks-eastus-mjg032524
。 - 針對 [ 記憶體帳戶名稱],輸入唯一的名稱,例如
storageeastusmjg032524
。 - 在 [區域] 中,選取 [美國東部]。
- 選取 [ 檢閱 + 建立] 以接受預設選項。
- 繼續驗證並建立帳戶,然後返回本文。
- 針對 [ 資源群組],選取部署主要叢集的現有資源群組,例如
- 遵循建立記憶體容器中的步驟,建立 AKS 備份延伸模組的 記憶體容器。 本指南使用
aks-backup-ext
作為容器名稱。 - 建立另一個記憶體容器作為暫存位置,以供還原期間使用。 本指南使用
staging
作為容器名稱。
啟用 AKS 備份擴充功能
在繼續之前,請使用下列步驟,將 AKS 備份延伸模組安裝到主要區域中的叢集:
啟用叢集的 CSI 驅動程式和快照集。 針對下列
az aks update
命令,將Bash變數RG_NAME
的值更新為您的資源組名,例如,liberty-aks-eastus-mjg032524
並在本機Bash終端機中執行。export RG_NAME=<your-aks-cluster-resource-group> export AKS_NAME=$(az aks list \ --resource-group ${RG_NAME} \ --query "[0].name" \ --output tsv | tr -d '\r') az aks update \ --resource-group ${RG_NAME} \ --name ${AKS_NAME} \ --enable-disk-driver \ --enable-file-driver \ --enable-blob-driver \ --enable-snapshot-controller --yes
啟用驅動程式大約需要 5 分鐘的時間。 在繼續之前,請確定命令已完成,而不會發生錯誤。
開啟已部署 AKS 的資源群組,例如
liberty-aks-eastus-mjg032524
。 從資源清單中選取 AKS 叢集。在 [AKS 登陸] 頁面的 [設定 ] 下,選取 [備份],然後選取 [ 安裝擴充功能]。
在 [ 安裝 AKS 備份擴充功能 ] 頁面中,選取 [ 下一步]。 選取在相同資源群組中建立的記憶體帳戶
storageeastusmjg032524
和 Blob 容器aks-backup-ext
。 選取 [ 下一步],然後選取 [ 建立]。 完成此步驟大約需要五分鐘的時間。
備份 AKS 叢集
使用下列步驟來備份 AKS 叢集:
在 [Azure 入口網站] 的搜尋方塊中,搜尋備份保存庫。 您會看到它列在 [服務] 底下。 選取該連結。
請遵循使用 Azure 備份 備份 Azure Kubernetes Service 中的步驟,為主要叢集啟用 AKS 備份。 執行步驟,但不包括 在 AKS 備份 期間使用勾點,並使用本節中的其餘步驟,在進行時進行調整。
當您到達 [ 建立備份保存庫 ] 區段時,請使用下列步驟:
當您到達 [ 建立備份原則 ] 區段時,請使用下列步驟:
在 [設定備份] 區段中,使用下列步驟:
略過步驟 1-5,這是針對 AKS 擴充功能安裝。 從主要區域中 AKS 叢集的步驟 6 開始。
針對步驟 7,針對 儲存庫,選取您在相同資源群組中建立的備份保存庫,例如
aks-backup-vault-eastus-mjg032524
。 當您遇到許可權錯誤時,請選取 [ 授與許可權 ] 以繼續。 許可權部署完成之後,如果錯誤仍然顯示,請選取 [重新驗證 ] 以重新整理角色指派。針對步驟 10,尋找 [選取要備份的資源]。 針對 備份實體名稱,填入唯一名稱,例如
akseastusmjg032524
。 針對 [其他選項],選取所有選項。 請確定 已選取 [包含秘密 ]。針對步驟 11,您遇到角色指派錯誤。 請遵循步驟 12-14 來減輕錯誤。
在步驟 15 中選取 [ 設定備份 ] 之後,您會返回 [ 備份 ] 頁面。 等候一段時間,然後選取 [ 重新整理]。 重複作業,直到您看到備份實例已列出,且其 [保護] 狀態 已 設定。
等候保存庫標準備份發生
在 AKS 中,保存庫標準層是唯一支援 異地備援 和 跨區域還原的層。 如 AKS 備份支援哪個備份儲存層中所述 ?,「每天只有一個排程的恢復點移至保存庫層」。您必須等候保存庫標準備份發生。 良好的下限是在您還原之前完成上一個步驟之後最多等候 24 小時。
使用下列步驟來確認保存庫標準備份可供使用:
在 主要 AKS 叢集的 [備份 ] 頁面中,選取備份實例。
等候一段時間,然後選取 [ 重新整理]。 重複作業,直到您看到至少一個 Operational and Vault-standard 還原點列在 RESTORE POINTS 一節中。
設定次要 AKS 叢集
等候主要 AKS 叢集進行保存庫標準備份時,請設定次要 AKS 叢集以供稍後還原。
使用部署主要 WebSphere Liberty/Open Liberty 叢集一節 中的相同步驟,在次要區域中設定次要 AKS 叢集 ,但有下列差異:
在 [ 基本] 窗格中,使用下列步驟:
- 在 [ 資源群組] 字段中,選取 [新建 ] 並填入資源群組的不同唯一值,例如
liberty-aks-westus-mjg032524
。 - 在 [實例詳細數據] 底下,針對 [區域],選取 [美國西部]。
- 在 [ 資源群組] 字段中,選取 [新建 ] 並填入資源群組的不同唯一值,例如
在 [ AKS ] 窗格中,使用下列步驟:
使用 [確認叢集部署] 區段中的相同步驟來驗證次要區域中的部署,但有下列差異:
- 您不需要複製並儲存 TLS 秘密的名稱。 TLS 秘密會從主要 AKS 叢集的備份還原。
- 例如,當您查閱次要區域中所部署 Azure 應用程式閘道 之公用IP位址的名稱和 DNS 名稱時,
liberty-aks-westus-mjg032524
請使用次要叢集的資源群組。
使用建立記憶體帳戶一節 中的相同步驟,在次要區域中建立記憶體帳戶 ,但有下列差異:
- 針對 [ 資源群組 ] 字段,選取部署次要叢集的現有資源群組,例如
liberty-aks-westus-mjg032524
。 - 針對 [ 記憶體帳戶名稱],輸入唯一的名稱,例如
storagewestusmjg032524
。 - 針對 [區域],選取 [美國西部]。
使用啟用 AKS 備份延伸模組一節 中的相同步驟,在次要區域中安裝叢集的 AKS 備份擴充功能 ,但有下列差異:
- 在啟用次要叢集 CSI 驅動程式和快照集的步驟 1 中,將 Bash 變數
RG_NAME
的值更新為次要區域中的資源群組,例如liberty-aks-westus-mjg032524
。 - 在步驟 2 中,從次要區域中的資源群組選取 AKS 叢集,例如
liberty-aks-westus-mjg032524
。 - 在安裝次要叢集的 AKS 備份擴充功能的步驟 4 中,選取您在次要區域相同資源群組中建立的記憶體帳戶,例如
storagewestusmjg032524
。
若要節省成本,請遵循停止和啟動 Azure Kubernetes Service (AKS) 叢集中的步驟 ,停止次要區域中的 AKS 叢集。 您必須在稍後還原叢集之前啟動它。
設定 Azure 流量管理員
保存庫標準備份已在等候保存庫標準備份發生一節中提及。 當您看到保存庫標準備份可供使用之後,您可以建立 Azure 流量管理員,將流量分散到全球 Azure 區域的公用面向應用程式。 主要端點會指向主要區域中 Azure 應用程式閘道的公用IP位址。 次要端點會指向次要區域中 Azure 應用程式閘道 的公用IP位址。
遵循快速入門:使用 Azure 入口網站 建立 流量管理員 配置檔中的步驟,以建立 Azure 流量管理員 配置檔。 您只需要下列各節:建立 流量管理員 配置檔和新增 流量管理員 端點。 當您瀏覽這些區段時,請使用下列步驟,然後在建立並設定 Azure 流量管理員 之後返回本文:
當您到達建立 流量管理員 配置檔一節時,請在步驟 2 中,針對 [建立 流量管理員 配置檔],使用下列步驟:
- 針對 [名稱],輸入唯一 流量管理員 設定檔名稱,例如
tmprofile-mjg032524
。 - 針對 [ 路由方法],選取 [ 優先順序]。
- 針對 [ 資源群組],輸入並儲存新的資源組名,例如
myResourceGroupTM1
。
- 針對 [名稱],輸入唯一 流量管理員 設定檔名稱,例如
當您到達 [新增 流量管理員 端點] 區段時,請使用下列步驟:
- 在步驟 2 中開啟 流量管理員 配置文件之後,請在 [組態] 頁面中,使用下列步驟:
- 針對 DNS 存留時間 (TTL),輸入 10。
- 在 [端點監視器設定] 底下,針對 [通訊協定] 選取 [https],然後針對 [埠] 輸入 443。
- 在 [快速端點故障轉移設定] 底下,使用下列值:
- 針對 [ 探查內部],選取 [10]。
- 針對 容許的失敗次數,輸入 3。
- 針對 [ 探查逾時],輸入 5。
- 選取儲存。 等到它完成。
- 在步驟 4 中為主要端點 myPrimaryEndpoint新增時,請使用下列步驟:
- 針對 [ 目標資源類型],選取 [ 公用IP位址]。
- 選取 [選擇公用IP 位址] 下拉式清單,然後輸入您先前儲存在美國東部區域中 Azure 應用程式閘道 的公用IP位址名稱。 您應該會看到一個專案相符。 針對 [公用 IP 位址] 選取它。
- 在新增故障轉移/次要端點
myFailoverEndpoint
的步驟 6 中,使用下列步驟:- 針對 [ 目標資源類型],選取 [ 公用IP位址]。
- 選取 [選擇公用IP 位址] 下拉式清單,然後輸入您先前儲存在美國西部區域中 Azure 應用程式閘道的公用IP位址名稱。 您應該會看到一個專案相符。 針對 [公用 IP 位址] 選取它。
- 請稍候一段時間。 選取 [重新整理],] 為
myPrimaryEndpoint
],且 ] 為 [降級]。
- 在步驟 2 中開啟 流量管理員 配置文件之後,請在 [組態] 頁面中,使用下列步驟:
接下來,使用下列步驟來確認部署至主要叢集的範例應用程式可從 流量管理員 配置檔存取:
選取您所建立 流量管理員 設定檔的概觀。
檢查並複製 流量管理員 設定檔的 DNS 名稱,並將通訊協定
http
取代為https
。 例如:https://tmprofile-mjg032524.trafficmanager.net
。在新瀏覽器索引標籤開啟 URL。您應該會看到您先前建立的咖啡列在頁面中。
建立另一個具有不同名稱和價格的咖啡 -例如,具有價格 20 的 Coffee 2 ,這會同時保存在資料庫的應用程式數據表和會話數據表中。 您看到的 UI 應該類似下列螢幕快照:
如果您的UI看起來不類似,請先進行疑難解答並解決問題,再繼續進行。 讓主控台保持開啟,並在稍後將它用於故障轉移測試。
您已完成設定檔設定 流量管理員。 讓頁面保持開啟,您稍後會用它來監視故障轉移事件中的端點狀態變更。
測試從主要故障轉移到次要複本
在本節中,若要測試故障轉移,您必須手動故障轉移 Azure SQL 資料庫 伺服器並還原 AKS 叢集的備份,然後使用 Azure 入口網站 進行容錯回復。
故障轉移至次要月臺
若要模擬主要區域的中斷,請遵循停止和啟動 Azure Kubernetes Service (AKS) 叢集中的步驟 ,停止主要 AKS 叢集。
接下來,啟動次要 AKS 叢集,以便從主要叢集的備份還原。
注意
如果您有在還原目標叢集上執行的 WebSphere Liberty/Open Liberty 應用程式,若要避免衝突,請使用下列步驟來清除 WebSphere Liberty/Open Liberty 應用程式:
執行先前儲存的 命令
cmdToConnectToCluster
來連線到目標叢集。針對 Open Liberty 應用程式,執行下列命令:
kubectl delete OpenLibertyApplication --all --all-namespaces
針對 WebSphere Liberty 應用程式,請執行下列命令:
kubectl delete WebSphereLibertyApplication --all --all-namespaces
然後,切換至您 流量管理員 配置檔的瀏覽器索引標籤,並確認] 和 myPrimaryEndpoint
[myFailoverEndpoint
]。
現在,使用下列步驟將 Azure SQL 資料庫 從主伺服器故障轉移至輔助伺服器:
- 切換至 Azure SQL 資料庫 故障轉移群組的瀏覽器索引標籤,例如
failovergroup-mjg032524
。 - 選取 [ 故障轉移],然後選取 [ 是]。
- 等到它完成。
接下來,使用下列步驟將主要 AKS 叢集的備份還原至次要 AKS 叢集:
在 Azure 入口網站 的搜尋方塊中,輸入備份中心,然後從搜尋結果中選取 [備份中心]。
在 [管理] 底下,選取 [備份實例]。 篩選數據源類型 Kubernetes Services。 尋找您在上一節中建立的備份實例,例如,<aks-cluster-name>\akseastusmjg032524。
選取備份實例。
選取還原。
在 [ 還原] 頁面上,默認窗格為 [還原點]。 選取 [上一頁 ] 以變更為 [ 基本] 窗格。 針對 [ 還原區域],選取 [次要區域],然後選取 [ 下一步:還原點]。
在 [ 還原點 ] 窗格中,已選取最新的 作業和保存庫標準 還原點。 保留預設值,然後選取 [ 下一步:還原參數]。
在 [ 還原參數 ] 窗格中,使用下列步驟:
選取 [下一步: 檢閱 + 還原]。 然後選取 [還原]。 還原叢集大約需要 10 分鐘的時間。
您可以從備份中心>>的還原程式,如下列螢幕快照所示:
等候一段時間,然後選取 [ 重新整理]。 重複作業,直到您看到 狀態 變成 已完成為止。
然後,使用下列步驟來確認還原是否如預期般運作:
切換至連線至次要 AKS 叢集的終端機。
執行下列命令以從備份還原範例應用程式:
kubectl get OpenLibertyApplication
您應該在輸出中看到 READY 應用程式:
NAME IMAGE EXPOSED RECONCILED RESOURCESREADY READY AGE javaee-cafe-cluster-agic acr3984d1.azurecr.io/javaee-cafe:v1 True True True 3m
執行下列命令以取得部署期間所建立 Pod 的狀態:
kubectl get pods
您應該在輸出中看到三 個執行 中的 Pod:
NAME READY STATUS RESTARTS AGE javaee-cafe-cluster-agic-7bb57dd945-6ljll 1/1 Running 0 3m javaee-cafe-cluster-agic-7bb57dd945-h2xdf 1/1 Running 0 3m javaee-cafe-cluster-agic-7bb57dd945-k744w 1/1 Running 0 3m
切換至您 流量管理員 配置檔的瀏覽器索引標籤,然後重新整理頁面,直到您看到] 為
myFailoverEndpoint
] 和 ] 已降級為止。使用 流量管理員 設定檔的 DNS 名稱切換至瀏覽器索引標籤,例如
https://tmprofile-mjg032524.trafficmanager.net
。 重新整理頁面,您應該會看到應用程式資料表中保存的相同數據,以及顯示的會話數據表。 您看到的 UI 應該類似下列螢幕快照:如果您沒有觀察到此行為,可能是因為 流量管理員 需要時間來更新 DNS 以指向故障轉移網站。 問題也可能是您瀏覽器快取指向失敗網站的 DNS 名稱解析結果。 請稍候一段時間,然後重新整理頁面。
注意
應用程式會將 會話逾時 設定為1小時。 視故障轉移所花費的時間而定,如果範例應用程式 UI 的 [新增咖啡] 區段中顯示會話數據的時間超過一小時,可能不會顯示。
重新保護故障轉移網站
既然次要區域是故障轉移網站且作用中,您應該使用 Azure 備份 重新保護它。
首先,使用<備份 AKS 叢集>一節 中的相同步驟來備份次要 AKS 叢集 ,但有下列差異:
- 針對 [建立備份保存庫],請使用下列步驟:
- 針對 [ 資源群組],選取部署在次要區域中的現有資源群組,例如
liberty-aks-westus-mjg032524
。 - 針對 備份儲存庫名稱,輸入唯一值,例如
aks-backup-vault-westus-mjg032524
。 - 針對 [區域],選取 [美國西部]。
- 針對 [ 資源群組],選取部署在次要區域中的現有資源群組,例如
- 針對 [建立備份原則],請使用下列步驟:
- 選取您在次要區域中建立的備份儲存庫, 例如
aks-backup-vault-westus-mjg032524
。
- 選取您在次要區域中建立的備份儲存庫, 例如
- 針對 [ 設定備份],請使用下列步驟:
- 選取您在次要區域中建立的備份儲存庫, 例如
aks-backup-vault-westus-mjg032524
。 - 針對 備份實體 名稱,填入唯一名稱,例如
akswestusmjg032524
。
- 選取您在次要區域中建立的備份儲存庫, 例如
然後,請使用 [等候保存庫標準備份] 區段中的相同步驟,等到次要 AKS 叢集的保存庫標準備份可供使用,但從次要 AKS 叢集的 [備份] 頁面選取備份實例。
容錯回復至主要月臺
使用故障轉移至次要月臺一節中的 相同步驟來容錯回復到主要月 臺,包括資料庫伺服器和 AKS 叢集,但有下列差異:
當您準備容錯回復時,請使用下列步驟:
- 停止次要 AKS 叢集,以模擬次要區域的中斷。
- 啟動主要 AKS 叢集。
- 連線到主要 AKS 叢集,並清除 WebSphere Liberty/Open Liberty 應用程式。
當您將次要 AKS 叢集的備份還原至主要 AKS 叢集時,請使用下列步驟:
- 選取次要區域中的備份實例,例如
<aks-cluster-name>\akswestusmjg032524
。 - 在 [ 還原參數 ] 窗格中,使用下列步驟:
- 針對 [ 選取目標叢集],選取您在美國東部區域建立的主要 AKS 叢集。
- 針對 [ 備份預備位置],選取您在美國東部區域建立的記憶體帳戶。
- 選取次要區域中的備份實例,例如
當您確認還原如預期般運作時,請使用下列步驟:
- 切換至您連線到主要 AKS 叢集的終端機,並確認已成功還原應用程式。
- 切換至您 流量管理員 配置檔的瀏覽器索引標籤,然後重新整理頁面,直到您看到] 為
myPrimaryEndpoint
] 和 ] 已降級為止。
清除資源
如果您不打算繼續使用 WebSphere Liberty/Open Liberty 叢集和其他元件,請使用下列步驟來刪除資源群組,以清除本教學課程中使用的資源:
- 在 [Azure 入口網站] 的搜尋方塊中,輸入 Azure SQL 資料庫 伺服器的資源組名,例如,
myResourceGroup
從搜尋結果中選取相符的資源群組。 - 選取 [刪除資源群組]。
- 在 [ 輸入資源組名以確認刪除] 中,輸入資源組名。
- 選取 [刪除]。
- 針對 流量管理員 的資源群組重複步驟 1-4 ,例如
myResourceGroupTM1
。 - 在 [Azure 入口網站] 的搜尋方塊中,輸入備份保存庫,然後從搜尋結果中選取 [備份保存庫]。 您應該會看到列出兩個備份保存庫,例如,aks-backup-vault-eastus-mjg032524 和 aks-backup-vault-westus-mjg032524。 針對每個專案,請使用下列步驟:
- 選取以開啟備份保存庫。
- 選取 [> 在 [啟用虛刪除] 旁,取消選取複選框,然後選取 [ 更新]。
- 選取 [管理>備份實例]。 篩選數據源類型 Kubernetes Services。 選取您建立的實例,然後加以刪除。
- 等到刪除兩個備份實例為止。
- 針對主要叢集的資源群組重複步驟 1-4 ,例如 。
liberty-aks-eastus-mjg032524
- 針對次要叢集的資源群組重複步驟 1-4 ,例如
liberty-aks-westus-mjg032524
。
下一步
在本教學課程中,您會設定 WebSphere Liberty/Open Liberty HA/DR 解決方案,其中包含具有主動-被動資料庫層的主動-被動應用程式基礎結構層,以及這兩個層級跨越兩個地理位置不同的月臺。 在第一個站台中,應用程式基礎結構層和資料庫層都處於作用中狀態。 在第二個站臺上,次要網域會使用 Azure 備份 還原,而輔助資料庫則處於待命狀態。
繼續探索下列參考,以取得更多選項來建置 HA/DR 解決方案,並在 Azure 上執行 WebSphere: