教學課程:使用高可用性和災害復原將 WebSphere Liberty/Open Liberty 遷移至 Azure Kubernetes Service

本教學課程說明使用 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 流量管理員。
  • 測試從主要故障轉移到次要複本。

下圖說明您所建置的架構:

AKS 上具有高可用性和災害復原的 WebSphere Liberty/Open Liberty 解決方案架構圖表。

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 角色或 ContributorUser Access Administrator 角色。 您可以依照使用 Azure 入口網站 列出 Azure 角色指派中的步驟來確認指派。
  • 準備已安裝 Windows、Linux 或 macOS 的本機電腦。
  • 安裝和設定 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 資料庫 之後返回本文。

當您連線到建立單一資料庫一節時,請使用下列步驟:

  1. 在建立新資源群組的步驟 4 中,儲存 [ 資源組名] 值 ,例如 myResourceGroup
  2. 在資料庫名稱的步驟 5 中,另存另一 個資料庫名稱 值 ,例如 mySampleDatabase
  3. 在建立伺服器的步驟 6 中,使用下列步驟:
    1. 填入唯一的伺服器名稱,例如 sqlserverprimary-mjg032524
    2. 針對 [ 位置],選取 [美國) 美國東部]。
    3. 針對 [ 驗證方法],選取 [ 使用 SQL 驗證]。
    4. 將伺服器管理員登入值儲存在一邊,例如 azureuser
    5. 請儲存 [ 密碼 ] 值。
  4. 在步驟 8 中,針對 [工作負載環境],選取 [ 開發]。 查看描述,並考慮工作負載的其他選項。
  5. 在步驟 11 中,針對 [備份記憶體備援],選取 [ 本地備援備份記憶體]。 請考慮備份的其他選項。 如需詳細資訊,請參閱 Azure SQL 資料庫 中自動備份的備份記憶體備援一節。
  6. 在步驟 14 的 [防火牆規則 設定] 中,針對 [允許 Azure 服務和資源存取此伺服器],選取 [ ]。

然後,依照設定 Azure SQL 資料庫 故障轉移群組中的 Azure 入口網站 步驟,建立 Azure SQL 資料庫 故障轉移群組。 您只需要下列各節: 建立故障轉移群組測試計劃性故障轉移。 當您流覽本文時,請使用下列步驟,然後在建立及設定 Azure SQL 資料庫 故障轉移群組之後返回本文:

  1. 當您到達建立故障轉移群組一節時,請使用下列步驟:

    1. 在建立故障轉移群組的步驟 5 中,輸入並儲存唯一的故障轉移組名,例如 failovergroup-mjg032524
    2. 在設定伺服器的步驟 5 中,選取選項以建立新的輔助伺服器,然後使用下列步驟:
      1. 輸入唯一的伺服器名稱 ,例如 sqlserversecondary-mjg032524
      2. 輸入與主伺服器相同的伺服器管理員和密碼。
      3. 針對 [ 位置],選取 [美國) 美國西部]。
      4. 請確定 已選取 [允許 Azure 服務存取伺服器 ]。
    3. 在設定群組內資料庫的步驟 5 中,選取您在主伺服器中建立的資料庫,例如 mySampleDatabase
  2. 完成測試計劃性故障轉移一節中的所有步驟之後,請讓故障轉移群組頁面保持開啟,並在稍後用於 WebSphere Liberty/Open Liberty 叢集的故障轉移測試。

在 AKS 上設定主要 WebSphere Liberty/Open Liberty 叢集

在本節中,您會使用 IBM WebSphere Liberty 和 Azure Kubernetes Service 上的 Open Liberty 供應專案,在 AKS 上建立主要 WebSphere Liberty/Open Liberty 叢集。 次要叢集會在故障轉移期間,於稍後使用 Azure 備份 從主要叢集還原。

部署主要 WebSphere Liberty/Open Liberty 叢集

使用下列步驟來部署主要叢集:

  1. 瀏覽器中開啟 IBM WebSphere Liberty 和 Open Liberty on Azure Kubernetes Service 供應專案,然後選取 [ 建立]。 您應該會看到 供應專案的 [基本] 窗格。

  2. 使用下列步驟填寫 [基本] 窗格:

    1. 請確定 [ 訂用帳戶 ] 所顯示的值與必要條件區段中所列角色的值相同。
    2. 您必須在空的資源群組中部署供應項目。 在 [ 資源群組 ] 字段中,選取 [新建 ] 並填入資源群組的唯一值,例如 liberty-aks-eastus-mjg032524
    3. 在 [實例詳細數據] 底下,針對 [區域],選取 [美國東部]。
    4. 選取 [下一步 ] 以移至 [AKS ] 窗格。

    顯示 [Azure Kubernetes Service 基本] 窗格上 IBM WebSphere Liberty 和 Open Liberty 之 Azure 入口網站 的螢幕快照。

  3. 請稍候一段時間。 您應該會在 AKS 窗格中看到所有預先填入預設值的欄位。 選取 [下一步 ] 以移至 [負載平衡] 窗格。

    顯示 [Azure Kubernetes Service AKS] 窗格上 IBM WebSphere Liberty 和 Open Liberty 之 Azure 入口網站 螢幕快照。

  4. 使用下列步驟填寫 [負載平衡 ] 窗格:

    1. 針對 [連線到 Azure 應用程式閘道?],選取 []。
    2. 保留其他欄位的預設值。
    3. 選取 [下一步 ] 以移至 [ 操作員和應用程式 ] 窗格。

    顯示 [Azure Kubernetes Service 負載平衡] 窗格上 IBM WebSphere Liberty 和 Open Liberty 之 Azure 入口網站 螢幕快照。

  5. 使用下列步驟填寫 [操作員和應用程式 ] 窗格:

    1. 保留所有欄位的預設值。

      注意

      本教學課程會使用預設值來部署 Open Liberty 運算符。 您可以選擇性地為 IBM 支援選取 [是] 來部署 WebSphere Liberty 操作員。

    2. 選取 [檢閱 + 建立]。

    3. 等到 執行最終驗證 ...成功完成,然後選取 [ 建立]。

    顯示 [Azure Kubernetes Service 操作員和應用程式] 窗格上 IBM WebSphere Liberty 和 Open Liberty 之 Azure 入口網站 的螢幕快照。

一段時間之後,您應該會看到 [部署進行中] 頁面

注意

如果您在執行最終驗證期間 看到任何問題...,請加以修正,然後再試一次。

視所選區域中的網路狀況和其他活動而定,部署最多可能需要 30 分鐘才能完成。 之後,您應該會看到部署完成的文字顯示在部署頁面上。

確認叢集的部署

您已在主要區域中部署 AKS 叢集、Azure Container Registry (ACR) 實例和 Azure 應用程式閘道。 AKS 叢集是部署和執行應用程式的目標運算平臺。 ACR 實例會儲存 AKS 在應用程式部署期間提取的應用程式映像。 Azure 應用程式閘道 做為部署至 AKS 叢集之應用程式的負載平衡器。

在移至下一個步驟之前,請使用下列步驟來驗證這些重要元件:

  1. 返回 [ 部署] 頁面,然後選取 [ 輸出]。

  2. 複製 cmdToConnectToCluster 屬性的值。 開啟終端機,貼上複製的命令,然後按 Enter 來執行。 您應該會看到類似輸出中包含的下列範例的訊息:

    Merged "cluster3984d1-admin" as current context in <your-user>\.kube\config
    
  3. 將命令儲存在一邊,以便稍後使用命令來連線到叢集。

  4. 在終端機中執行 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
    
  5. 在終端機中執行 kubectl get secret ,以列出 AKS 叢集上安裝的所有秘密。 您應該會在輸出中看到一個秘密,如下列範例所示:

    NAME           TYPE                DATA   AGE
    secret3984d1   kubernetes.io/tls   2      24m
    

    此秘密是 TLS 秘密,其中包含 TLS 流量的憑證和密鑰數據。 複製並儲存秘密的名稱,例如, secret3984d1您稍後會在應用程式部署中使用它。

  6. 切換回 [ 輸出] 頁面。 複製 cmdToLoginInRegistry 屬性的值。 將複製的命令貼到終端機中,然後按 Enter 來執行。 您應該會在輸出中看到 登入成功 。 讓終端機保持開啟,並在稍後再將其用於 WebSphere Liberty/Open Liberty 叢集的進一步設定。

使用下列步驟來取得 Azure 應用程式閘道 公用IP位址的名稱和 DNS 名稱。 您稍後會使用它們進行應用程式部署和 Azure 流量管理員 設定。

  1. 在 [Azure 入口網站] 的搜尋方塊中,輸入 [資源群組],然後從搜尋結果中選取 [資源群組]。
  2. 選取主要區域的資源群組名稱,例如 liberty-aks-eastus-mjg032524
  3. 尋找前面加上 gwip公用IP位址資源,然後複製並儲存其名稱。
  4. 選取[ 公用 IP 位址 ] 資源,然後複製並儲存 DNS 名稱 ,例如 olgw3984d1.eastus.cloudapp.azure.com

啟用 ACR 實例的異地複寫

ACR 實例的設計目的是儲存主要和次要叢集的應用程式映像。 使用下列步驟來啟用 ACR 實例的異地複寫:

  1. 在 [Azure 入口網站] 的搜尋方塊中,輸入 [資源群組],然後從搜尋結果中選取 [資源群組]。

  2. 選取主要區域的資源群組名稱,例如 liberty-aks-eastus-mjg032524

  3. 尋找前面加上 acrContainer Registry 資源,然後選取它加以開啟。

  4. 選取屬性。 針對 [定價方案],選取 [進階],然後選取 [儲存]。 等到完成為止。

  5. 選取 [ 異地複寫],然後選取 [ 新增]。 針對 [ 位置],選取 [美國西部],然後選取 [ 建立]。 等到完成為止。

  6. 等候一段時間,選取 [ 重新整理]。 重複作業,直到您看到兩個位置已列出,且 狀態 為 [ 就緒]。

    Azure 入口網站 的螢幕快照,其中顯示以配對區域中異地復寫啟用的 ACR 實例。

使用下列步驟來取得 ACR 登入認證。 您稍後會使用它們進行應用程式部署。

  1. 選取 [存取金鑰]
  2. 複製並儲存登入伺服器用戶名稱和密碼的值

部署範例應用程式

使用下列步驟在 WebSphere Liberty/Open Liberty 叢集上部署和執行範例 CRUD Java/Jakarta EE 應用程式,以供稍後進行災害復原故障轉移測試:

  1. 使用下列命令下載範例:

    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 檔案中設定為 /

  2. 使用下列命令,以您先前儲存的值來定義環境變數:

    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 LOGIN_SERVER=<ACR-login-server>
    export USER_NAME=<ACR-username>
    export PASSWORD='<ACR-password>'
    export INGRESS_TLS_SECRET=<TLS-secret-name>
    
  3. 使用下列命令來封裝應用程式、建置 Docker 映射、將映射推送至 ACR 實例,並將範例部署至 AKS 叢集:

    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"
    docker buildx build --platform linux/amd64 -t javaee-cafe:v1 --pull --file=Dockerfile .
    docker tag javaee-cafe:v1 ${LOGIN_SERVER}/javaee-cafe:v1
    docker login -u ${USER_NAME} -p ${PASSWORD} ${LOGIN_SERVER}
    docker push ${LOGIN_SERVER}/javaee-cafe:v1
    
    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
    
  4. 執行下列命令以取得您部署的範例應用程式:

    # 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
    
  5. 執行下列命令以取得部署期間所建立 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
    
  6. 使用下列步驟來確認應用程式如預期般執行:

    1. 在新的瀏覽器索引標籤中,開啟您先前儲存之 Azure 應用程式閘道 之公用 IP 位址的 DNS 名稱。 使用通訊 https 協定 ─ 例如 https://olgw3984d1.eastus.cloudapp.azure.com。 您應該會看到範例應用程式的歡迎頁面。

    2. 使用名稱和價格建立新的咖啡 -例如,具有價格 10 的 Coffee 1 ,其會保存在資料庫的應用程式數據表和會話數據表中。 您看到的 UI 應該類似下列螢幕快照:

      範例應用程式 UI 的螢幕快照。

    如果您的UI看起來不類似,請先進行疑難解答並解決問題,再繼續進行。

使用 Azure 備份 設定叢集的災害復原

在本節中,您會使用 Azure 備份,為主要區域中的 AKS 叢集設定災害復原。

建立儲存體帳戶

AKS 備份會使用 Blob 容器來保存 AKS 叢集資源。 您可以建立另一個 Blob 容器作為暫存位置,以在跨區域還原期間使用。

使用下列步驟建立記憶體帳戶和兩個容器。 其中一些步驟會引導您前往其他指南。

  1. 登入 Azure 入口網站
  2. 依照建立記憶體帳戶中的 步驟建立記憶體帳戶。 您不需要執行文章中的所有步驟。 使用下列步驟填寫 [基本] 窗格上所示的欄位:
    1. 針對 [ 資源群組],選取部署主要叢集的現有資源群組,例如 liberty-aks-eastus-mjg032524
    2. 針對 [ 記憶體帳戶名稱],輸入唯一的名稱,例如 storageeastusmjg032524
    3. 在 [區域] 中,選取 [美國東部]
    4. 選取 [ 檢閱 + 建立] 以接受預設選項。
    5. 繼續驗證並建立帳戶,然後返回本文。
  3. 遵循建立記憶體容器中的步驟,建立 AKS 備份延伸模組的 記憶體容器。 本指南使用 aks-backup-ext 作為容器名稱。
  4. 建立另一個記憶體容器作為暫存位置,以供還原期間使用。 本指南使用 staging 作為容器名稱。

啟用 AKS 備份擴充功能

在繼續之前,請使用下列步驟,將 AKS 備份延伸模組安裝到主要區域中的叢集:

  1. 啟用叢集的 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 分鐘的時間。 在繼續之前,請確定命令已完成,而不會發生錯誤。

  2. 開啟已部署 AKS 的資源群組,例如 liberty-aks-eastus-mjg032524。 從資源清單中選取 AKS 叢集。

  3. [AKS 登陸] 頁面的 [設定 ] 下,選取 [備份],然後選取 [ 安裝擴充功能]。

  4. 在 [ 安裝 AKS 備份擴充功能 ] 頁面中,選取 [ 下一步]。 選取在相同資源群組中建立的記憶體帳戶 storageeastusmjg032524 和 Blob 容器 aks-backup-ext 。 選取 [ 下一步],然後選取 [ 建立]。 完成此步驟大約需要五分鐘的時間。

備份 AKS 叢集

使用下列步驟來備份 AKS 叢集:

  1. 在 [Azure 入口網站] 的搜尋方塊中,搜尋備份保存庫。 您會看到它列在 [服務] 底下。 選取該連結。

  2. 請遵循使用 Azure 備份 備份 Azure Kubernetes Service 中的步驟,為主要叢集啟用 AKS 備份。 執行步驟,但不包括 在 AKS 備份 期間使用勾點,並使用本節中的其餘步驟,在進行時進行調整。

  3. 當您到達 [ 建立備份保存庫 ] 區段時,請使用下列步驟:

    1. 針對步驟 1,針對 [資源群組],選取部署主要叢集的現有資源群組,例如 liberty-aks-eastus-mjg032524

    2. 針對 備份儲存庫名稱,輸入唯一值,例如 aks-backup-vault-eastus-mjg032524

    3. 在 [區域] 中,選取 [美國東部]

    4. 針對 [ 備份記憶體備援],選取 [ 全域備援]。

      顯示 [備份保存庫基本] 窗格之 Azure 入口網站 的螢幕快照。

    5. 針對步驟 2,針對 [跨區域還原],選取 [ 啟用]。

  4. 當您到達 [ 建立備份原則 ] 區段時,請使用下列步驟:

    1. 針對步驟 3,輸入備份原則的名稱,例如 aksbackuppolicy

    2. 選取您在相同資源群組中建立的備份儲存庫,例如 aks-backup-vault-eastus-mjg032524

    3. 針對步驟 4,新增選取保存庫標準的保留規則。

      顯示 [建立備份原則] 頁面的 Azure 入口網站 螢幕快照,其中已開啟 [新增保留] 窗格,並醒目提示 [保存庫標準] 選項。

    4. 選取 [新增]。

  5. 在 [設定備份]段中,使用下列步驟:

    1. 略過步驟 1-5,這是針對 AKS 擴充功能安裝。 從主要區域中 AKS 叢集的步驟 6 開始。

    2. 針對步驟 7,針對 儲存庫,選取您在相同資源群組中建立的備份保存庫,例如 aks-backup-vault-eastus-mjg032524。 當您遇到許可權錯誤時,請選取 [ 授與許可權 ] 以繼續。 許可權部署完成之後,如果錯誤仍然顯示,請選取 [重新驗證 ] 以重新整理角色指派。

      Azure 入口網站 的螢幕快照,其中顯示 [設定備份基本概念] 窗格,其中已醒目提示許可權錯誤和 [授與許可權] 連結。

    3. 針對步驟 10,尋找 [選取要備份的資源]。 針對 備份實體名稱,填入唯一名稱,例如 akseastusmjg032524。 針對 [其他選項],選取所有選項。 請確定 已選取 [包含秘密 ]。

      顯示 [選取要備份的資源] 窗格的 Azure 入口網站 螢幕快照,其中已醒目提示 [包含秘密] 選項。

    4. 針對步驟 11,您遇到角色指派錯誤。 請遵循步驟 12-14 來減輕錯誤。

      顯示 [設定備份] 窗格並開啟 [授與遺漏許可權] 對話框的 Azure 入口網站 螢幕快照。

    5. 在步驟 15 中選取 [ 設定備份 ] 之後,您會返回 [ 備份 ] 頁面。 等候一段時間,然後選取 [ 重新整理]。 重複作業,直到您看到備份實例已列出,且其 [保護] 狀態設定

      顯示已設定 AKS 備份實例保護之 Azure 入口網站 的螢幕快照。

等候保存庫標準備份發生

在 AKS 中,保存庫標準層是唯一支援 異地備援跨區域還原的層。 如 AKS 備份支援哪個備份儲存層中所述 ,「每天只有一個排程的恢復點移至保存庫層」。您必須等候保存庫標準備份發生。 良好的下限是在您還原之前完成上一個步驟之後最多等候 24 小時。

使用下列步驟來確認保存庫標準備份可供使用:

  1. 主要 AKS 叢集的 [備份 ] 頁面中,選取備份實例。

  2. 等候一段時間,然後選取 [ 重新整理]。 重複作業,直到您看到至少一個 Operational and Vault-standard 還原點列在 RESTORE POINTS節中。

    顯示 [還原點] 區段的 Azure 入口網站 螢幕快照,其中已醒目提示操作和保存庫標準還原點。

設定次要 AKS 叢集

等候主要 AKS 叢集進行保存庫標準備份時,請設定次要 AKS 叢集以供稍後還原。

使用部署主要 WebSphere Liberty/Open Liberty 叢集一節 中的相同步驟,在次要區域中設定次要 AKS 叢集 ,但有下列差異:

  1. 在 [ 基本] 窗格中,使用下列步驟:

    1. 在 [ 資源群組] 字段中,選取 [新建 ] 並填入資源群組的不同唯一值,例如 liberty-aks-westus-mjg032524
    2. 在 [實例詳細數據] 底下,針對 [區域],選取 [美國西部]。
  2. 在 [ AKS ] 窗格中,使用下列步驟:

    1. 在 [Azure Container Registry ][ACR] 底下,針對 [選取 ACR 實例],選取 []。

    2. 在啟用異地復寫的主要區域中,選取現有的 ACR 實例。

      Azure Kubernetes Service 頁面上 Azure 入口網站 建立 IBM WebSphere Liberty 和 Open Liberty 頁面的螢幕快照,其中已醒目提示 ACR 實例。

使用 [確認叢集部署] 區段中的相同步驟來驗證次要區域中的部署,但有下列差異:

  1. 您不需要複製並儲存 TLS 秘密的名稱。 TLS 秘密會從主要 AKS 叢集的備份還原。
  2. 例如,當您查閱部署在次要區域中之 Azure 應用程式閘道 公用 IP 位址的公用 IP 位址名稱和 DNS 名稱時, liberty-aks-westus-mjg032524 請使用次要叢集的資源群組。

使用建立記憶體帳戶一節 中的相同步驟,在次要區域中建立記憶體帳戶 ,但有下列差異:

  1. 針對 [ 資源群組 ] 字段,選取部署次要叢集的現有資源群組,例如 liberty-aks-westus-mjg032524
  2. 針對 [ 記憶體帳戶名稱],輸入唯一的名稱,例如 storagewestusmjg032524
  3. 針對 [區域],選取 [美國西部]

使用啟用 AKS 備份延伸模組一節 中的相同步驟,在次要區域中安裝叢集的 AKS 備份擴充功能 ,但有下列差異:

  1. 在啟用次要叢集 CSI 驅動程式和快照集的步驟 1 中,將 Bash 變數 RG_NAME 的值更新為次要區域中的資源群組,例如 liberty-aks-westus-mjg032524
  2. 在步驟 2 中,從次要區域中的資源群組選取 AKS 叢集,例如 liberty-aks-westus-mjg032524
  3. 在安裝次要叢集的 AKS 備份擴充功能的步驟 4 中,選取您在次要區域相同資源群組中建立的記憶體帳戶,例如 storagewestusmjg032524

