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

本教程介绍如何在 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 流量管理器检查所在区域的运行状况,并相应地将流量路由到应用程序层。 主要区域和次要区域都已完全部署 Liberty 群集。 但是,只有主要区域正在积极为来自用户的网络请求提供服务。 次要区域处于被动状态,只有当主要区域出现服务中断时,它才会被激活以接收流量。 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 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 and Open Liberty on Azure Kubernetes Service 产品/服务在 AKS 上创建主要 WebSphere Liberty/Open Liberty 群集。 稍后使用 Azure 备份在故障转移期间从主群集还原辅助群集。

部署主 WebSphere Liberty/Open Liberty 群集

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

  1. 在浏览器中打开 IBM WebSphere Liberty and Open Liberty on Azure Kubernetes Service 产品/服务,然后选择创建。 应会看到产品/服务的基本信息窗格。

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

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

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

  3. 请稍等片刻。 应该在 AKS 窗格中看到所有字段都预先填充了默认值。 选择下一步以转到负载均衡窗格。

    Azure 门户的屏幕截图,其中显示了 IBM WebSphere Liberty and Open Liberty on Azure Kubernetes Service“AKS”窗格。

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

    1. 对于连接到 Azure 应用程序网关?,选择
    2. 其他字段保留默认值。
    3. 选择下一步以转到 Operator 和应用程序窗格。

    Azure 门户的屏幕截图,其中显示了 IBM WebSphere Liberty and Open Liberty on Azure Kubernetes Service“负载均衡”窗格。

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

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

      注意

      本教程使用默认值部署 Open Liberty Operator。 或者,你可以通过为支持 IBM?选择,来部署 WebSphere Liberty Operator。

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

    3. 等待正在运行最终验证... 成功完成,然后选择创建

    Azure 门户的屏幕截图,其中显示了 IBM WebSphere Liberty and Open Liberty on Azure Kubernetes Service“Operator 和应用程序”窗格。

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

注意

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

根据所选地区的网络状况和其他活动,部署可能需要大约 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. 等待一段时间,选择刷新。 重复该操作,直到你看到列出了两个位置,并且状态就绪

    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
    

    应在输出中看到一个就绪应用程序:

    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咖啡 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 服务中步骤操作,为主群集启用 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. 跳过用于 AKS 扩展安装的步骤 1-5。 对于主要区域的 AKS 群集,从步骤 6 开始。

    2. 对于步骤 7,对于保管库,选择在同一资源组中创建的备份保管库,例如 aks-backup-vault-eastus-mjg032524。 遇到权限错误时,请选择授予权限以继续操作。 权限部署完成后,如果错误仍然存在,请选择重新验证以刷新角色分配。

      Azure 门户的屏幕截图,显示了“配置备份基本信息”窗格,其中显示了权限错误,并突出显示了“授予权限”链接。

    3. 对于步骤 10,找到选择要备份的资源。 对于备份实例名称,请填写唯一名称,例如 akseastusmjg032524。 对于其他选项,请选择所有选项。 确保选择了包括机密

      Azure 门户的屏幕截图,显示了“选择要备份的资源”窗格,其中突出显示了“包含机密”选项。

    4. 对于步骤 11,你会遇到角色分配错误。 按照步骤 12-14 操作,以缓解错误。

      Azure 门户的屏幕截图,显示“配置备份”窗格,并打开“授予缺少的权限”对话框。

    5. 在步骤 15 中选择配置备份后,返回到备份页。 等待一段时间,然后选择刷新。 重复此操作,直到看到备份实例已列出,并且其保护状态已配置保护

      Azure 门户的屏幕截图,显示已配置 AKS 备份实例保护。

等待保管库标准备份发生

在 AKS 中,保管库标准层是唯一支持异地冗余跨区域还原的层。 如 AKS 备份支持哪个备份存储层?中所述,每天只有一个计划恢复点移动到保管库层。必须等待保管库标准备份发生。 良好的下限是在完成上一步后最多等待 24 小时,然后再还原。

使用以下步骤验证保管库标准备份是否可用:

  1. 在主 AKS 群集的备份页中,选择备份实例。

  2. 等待一段时间,然后选择刷新。 重复该操作,直到在还原点部分中至少列出了一个操作和保管库标准还原点。

    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 门户“在 Azure Kubernetes 服务上创建 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. 在为辅助群集启用 CSI 驱动程序和快照的步骤 1 中,请将 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. 对于名称,请输入唯一的流量管理器配置文件名称 - 例如,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咖啡 2)- 它被持久化到数据库的应用程序数据表和会话表中。 看到的 UI 应该类似于以下屏幕截图:

    示例应用程序 UI 的屏幕截图,其中包含第二个咖啡。

如果 UI 看起来不相似,请排除故障并解决问题,然后继续。 保持控制台打开,稍后使用它进行故障转移测试。

已完成流量管理器配置文件设置。 保持页面打开,你可以在以后的故障转移事件中使用它来监视终结点状态更改。

测试从主服务器故障转移到辅助服务器

在本部分中,若要测试故障转移,需要手动对 Azure SQL Database 服务器进行故障转移,并还原 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
    

然后,切换到流量管理器配置文件的浏览器选项卡,并验证终结点 myPrimaryEndpointmyFailoverEndpoint监视状态是否为已降级

现在,使用以下步骤将 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. 可以从备份中心>监视 + 报告>备份作业监视还原过程,如以下屏幕截图所示:

    Azure 门户的屏幕截图,显示了 CrossRegionRestore 正在进行。

  10. 等待一段时间,然后选择刷新。 重复该操作,直到看到状态变为已完成

然后,使用以下步骤验证还原是否按预期工作:

  1. 切换到连接到辅助 AKS 群集的终端。

  2. 运行以下命令,从备份中还原示例应用:

    kubectl get OpenLibertyApplication
    

    应在输出中看到一个就绪应用程序:

    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 群集的保管库标准备份可用,但从辅助 KS 群集的 备份 页面中选择备份实例除外。

故障回复到主站点

使用故障转移到辅助站点部分中的相同步骤,故障回复到主站点,包括数据库服务器和 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 Database 服务器的资源组名称(例如 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 的选项: