教程:将 WebSphere Liberty/Open Liberty 迁移到具有高可用性和灾难恢复的Azure Kubernetes 服务

本教程介绍如何在 Azure Kubernetes 服务(AKS)上使用 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 门户步骤创建主Azure SQL 数据库:创建单一数据库 - 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 和 Open Liberty on Azure Kubernetes 服务 产品/服务在 AKS 上创建主要 WebSphere Liberty/Open Liberty 群集。 在故障转移期间,使用Azure 备份以后从主群集还原辅助群集。

部署主 WebSphere Liberty/Open Liberty 群集

使用以下步骤部署主群集:

  1. 浏览器中Azure Kubernetes 服务产品/服务上打开 IBM WebSphere Liberty 和 Open Liberty,然后选择“创建”。 应会看到 套餐的“基本信息 ”窗格。

  2. 使用以下步骤填写 “基本信息 ”窗格:

    1. 确保为 订阅 显示的值与先决条件部分中列出的角色的值相同。
    2. 必须在空资源组中部署产品/服务。 在“资源组”字段中,选择“新建并填写资源组的唯一值,例如liberty-aks-eastus-mjg032524
    3. 在“实例详细信息”下,选择美国东部”。
    4. 选择“下一步转到“AKS”窗格。

    Azure 门户的屏幕截图,其中显示了“Azure Kubernetes 服务基本信息”窗格上的 IBM WebSphere Liberty 和 Open Liberty。

  3. 等待一段时间。 应该会在 AKS 窗格中看到预填充了默认值的所有字段。 选择“下一步转到“负载均衡”窗格。

    Azure Kubernetes 服务 AKS 窗格上显示 IBM WebSphere Liberty 和 Open Liberty 的Azure 门户的屏幕截图。

  4. 使用以下步骤填写 负载均衡 窗格:

    1. 对于“连接到Azure 应用程序网关”,请选择“”。
    2. 保留其他字段的默认值。
    3. 选择“下一步转到“操作员和应用程序”窗格。

    显示“Azure Kubernetes 服务负载均衡”窗格上的 IBM WebSphere Liberty 和 Open Liberty 的Azure 门户的屏幕截图。

  5. 使用以下步骤填写 操作员和应用程序 窗格:

    1. 保留所有字段的默认值。

      注意

      本教程使用默认值部署 Open Liberty 运算符。 (可选)可以通过为 IBM 支持选择“是部署 WebSphere Liberty Operator?

    2. 选择“查看 + 创建”。

    3. 等到 运行最终验证... 成功完成,然后选择“ 创建”。

    显示 IBM WebSphere Liberty 和 Open Liberty Azure Kubernetes 服务 操作员和应用程序窗格的Azure 门户的屏幕截图。

过了一会儿,应会看到 “部署 ”页,其中 显示了部署正在进行 中。

注意

如果在运行最终验证期间 看到任何问题...,请修复这些问题,然后重试。

根据所选区域中的网络条件和其他活动,部署最多可能需要 30 分钟才能完成。 之后,应会看到 部署完成后 会显示在部署页上的文本。

验证群集的部署

部署了 AKS 群集、Azure 容器注册表(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. 找到前缀为acr前缀的容器注册表资源,然后选择它将其打开。

  4. 选择“属性”。 对于定价计划,请选择“高级,然后选择“保存”。 请等待直至完成为止。

  5. 选择 异地复制,然后选择“ 添加”。 对于 “位置”,请选择 “美国西部”,然后选择“ 创建”。 请等待直至完成为止。

  6. 等待一段时间,选择“ 刷新”。 重复此操作,直到看到两个位置列出,状态“就绪”。

    显示在配对区域中启用异地复制的 ACR 实例的Azure 门户的屏幕截图。

使用以下步骤获取 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
    

    应用程序配置连接到之前部署Azure SQL 数据库的数据源 jdbc/JavaEECafeDB。 该数据源用于 存储 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 。 选择“下一步,然后选择“创建”。 完成此步骤大约需要 5 分钟。

备份 AKS 群集

使用以下步骤备份 AKS 群集:

  1. 在Azure 门户的搜索框中,搜索备份保管库。 你会看到它在“服务”下列出。 选择该文件夹。

  2. 使用Azure 备份为主群集启用 AKS 备份,按照备份Azure Kubernetes 服务中的步骤操作。 执行后续步骤,但不包括 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. 跳过用于 AKS 扩展安装的步骤 1-5。 从主要区域中的 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. 等待一段时间,然后选择“ 刷新”。 重复该操作,直到看到至少一个 操作和保管库标准 还原点列在 RESTORE POINTS 部分。

    显示“还原点”部分的Azure 门户屏幕截图,其中突出显示了“操作”和“保管库标准还原点”。

设置辅助 AKS 群集

在等待主 AKS 群集进行保管库标准备份时,请设置辅助 AKS 群集以供以后还原。

使用“部署主要 WebSphere Liberty/Open Liberty 群集”部分中的相同步骤在次要区域中设置辅助 AKS 群集,但存在以下差异:

  1. “基本信息 ”窗格中,使用以下步骤:

    1. “资源组”字段中,选择“新建并填写资源组的不同唯一值,例如liberty-aks-westus-mjg032524
    2. 在“实例详细信息”下,选择美国西部”。
  2. AKS 窗格中,使用以下步骤:

    1. 在Azure 容器注册表(ACR),对于“选择 ACR 实例”,请选择“”。

    2. 选择使用异地复制启用的主要区域中的现有 ACR 实例。

      Azure Kubernetes 服务页上Azure 门户创建 IBM WebSphere Liberty 和 Open Liberty 的屏幕截图,其中突出显示了 ACR 实例。

使用“验证群集部署”部分中的相同步骤来验证次要区域中的部署,但存在以下差异:

  1. 无需复制并保存 TLS 机密的名称。 TLS 机密是从主 AKS 群集的备份还原的。
  2. 查找在次要区域中部署Azure 应用程序网关的公共 IP 地址的名称和 DNS 名称时, liberty-aks-westus-mjg032524 请使用辅助群集的资源组(例如)。

使用“创建存储帐户”部分中的相同步骤在次要区域中创建存储帐户,但存在以下差异:

  1. 对于 “资源组 ”字段,选择部署辅助群集的现有资源组,例如 liberty-aks-westus-mjg032524
  2. 对于 存储帐户名称,请输入唯一名称,例如 storagewestusmjg032524
  3. 对于“区域”,请选择“美国西部”。

使用“启用 AKS 备份扩展”部分中的相同步骤为次要区域中的群集安装 AKS 备份扩展,但存在以下差异:

  1. 在步骤 1 中,若要为辅助群集启用 CSI 驱动程序和快照,请将 Bash 变量 RG_NAME 的值更新到次要区域中的资源组,例如 liberty-aks-westus-mjg032524
  2. 在步骤 2 中,从次要区域中的资源组中选择 AKS 群集,例如 liberty-aks-westus-mjg032524
  3. 在安装辅助群集的 AKS 备份扩展的步骤 4 中,选择在次要区域的同一资源组中创建的存储帐户,例如 storagewestusmjg032524

若要节省成本,请按照“停止”中的步骤启动 Azure Kubernetes 服务 (AKS) 群集来停止次要区域中的 AKS 群集。 在稍后还原群集之前,需要先启动它。

设置Azure 流量管理器

“等待保管库标准备份发生”部分中提到保管库标准备份。 看到保管库标准备份可用后,可以创建一个Azure 流量管理器,用于将流量分发到全球 Azure 区域面向公众的应用程序。 主终结点指向主要区域中Azure 应用程序网关的公共 IP 地址。 辅助终结点指向次要区域中Azure 应用程序网关的公共 IP 地址。

按照快速入门中的步骤创建Azure 流量管理器配置文件:使用Azure 门户创建流量管理员配置文件。 只需以下部分:创建流量管理员配置文件添加流量管理员终结点。 执行以下部分时,请使用以下步骤,然后在创建并配置Azure 流量管理器后返回到本文:

  1. 访问“创建流量管理员配置文件”部分时,在步骤 2 中,对于“创建流量管理员配置文件”,请使用以下步骤:

    1. 对于 Name,请输入唯一流量管理员配置文件名称,例如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 服务 (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 服务。 查找在上一节中创建的备份实例,例如 <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. 切换到流量管理员配置文件的浏览器选项卡,然后刷新页面,直到看到终结点myPrimaryEndpoint的“监视状态联机”,终结点myFailoverEndpoint的“监视状态降级”。

清理资源

如果不打算继续使用 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 服务。 选择创建的实例,然后将其删除。
  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 的选项: