将 Oracle 数据库迁移到云上,不一定意味着放弃现有的 VMware 运维体系。Amazon Elastic VMware Service(Amazon EVS)允许企业继续使用熟悉的 VMware 工具,同时结合 Amazon FSx for NetApp ONTAP 提供的共享存储、快照和复制能力。不过,真正的高可用并不是简单地把虚拟机搬到裸金属实例上,而是要同时设计计算余量、存储故障域、NSX 网络以及跨区域恢复流程。
先把故障域拆开,而不是只画一组集群
一套面向生产环境的 Oracle on Amazon EVS 架构,至少要考虑四层可用性:
- 计算层:Amazon EC2 裸金属实例承载 VMware 集群,需要预留主机故障后的重启容量。
- 虚拟化层:vSphere HA 负责虚拟机检测与重启,但它不等同于 Oracle 数据库级的连续可用。
- 存储层:vSAN 与 FSx for ONTAP 承担不同类型的数据,避免所有工作负载挤在同一个性能和故障域中。
- 容灾层:SnapMirror 将关键卷复制到另一个区域,并配合数据库恢复与网络切换运行手册。
可以将逻辑路径理解为:
Oracle Client
|
NSX Application Segment
|
Oracle VM on Amazon EVS
|-- vSAN: VM 系统盘、工具盘或适合本地存储的工作负载
|
`-- FSx for ONTAP: 数据库卷、共享文件、快照与复制源
|
`-- SnapMirror --> 跨区域 FSx for ONTAP
这只是基线模型。具体把数据文件、联机重做日志、归档日志和备份放在哪一层,必须根据延迟、吞吐量、恢复目标和 Oracle 支持矩阵决定,不能仅凭“共享存储更方便”来选择。
裸金属实例选择:先算故障后的容量
Amazon EVS 使用 EC2 裸金属实例承载 VMware 环境。选型时不应只比较正常状态下的 CPU 和内存利用率,还要回答一个更实际的问题:任意一台主机不可用后,剩余主机能否继续承载全部关键虚拟机?
一个常见的容量基线是 N+1:
可用容量 = 单主机容量 ×(主机数量 - 1)× 安全利用率
例如,安全利用率可以由团队根据峰值负载、HA 重启开销和维护窗口确定,而不是长期把集群运行在接近 100% 的状态。评估时至少记录:
- Oracle VM 的 vCPU、内存和峰值 IOPS;
- CPU 超分比例以及 NUMA 边界;
- 主机故障时的重启顺序与资源预留;
- Oracle 许可范围是否会因集群边界或调度策略扩大;
- 备份、快照和批处理窗口造成的瞬时压力。
对于大内存数据库,虚拟机跨越多个 NUMA 节点可能带来额外延迟。迁移前应使用与生产相近的数据量和并发度做压测,不要只依赖通用型虚拟机基准。
vSAN 与 FSx for ONTAP:按恢复方式分层
存储分层的关键不是给产品贴上“快”或“可靠”的标签,而是明确每类数据由谁保护、如何恢复。
| 数据类型 | 可考虑的存储层 | 设计重点 |
|---|---|---|
| VM 系统盘和 VMware 基础组件 | vSAN | 主机故障后的 VM 重启、容量余量与重建流量 |
| Oracle 数据文件 | FSx for ONTAP 或经验证的 vSAN 层 | 稳定延迟、吞吐量、快照一致性与恢复流程 |
| 重做日志 | 经过基准测试的低延迟存储 | 写延迟和抖动,不能只看平均 IOPS |
| 归档日志与备份 | FSx for ONTAP | 保留策略、容量增长、快照和跨区域复制 |
| 克隆、测试与报表数据 | FSx for ONTAP | 利用快照或克隆减少完整副本占用 |
FSx for ONTAP 可以通过文件协议向环境提供存储,并利用 ONTAP 的快照与 SnapMirror 能力构建数据保护链路。实际接入方式可能是 VMware 数据存储,也可能是 Oracle 虚拟机直接挂载文件系统;两种模式的故障处理、权限管理和支持边界不同,应在设计阶段明确。
还要区分三种经常被混用的概念:
- VMware HA 可以在主机故障后重启虚拟机;
- 存储快照可以保留某个时间点的数据块状态;
- Oracle 一致性恢复决定数据库能否按预期打开,以及需要回放多少日志。
存储快照默认不应被视为应用一致备份。若需要应用一致性,应将 Oracle quiesce、归档日志切换、快照创建和解除 quiesce 编排为受控流程,并验证恢复结果。
NSX 网络:为存储和复制留出独立路径
NSX 网络设计需要避免将数据库客户端流量、存储流量和管理流量放在同一个拥塞域中。可以规划以下逻辑网络:
- vCenter、ESXi 和运维管理网络;
- vMotion 网络;
- vSAN 网络;
- Oracle 客户端访问网络;
- Oracle VM 到 FSx for ONTAP 的存储网络;
- SnapMirror 跨区域复制路径;
- 备份与监控网络。
网络检查不应止于“端口能通”。还要验证路由是否对称、MTU 是否端到端一致、DNS 是否能在灾备区域解析,以及安全组、防火墙和 NSX 分布式规则是否同时放行所需流量。
下面的脚本可在 Oracle Linux 或其他常见 Linux 数据库虚拟机中执行,用于检查 FSx for ONTAP NFS 端点的 DNS、TCP 端口和挂载能力。运行前请替换环境变量,并在测试目录中执行;挂载参数仍需结合 Oracle、操作系统和 FSx for ONTAP 的支持建议确认。
#!/usr/bin/env bash
set -euo pipefail
: "${FSX_HOST:?Set FSX_HOST to the FSx for ONTAP NFS endpoint}"
: "${FSX_EXPORT:?Set FSX_EXPORT, for example /oracle_data}"
MOUNT_POINT="${MOUNT_POINT:-/mnt/fsx-oracle-test}"
TEST_FILE="${MOUNT_POINT}/.connectivity-test-$$"
echo "== DNS resolution =="
getent hosts "${FSX_HOST}"
echo "== NFS TCP port =="
if command -v nc >/dev/null 2>&1; then
nc -vz -w 5 "${FSX_HOST}" 2049
else
timeout 5 bash -c "</dev/tcp/${FSX_HOST}/2049"
fi
echo "== Temporary NFS mount =="
sudo mkdir -p "${MOUNT_POINT}"
sudo mount -t nfs4 \
-o rw,hard,timeo=600,retrans=2 \
"${FSX_HOST}:${FSX_EXPORT}" "${MOUNT_POINT}"
cleanup() {
sudo rm -f "${TEST_FILE}" || true
sudo umount "${MOUNT_POINT}" || true
}
trap cleanup EXIT
echo "oracle-storage-check $(date -u +%FT%TZ)" | sudo tee "${TEST_FILE}" >/dev/null
sudo sync
sudo stat "${TEST_FILE}"
echo "FSx for ONTAP connectivity check passed"
该脚本只验证基础连通性,不代表性能达标。上线前还应在单流、并发读写、日志同步写以及快照期间分别测试延迟分布,重点观察 P95 和 P99,而不是只看平均值。
SnapMirror 跨区域容灾:复制成功不等于数据库已经可恢复
SnapMirror 可以将卷复制到另一个区域,但跨区域复制通常是异步链路,因此业务的恢复点目标(RPO)受复制间隔、变更速率和网络状况影响。恢复时间目标(RTO)则取决于更多步骤:
- 判断主区域是否真正不可恢复,避免误切换;
- 确认目标卷的最后一次成功复制时间;
- 停止或隔离源端写入,防止双写;
- 在灾备端执行 SnapMirror 切换;
- 将存储提供给 Oracle VM;
- 启动数据库恢复并检查归档日志;
- 更新 DNS、负载均衡或应用连接配置;
- 恢复后重新建立复制关系,规划回切。
运维人员可以通过 ONTAP CLI 检查复制关系。下面示例只执行只读查询;请将管理端点和目标路径替换为实际值,并确保执行主机可以访问 FSx 管理端点。
#!/usr/bin/env bash
set -euo pipefail
: "${FSX_DR_MGMT:?Set FSX_DR_MGMT to the DR file system management endpoint}"
: "${DESTINATION_PATH:?Set DESTINATION_PATH, for example svm_dr:ora_data_dr}"
ssh "fsxadmin@${FSX_DR_MGMT}" \
"snapmirror show -destination-path ${DESTINATION_PATH} -fields status,healthy,lag-time,last-transfer-end-timestamp"
不要把 snapmirror break 放进无人值守的普通健康检查。它会改变复制关系,应只出现在经过审批的灾备运行手册中,并配合源端隔离、数据库恢复和防止脑裂的步骤。
上线前的决策清单
这类架构适合希望保留 vSphere、NSX 和既有 VMware 运维流程,同时使用 AWS 托管存储能力的企业。它也引入了跨平台边界:数据库团队、VMware 团队、网络团队和存储团队必须共享同一套恢复目标和演练流程。
上线前建议逐项确认:
- 裸金属集群在损失一台主机后仍有足够的 CPU、内存和存储余量;
- Oracle VM 的 NUMA、调度和许可策略已经过审核;
- vSAN 与 FSx for ONTAP 的数据放置规则有明确依据;
- NFS 或数据存储路径的延迟、MTU、路由和安全策略已做端到端验证;
- 快照流程能够产生可验证的 Oracle 一致性恢复点;
- SnapMirror 延迟满足业务 RPO,而不是只显示关系为 healthy;
- 灾备区域具备足够的计算、网络、DNS、密钥和访问权限;
- 团队实际演练过切换、数据库恢复以及回切,而不是只完成文档评审。
最终应以故障演练来验收架构。能在正常状态下运行 Oracle 只是起点;能在主机故障、存储路径中断或区域不可用时,按照可重复的步骤恢复业务,才算完成高可用设计。