若要節省成本,請遵循停止和啟動 Azure Kubernetes Service (AKS) 叢集中的步驟 ,停止次要區域中的 AKS 叢集。 您必須在稍後還原叢集之前啟動它。

設定 Azure 流量管理員

保存庫標準備份已在等候保存庫標準備份發生一節中提及。 當您看到保存庫標準備份可供使用之後,您可以建立一個 Azure 流量管理員,將流量分散到全球 Azure 區域的公用應用程式。 主要端點會指向主要區域中 Azure 應用程式閘道的公用IP位址。 次要端點會指向次要區域中 Azure 應用程式閘道 的公用IP位址。

遵循快速入門:使用 Azure 入口網站 建立 流量管理員 配置檔中的步驟,以建立 Azure 流量管理員 配置檔。 您只需要下列各節:建立 流量管理員 配置檔新增 流量管理員 端點。 當您進行下列各節時,請使用下列步驟,然後在建立並設定 Azure 流量管理員 之後返回本文:

  1. 當您到達建立 流量管理員 配置檔一節時,請在步驟 2 中,針對 [建立 流量管理員 配置檔],使用下列步驟:

    1. 針對 [名稱],輸入唯一 流量管理員 設定檔名稱,例如 tmprofile-mjg032524
    2. 針對 [ 路由方法],選取 [ 優先順序]。
    3. 針對 [ 資源群組],輸入並儲存新的資源組名,例如 myResourceGroupTM1
  2. 當您到達 [新增 流量管理員 端點] 區段時,請使用下列步驟:

    1. 在步驟 2 中開啟 流量管理員 配置文件之後,請在 [組態] 頁面中,使用下列步驟:
      1. 針對 DNS 存留時間 (TTL),輸入 10
      2. 在 [端點監視器設定] 底下,針對 [通訊協定] 選取 [https],然後針對 [埠] 輸入 443
      3. 在 [快速端點故障轉移設定] 底下,使用下列值:
        • 針對 [ 探查內部],選取 [10]。
        • 針對 容許的失敗次數,輸入 3
        • 針對 [ 探查逾時],輸入 5
      4. 選取 [儲存]。 等到它完成。
    2. 在新增主要端點 myPrimaryEndpoint的步驟 4 中,使用下列步驟:
      1. 針對 [ 目標資源類型],選取 [ 公用IP位址]。
      2. 選取 [選擇公用IP 位址] 下拉式清單,然後輸入您先前儲存在美國東部區域中 Azure 應用程式閘道 的公用IP位址名稱。 您應該會看到一個專案相符。 針對 [公用 IP 位址] 選取它
    3. 在新增故障轉移/次要端點 myFailoverEndpoint的步驟 6 中,使用下列步驟:
      1. 針對 [ 目標資源類型],選取 [ 公用IP位址]。
      2. 選取 [選擇公用IP 位址] 下拉式清單,然後輸入您先前儲存在美國西部區域中 Azure 應用程式閘道的公用IP位址名稱。 您應該會看到一個專案相符。 針對 [公用 IP 位址] 選取它
    4. 請稍候一段時間。 選取 [重新整理],直到端點myPrimaryEndpoint的 [監視狀態] 為 [在線],且 [myFailoverEndpoint端點的監視狀態] 為 [降級]。

接下來,使用下列步驟來確認部署至主要叢集的範例應用程式可從 流量管理員 配置檔存取:

  1. 選取您所建立 流量管理員 設定檔的概觀。

  2. 檢查並複製 流量管理員 設定檔的 DNS 名稱,並將通訊協定http取代為 https。 例如: https://tmprofile-mjg032524.trafficmanager.net

  3. 在新瀏覽器索引標籤開啟 URL。您應該會看到您先前建立的咖啡列在頁面中。

  4. 建立另一個具有不同名稱和價格的咖啡 -例如,具有價格 20 的 Coffee 2 ,這會同時保存在資料庫的應用程式數據表和會話數據表中。 您看到的 UI 應該類似下列螢幕快照:

    具有第二個咖啡的範例應用程式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 資料庫 從主伺服器故障轉移至輔助伺服器:

  1. 切換至 Azure SQL 資料庫 故障轉移群組的瀏覽器索引標籤,例如 failovergroup-mjg032524
  2. 選取 [ 故障轉移],然後選取 [ ]。
  3. 等到它完成。

接下來,使用下列步驟將主要 AKS 叢集的備份還原至次要 AKS 叢集:

  1. 在 [Azure 入口網站] 的搜尋方塊中,輸入備份中心,然後從搜尋結果中選取 [備份中心]。

  2. 在 [管理] 底下,選取 [備份實例]。 篩選數據源類型 Kubernetes Services。 尋找您在上一節建立的備份實例, 例如 <aks-cluster-name>\akseastusmjg032524

  3. 選取備份實例。

  4. 選取還原

  5. 在 [ 還原] 頁面上,默認窗格為 [還原點]。 選取 [上一頁 ] 以變更為 [ 基本] 窗格。 針對 [ 還原區域],選取 [次要區域],然後選取 [ 下一步:還原點]。

    顯示 [還原基本] 窗格之 Azure 入口網站 螢幕快照。

  6. 在 [ 還原點 ] 窗格中,已選取最新的 作業和保存庫標準 還原點。 保留預設值,然後選取 [ 下一步:還原參數]。

    顯示 [還原點] 窗格之 Azure 入口網站 的螢幕快照。

  7. 在 [ 還原參數 ] 窗格中,使用下列步驟:

    1. 針對 [ 選取目標叢集],選取您在美國西部區域建立的次要 AKS 叢集。 您遇到許可權問題,如下列螢幕快照所示。 選取 [授與許可權 ] 以減輕錯誤。

    2. 針對 [ 備份預備位置],選取您在美國西部區域建立的記憶體帳戶。 您遇到許可權問題,如下列螢幕快照所示。 選取 [ 指派遺漏的角色 ] 以減輕錯誤。

      顯示 [還原參數] 窗格之 Azure 入口網站 的螢幕快照。

    3. 如果角色指派完成之後仍發生錯誤,請選取 [重新驗證 ] 以重新整理許可權。

    4. 授與遺漏的許可權時,如果要求指定 範圍,請接受預設值。

    5. 選取驗證。 您應該會看到 Validation completed successfully 此訊息。 否則,請先進行疑難解答並解決問題,再繼續。

  8. 選取 [下一步: 檢閱 + 還原]。 然後選取 [還原]。 還原叢集大約需要 10 分鐘的時間。

  9. 您可以從備份中心>監視 + 報告>備份作業的還原程式,如下列螢幕快照所示:

    顯示進行中 CrossRegionRestore 之 Azure 入口網站 的螢幕快照。

  10. 等候一段時間,然後選取 [ 重新整理]。 重複作業,直到您看到 狀態 變成 已完成為止。

然後,使用下列步驟來確認還原是否如預期般運作:

  1. 切換至連線至次要 AKS 叢集的終端機。

  2. 執行下列命令以從備份還原範例應用程式:

    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
    
  3. 執行下列命令以取得部署期間所建立 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
    
  4. 切換至您 流量管理員 配置檔的瀏覽器索引標籤,然後重新整理頁面,直到您看到端點myFailoverEndpoint的 [監視狀態] 為 [在線],而端點myPrimaryEndpoint的 [監視狀態] 為 [已降級]。

  5. 使用 流量管理員 設定檔的 DNS 名稱切換至瀏覽器索引標籤,例如 https://tmprofile-mjg032524.trafficmanager.net。 重新整理頁面,您應該會看到應用程式資料表中保存的相同數據,以及顯示的會話數據表。 您看到的 UI 應該類似下列螢幕快照:

    故障轉移後範例應用程式 UI 的螢幕快照。

    如果您沒有觀察到此行為,可能是因為 流量管理員 需要時間來更新 DNS 以指向故障轉移網站。 問題也可能是您瀏覽器快取指向失敗網站的 DNS 名稱解析結果。 請稍候一段時間,然後重新整理頁面。

    注意

    應用程式會將 會話逾時 設定為1小時。 視故障轉移所花費的時間而定,如果範例應用程式 UI 的 [新增咖啡] 區段中顯示會話數據的時間超過一小時,可能不會顯示

重新保護故障轉移網站

既然次要區域是故障轉移網站且作用中,您應該使用 Azure 備份 重新保護它。

首先,使用<備份 AKS 叢集>一節 中的相同步驟來備份次要 AKS 叢集 ,但有下列差異:

  1. 針對 [建立備份保存庫],請使用下列步驟:
    1. 針對 [ 資源群組],選取部署在次要區域中的現有資源群組,例如 liberty-aks-westus-mjg032524
    2. 針對 備份儲存庫名稱,輸入唯一值,例如 aks-backup-vault-westus-mjg032524
    3. 針對 [區域],選取 [美國西部]
  2. 針對 [建立備份原則],請使用下列步驟:
    1. 選取您在次要區域中建立的備份儲存庫, 例如 aks-backup-vault-westus-mjg032524
  3. 針對 [ 設定備份],請使用下列步驟:
    1. 選取您在次要區域中建立的備份儲存庫, 例如 aks-backup-vault-westus-mjg032524
    2. 針對 備份實體 名稱,填入唯一名稱,例如 akswestusmjg032524

然後,請使用 [等候保存庫標準備份] 區段中的相同步驟,等到次要 AKS 叢集的保存庫標準備份可供使用,但從次要 AKS 叢集的 [備份] 頁面選取備份實例。

容錯回復至主要月臺

使用故障轉移至次要月臺一節中的 相同步驟來容錯回復到主要月 臺,包括資料庫伺服器和 AKS 叢集,但有下列差異:

  1. 當您準備容錯回復時,請使用下列步驟:

    1. 停止次要 AKS 叢集,以模擬次要區域的中斷。
    2. 啟動主要 AKS 叢集。
    3. 連線到主要 AKS 叢集,並清除 WebSphere Liberty/Open Liberty 應用程式。
  2. 當您將次要 AKS 叢集的備份還原至主要 AKS 叢集時,請使用下列步驟:

    1. 選取次要區域中的備份實例,例如 <aks-cluster-name>\akswestusmjg032524
    2. 在 [ 還原參數 ] 窗格中,使用下列步驟:
      1. 針對 [ 選取目標叢集],選取您在美國東部區域建立的主要 AKS 叢集。
      2. 針對 [ 備份預備位置],選取您在美國東部區域建立的記憶體帳戶。
  3. 當您確認還原如預期般運作時,請使用下列步驟:

    1. 切換至您連線到主要 AKS 叢集的終端機,並確認已成功還原應用程式。
    2. 切換至您 流量管理員 配置檔的瀏覽器索引標籤,然後重新整理頁面,直到您看到端點的 [監視狀態] 為 [在線],且端點myFailoverEndpoint的 [監視狀態] 為 [已降級myPrimaryEndpoint]。

清除資源

如果您不打算繼續使用 WebSphere Liberty/Open Liberty 叢集和其他元件,請使用下列步驟來刪除資源群組,以清除本教學課程中使用的資源:

  1. 在 Azure 入口網站 的搜尋方塊中,輸入 Azure SQL 資料庫 伺服器的資源組名,例如, myResourceGroup 從搜尋結果中選取相符的資源群組。
  2. 選取 [刪除資源群組]
  3. 在 [ 輸入資源組名以確認刪除] 中,輸入資源組名。
  4. 選取 [刪除]
  5. 針對 流量管理員 的資源群組重複步驟 1-4 ,例如 myResourceGroupTM1
  6. 在 Azure 入口網站 的搜尋方塊中,輸入備份保存庫,然後從搜尋結果中選取 [備份保存庫]。 您應該看到列出兩個備份儲存庫 ,例如 aks-backup-vault-eastus-mjg032524aks-backup-vault-westus-mjg032524。 針對每個專案,請使用下列步驟:
    1. 選取以開啟備份保存庫。
    2. 選取 [管理>屬性>虛刪除>更新]。[啟用虛刪除] 旁,取消選取複選框,然後選取 [ 更新]。
    3. 選取 [管理>備份實例]。 篩選數據源類型 Kubernetes Services。 選取您建立的實例,然後加以刪除。
  7. 等到刪除兩個備份實例為止。
  8. 針對主要叢集的資源群組重複步驟 1-4 ,例如 。 liberty-aks-eastus-mjg032524
  9. 針對次要叢集的資源群組重複步驟 1-4 ,例如 liberty-aks-westus-mjg032524

下一步

在本教學課程中,您會設定 WebSphere Liberty/Open Liberty HA/DR 解決方案,其中包含具有主動-被動資料庫層的主動-被動應用程式基礎結構層,以及這兩個層級跨越兩個地理位置不同的月臺。 在第一個站台中,應用程式基礎結構層和資料庫層都處於作用中狀態。 在第二個站臺上,次要網域會以 Azure 備份 還原,而輔助資料庫則處於待命狀態。

繼續探索下列參考,以取得更多選項來建置 HA/DR 解決方案,並在 Azure 上執行 WebSphere: