教程:将 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 流量管理器。
- 测试从主要副本到辅助数据库的故障转移。
下图演示了生成的体系结构:
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 的本地计算机。
- 安装和设置 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 数据库后返回到本文。
到达“创建单一数据库”部分时,请使用以下步骤:
- 在创建新资源组的步骤 4 中,请保存 资源组名称 值,例如
myResourceGroup
。 - 在步骤 5 中, 保存数据库名称 值 - 例如
mySampleDatabase
。 - 在创建服务器的步骤 6 中,使用以下步骤:
- 填写唯一的服务器名称 , 例如
sqlserverprimary-mjg032524
。 - 对于“位置”,请选择“(美国)美国东部”。
- 对于 身份验证方法,请选择“ 使用 SQL 身份验证”。
- 保存服务器管理员登录值 - 例如
azureuser
。 - 将密码值保存到一边。
- 填写唯一的服务器名称 , 例如
- 在步骤 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 群集的故障转移测试。
在 AKS 上设置主 WebSphere Liberty/Open Liberty 群集
在本部分中,你将使用 IBM WebSphere Liberty 和 Open Liberty on Azure Kubernetes 服务 产品/服务在 AKS 上创建主要 WebSphere Liberty/Open Liberty 群集。 在故障转移期间,使用Azure 备份以后从主群集还原辅助群集。
部署主 WebSphere Liberty/Open Liberty 群集
使用以下步骤部署主群集:
在浏览器中Azure Kubernetes 服务产品/服务上打开 IBM WebSphere Liberty 和 Open Liberty,然后选择“创建”。 应会看到 套餐的“基本信息 ”窗格。
使用以下步骤填写 “基本信息 ”窗格:
- 确保为 订阅 显示的值与先决条件部分中列出的角色的值相同。
- 必须在空资源组中部署产品/服务。 在“资源组”字段中,选择“新建”并填写资源组的唯一值,例如
liberty-aks-eastus-mjg032524
。 - 在“实例详细信息”下,选择“美国东部”。
- 选择“下一步”转到“AKS”窗格。
等待一段时间。 应该会在 AKS 窗格中看到预填充了默认值的所有字段。 选择“下一步”转到“负载均衡”窗格。
使用以下步骤填写 负载均衡 窗格:
- 对于“连接到Azure 应用程序网关”,请选择“是”。
- 保留其他字段的默认值。
- 选择“下一步”转到“操作员和应用程序”窗格。
使用以下步骤填写 操作员和应用程序 窗格:
保留所有字段的默认值。
注意
本教程使用默认值部署 Open Liberty 运算符。 (可选)可以通过为 IBM 支持选择“是”来部署 WebSphere Liberty Operator?
选择“查看 + 创建”。
等到 运行最终验证... 成功完成,然后选择“ 创建”。
过了一会儿,应会看到 “部署 ”页,其中 显示了部署正在进行 中。
注意
如果在运行最终验证期间 看到任何问题...,请修复这些问题,然后重试。
根据所选区域中的网络条件和其他活动,部署最多可能需要 30 分钟才能完成。 之后,应会看到 部署完成后 会显示在部署页上的文本。
验证群集的部署
部署了 AKS 群集、Azure 容器注册表(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
。 - 查找前缀为
gwip
“公共 IP 地址”资源,然后复制并保存其名称。 - 选择公共 IP 地址资源,然后复制并保存 DNS 名称,例如
olgw3984d1.eastus.cloudapp.azure.com
。
为 ACR 实例启用异地复制
ACR 实例旨在存储主要群集和辅助群集的应用程序映像。 使用以下步骤为 ACR 实例启用异地复制:
在Azure 门户的搜索框中,输入资源组并从搜索结果中选择资源组。
为主要区域选择资源组的名称,例如
liberty-aks-eastus-mjg032524
。找到前缀为
acr
前缀的容器注册表资源,然后选择它将其打开。选择“属性”。 对于定价计划,请选择“高级”,然后选择“保存”。 请等待直至完成为止。
选择 异地复制,然后选择“ 添加”。 对于 “位置”,请选择 “美国西部”,然后选择“ 创建”。 请等待直至完成为止。
等待一段时间,选择“ 刷新”。 重复此操作,直到看到两个位置列出,状态为“就绪”。
使用以下步骤获取 ACR 登录凭据。 稍后使用它们进行应用部署。
- 选择“访问密钥”。
- 复制并保存登录服务器、用户名和密码的值。
部署示例应用
使用以下步骤在 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
应用程序配置连接到之前部署Azure SQL 数据库的数据源 jdbc/JavaEECafeDB。 该数据源用于 存储 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 LOGIN_SERVER=<ACR-login-server> export USER_NAME=<ACR-username> export PASSWORD='<ACR-password>' export INGRESS_TLS_SECRET=<TLS-secret-name>
使用以下命令打包应用、生成 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
运行以下命令以获取部署的示例应用:
# 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
。 选择“下一步”,然后选择“创建”。 完成此步骤大约需要 5 分钟。
备份 AKS 群集
使用以下步骤备份 AKS 群集:
在Azure 门户的搜索框中,搜索备份保管库。 你会看到它在“服务”下列出。 选择该文件夹。
使用Azure 备份为主群集启用 AKS 备份,按照备份Azure Kubernetes 服务中的步骤操作。 执行后续步骤,但不包括 AKS 备份 节期间的“使用挂钩”,并按照本部分中的其余步骤进行调整。
到达 “创建备份保管库 ”部分时,请使用以下步骤:
到达 “创建备份策略 ”部分时,请使用以下步骤:
在 “配置备份 ”部分中,使用以下步骤:
跳过用于 AKS 扩展安装的步骤 1-5。 从主要区域中的 AKS 群集的步骤 6 开始。
对于步骤 7,对于 保管库,请选择在同一资源组中创建的备份保管库,例如
aks-backup-vault-eastus-mjg032524
。 遇到权限错误时,请选择“ 授予权限 ”以继续操作。 权限部署完成后,如果错误仍然存在,请选择“ 重新验证 ”以刷新角色分配。对于步骤 10,找到 “选择要备份的资源”。 对于 备份实例名称,请填写唯一名称,例如
akseastusmjg032524
。 对于 “其他选项”,请选择所有选项。 确保 已选择“包括机密 ”。对于步骤 11,遇到角色分配错误。 按照步骤 12-14 缓解错误。
在步骤 15 中选择“ 配置备份 ”后,返回到 “备份 ”页。 等待一段时间,然后选择“ 刷新”。 重复此操作,直到看到备份实例已列出,其 保护状态 已 配置保护。
等待保管库标准备份发生
在 AKS 中,保管库标准层是唯一支持 异地冗余 和 跨区域还原的层。 如 AKS 备份支持哪个备份存储层中所述 ,“每天只有一个计划恢复点移动到保管库层。必须等待保管库标准备份发生。 良好的下限是在完成上一步后最多等待 24 小时,然后再还原。
使用以下步骤验证保管库标准备份是否可用:
设置辅助 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 备份扩展,但存在以下差异:
- 在步骤 1 中,若要为辅助群集启用 CSI 驱动程序和快照,请将 Bash 变量
RG_NAME
的值更新到次要区域中的资源组,例如liberty-aks-westus-mjg032524
。 - 在步骤 2 中,从次要区域中的资源组中选择 AKS 群集,例如
liberty-aks-westus-mjg032524
。 - 在安装辅助群集的 AKS 备份扩展的步骤 4 中,选择在次要区域的同一资源组中创建的存储帐户,例如
storagewestusmjg032524
。
若要节省成本,请按照“停止”中的步骤启动 Azure Kubernetes 服务 (AKS) 群集来停止次要区域中的 AKS 群集。 在稍后还原群集之前,需要先启动它。
设置Azure 流量管理器
“等待保管库标准备份发生”部分中提到保管库标准备份。 看到保管库标准备份可用后,可以创建一个Azure 流量管理器,用于将流量分发到全球 Azure 区域面向公众的应用程序。 主终结点指向主要区域中Azure 应用程序网关的公共 IP 地址。 辅助终结点指向次要区域中Azure 应用程序网关的公共 IP 地址。
按照快速入门中的步骤创建Azure 流量管理器配置文件:使用Azure 门户创建流量管理员配置文件。 只需以下部分:创建流量管理员配置文件并添加流量管理员终结点。 执行以下部分时,请使用以下步骤,然后在创建并配置Azure 流量管理器后返回到本文:
访问“创建流量管理员配置文件”部分时,在步骤 2 中,对于“创建流量管理员配置文件”,请使用以下步骤:
- 对于 Name,请输入唯一流量管理员配置文件名称,例如
tmprofile-mjg032524
。 - 对于“路由方法”,请选择“优先级”。
- 对于 资源组,请输入并保存新的资源组名称,例如
myResourceGroupTM1
。
- 对于 Name,请输入唯一流量管理员配置文件名称,例如
到达“添加流量管理员终结点”部分时,请使用以下步骤:
- 在步骤 2 中打开流量管理员配置文件后,在“配置”页中,使用以下步骤:
- 对于 DNS 生存时间(TTL),请输入 10。
- 在“终结点监视器设置”下,对于“协议”,选择“https”,对于“端口”,请输入 443。
- 在“快速终结点故障转移设置”下,使用以下值:
- 对于 内部探测,请选择 10。
- 对于 允许的失败次数,请输入 3。
- 对于 探测超时,请输入 5。
- 选择“保存”。 等待它完成。
- 在添加主终结点
myPrimaryEndpoint
的步骤 4 中,使用以下步骤:- 对于 目标资源类型,请选择 “公共 IP 地址”。
- 选择“选择公共 IP 地址”下拉列表,并输入之前保存在美国东部区域中Azure 应用程序网关的公共 IP 地址的名称。 应会看到匹配的一个条目。 为 公共 IP 地址选择它。
- 在添加故障转移/辅助终结点
myFailoverEndpoint
的步骤 6 中,使用以下步骤:- 对于 目标资源类型,请选择 “公共 IP 地址”。
- 选择“选择公共 IP 地址”下拉列表,并输入之前保存在美国西部区域中Azure 应用程序网关的公共 IP 地址的名称。 应会看到匹配的一个条目。 为 公共 IP 地址选择它。
- 等待一段时间。 选择“刷新”,直到终结点
myPrimaryEndpoint
的“监视”状态为“联机”,终结点myFailoverEndpoint
的“监视状态已降级”。
- 在步骤 2 中打开流量管理员配置文件后,在“配置”页中,使用以下步骤:
接下来,使用以下步骤验证部署到主群集的示例应用是否可从 流量管理员 配置文件访问:
选择创建的流量管理员配置文件的概述。
检查并复制流量管理员配置文件的 DNS 名称,并将协议
http
替换为https
。 例如https://tmprofile-mjg032524.trafficmanager.net
。在新浏览器选项卡中打开 URL。应会看到之前创建的咖啡列在页面中。
创建另一个具有不同名称和价格的咖啡(例如,价格为 20 的 Coffee 2),该咖啡保存在应用程序数据表和数据库的会话表中。 看到的 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 数据库从主服务器故障转移到辅助服务器:
- 切换到Azure SQL 数据库故障转移组的浏览器选项卡,例如
failovergroup-mjg032524
。 - 选择“故障转移”,然后选择“是”。
- 等待它完成。
接下来,使用以下步骤将主 AKS 群集的备份还原到辅助 AKS 群集:
在Azure 门户的搜索框中,输入备份中心,然后从搜索结果中选择备份中心。
在“管理”下,选择“备份实例”。 筛选数据源类型 Kubernetes 服务。 查找在上一节中创建的备份实例,例如
<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
的“监视状态为联机”,终结点myPrimaryEndpoint
的“监视状态已降级”。切换到浏览器选项卡,其中包含流量管理员配置文件的 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
的“监视状态为联机”,终结点myFailoverEndpoint
的“监视状态已降级”。
清理资源
如果不打算继续使用 WebSphere Liberty/Open Liberty 群集和其他组件,请使用以下步骤删除资源组以清理本教程中使用的资源:
- 在Azure 门户的搜索框中,输入Azure SQL 数据库服务器的资源组名称(例如,
myResourceGroup
)并从搜索结果中选择匹配的资源组。 - 选择“删除资源组”。
- 在 输入资源组名称以确认删除时,输入资源组名称。
- 选择“删除”。
- 对流量管理员的资源组重复步骤 1-4 ,例如
myResourceGroupTM1
。 - 在Azure 门户的搜索框中,输入备份保管库,然后从搜索结果中选择备份保管库。 应会看到列出的两个备份保管库,例如,
aks-backup-vault-eastus-mjg032524
和aks-backup-vault-westus-mjg032524
。 对于每个示例,请使用以下步骤:- 选择打开备份保管库。
- 选择“管理>属性>软删除>更新”。 在“启用软删除”旁边,取消选中复选框,然后选择“更新”。
- 选择“管理>备份实例”。 筛选数据源类型 Kubernetes 服务。 选择创建的实例,然后将其删除。
- 等待两个备份实例被删除。
- 对主群集的资源组重复步骤 1-4 ,例如
liberty-aks-eastus-mjg032524
。 - 对辅助群集的资源组重复步骤 1-4 ,例如
liberty-aks-westus-mjg032524
。
后续步骤
在本教程中,你将设置一个 WebSphere Liberty/Open Liberty HA/DR 解决方案,该解决方案由具有主动-被动数据库层的主动-被动应用程序基础结构层组成,其中两个层跨越两个地理上不同的站点。 在第一个站点中,应用程序基础结构层和数据库层都处于活动状态。 第二个站点使用Azure 备份还原辅助域,辅助数据库处于备用状态。
继续浏览以下参考,获取更多用于生成 HA/DR 解决方案并在 Azure 上运行 WebSphere 的选项:
反馈
https://aka.ms/ContentUserFeedback。
即将发布:在整个 2024 年,我们将逐步淘汰作为内容反馈机制的“GitHub 问题”,并将其取代为新的反馈系统。 有关详细信息,请参阅:提交和查看相关反馈