阿里云存储系统容灾切换风险洞察
2026-03-29
文档版本: v2.1
更新日期: 2026-03-29
适用范围: Redis、OceanBase、RDS、PolarDB、HBase 容灾切换风险洞察
目录
概述
本文档聚焦阿里云五大核心存储产品(Redis、OceanBase、RDS、PolarDB、HBase)的容灾切换风险洞察,系统性整理切换前后需要检查和监控的风险维度、对应的阿里云CLI检查命令和监控指标,帮助运维人员在切换前全面评估风险、切换后验证恢复状态。
核心指标定义
| 指标 | 说明 | 风险敏感度 |
|---|---|---|
| RTO | 恢复时间目标,切换所需时间 | 越短越好 |
| RPO | 恢复点目标,可接受的数据丢失量 | 越小越好 |
| 数据一致性 | 主备节点数据同步状态 | 强一致性最优 |
| 服务可用性 | 切换期间服务可访问性 | 中断时间越短越好 |
风险洞察框架
切换前风险检查维度
CODE
┌─────────────────────────────────────────────────────────────────────────────┐
│ 切换前风险检查框架 │
├─────────────────────────────────────────────────────────────────────────────┤
│ ┌────────────────┐ ┌────────────────┐ ┌────────────────┐ │
│ │ 实例状态风险 │ │ 数据同步风险 │ │ 资源容量风险 │ │
│ │ - 运行状态 │ │ - 复制延迟 │ │ - CPU/内存 │ │
│ │ - 架构支持性 │ │ - 数据一致性 │ │ - 存储空间 │ │
│ │ - 版本兼容性 │ │ - 同步链路 │ │ - 连接数 │ │
│ └────────────────┘ └────────────────┘ └────────────────┘ │
│ ┌────────────────┐ ┌────────────────┐ ┌────────────────┐ │
│ │ 客户端风险 │ │ 配置风险 │ │ 网络风险 │ │
│ │ - 重连机制 │ │ - 参数配置 │ │ - 白名单 │ │
│ │ - 超时配置 │ │ - HA配置 │ │ - VPC/跨AZ │ │
│ │ - 连接池状态 │ │ - 权限配置 │ │ - 带宽限制 │ │
│ └────────────────┘ └────────────────┘ └────────────────┘ │
└─────────────────────────────────────────────────────────────────────────────┘
切换后风险验证维度
CODE
┌─────────────────────────────────────────────────────────────────────────────┐
│ 切换后风险验证框架 │
├─────────────────────────────────────────────────────────────────────────────┤
│ ┌────────────────┐ ┌────────────────┐ ┌────────────────┐ │
│ │ 服务恢复风险 │ │ 数据完整性风险 │ │ 应用连接风险 │ │
│ │ - 实例状态 │ │ - 数据一致性 │ │ - 连接重建 │ │
│ │ - 新主节点 │ │ - 事务完整性 │ │ - 错误率 │ │
│ │ - 性能恢复 │ │ - 索引状态 │ │ - 重试情况 │ │
│ └────────────────┘ └────────────────┘ └────────────────┘ │
│ ┌────────────────┐ ┌────────────────┐ ┌────────────────┐ │
│ │ 同步链路风险 │ │ 只读实例风险 │ │ 监控告警风险 │ │
│ │ - 备节点重建 │ │ - 延迟恢复 │ │ - 指标异常 │ │
│ │ - 反向同步 │ │ - 链路重建 │ │ - 告警触发 │ │
│ │ - 复制状态 │ │ - 数据追赶 │ │ - 日志分析 │ │
│ └────────────────┘ └────────────────┘ └────────────────┘ │
└─────────────────────────────────────────────────────────────────────────────┘
产品风险详解
1. Redis 风险洞察
1.1 核心风险矩阵
| 风险类别 | 风险项 | 风险等级 | 风险描述 | CLI检查命令 |
|---|---|---|---|---|
| 数据丢失风险 | 异步复制数据丢失 | 🔴高危 | 主备采用异步复制,切换时未同步数据可能丢失 | aliyun r-kvstore DescribeLogicInstanceTopology --InstanceId <id> |
| 数据丢失风险 | repl_backlog溢出 | 🔴高危 | backlog过小导致需要全量重同步,扩大数据丢失窗口 | aliyun r-kvstore DescribeHistoryMonitorValues --InstanceId <id> |
| 数据丢失风险 | AOF/RDB持久化失败 | 🟡中危 | 持久化失败可能导致数据无法恢复 | aliyun r-kvstore DescribeInstanceAttribute --InstanceId <id> |
| 同步风险 | 主备复制延迟 | 🔴高危 | 延迟过大会导致切换后数据不一致或丢失 | aliyun r-kvstore DescribeLogicInstanceTopology --InstanceId <id> |
| 同步风险 | 全量重同步频繁 | 🟡中危 | 频繁full resync影响性能和数据安全 | aliyun r-kvstore DescribeHistoryMonitorValues --InstanceId <id> --Key replication |
| 同步风险 | 复制链路断开 | 🔴高危 | 网络或节点问题导致复制中断 | aliyun r-kvstore DescribeLogicInstanceTopology --InstanceId <id> |
| 连接风险 | 连接闪断 | 🟡中危 | 切换过程中秒级连接中断 | 应用日志检查或 aliyun r-kvstore DescribeHistoryMonitorValues --InstanceId <id> --Key connection |
| 连接风险 | 只读窗口 | 🟡中危 | 切换后可能出现30秒只读状态 | 应用日志检查或 aliyun r-kvstore DescribeHistoryMonitorValues --InstanceId <id> --Key standard_inst_ops |
| 连接风险 | 客户端重连失败 | 🔴高危 | 客户端未实现重连机制导致服务不可用 | 应用日志检查(客户端代码审查) |
| 连接风险 | DNS缓存双写 | 🔴高危 | DNS缓存导致客户端同时写入新旧主节点 | DNS监控/应用日志(建议使用Connection String直连) |
| 资源风险 | 内存使用率过高 | 🟡中危 | 内存不足影响切换和恢复 | aliyun r-kvstore DescribeHistoryMonitorValues --InstanceId <id> --Key memory |
| 资源风险 | 连接数超限 | 🟡中危 | 连接数接近上限影响切换期间重连 | aliyun r-kvstore DescribeHistoryMonitorValues --InstanceId <id> --Key connection |
| 资源风险 | 大Key阻塞 | 🟡中危 | 大Key操作阻塞主线程影响切换速度 | aliyun r-kvstore DescribeHistoryMonitorValues --InstanceId <id> --Key slowlog |
| 架构风险 | 脑裂风险 | 🔴高危 | 主备同时认为自己是主节点导致数据双写 | aliyun r-kvstore DescribeRoleZoneInfo --InstanceId <id> |
| 架构风险 | 单副本架构不支持切换 | 🔴高危 | 单副本实例无备节点可切换 | aliyun r-kvstore DescribeInstanceAttribute --InstanceId <id> |
| 架构风险 | 集群分片不均 | 🟡中危 | 集群架构单分片切换影响部分slot | aliyun r-kvstore DescribeLogicInstanceTopology --InstanceId <id> |
| 配置风险 | min-slaves配置不当 | 🟡中危 | 配置不当可能影响写入保护 | aliyun r-kvstore DescribeInstanceAttribute --InstanceId <id> 查看参数 |
| 配置风险 | 内存淘汰策略风险 | 🟡中危 | 备节点内存策略可能导致数据丢失 | aliyun r-kvstore DescribeInstanceAttribute --InstanceId <id> 查看参数 |
| 监控风险 | 复制延迟告警缺失 | 🟡中危 | 延迟过高时无告警导致风险不可见 | aliyun cms DescribeAlertRules --Namespace acs_r-kvstore --NamePrefix replication |
| 监控风险 | 切换事件无告警 | 🟡中危 | 切换发生时无通知 | aliyun cms DescribeAlertRules --Namespace acs_r-kvstore |
1.2 风险详细说明与检查命令
数据丢失风险详解
异步复制数据丢失风险:
- 阿里云Tair(兼容Redis)主备复制为异步模式
- 主节点写入后立即返回成功,数据异步传输到备节点
- 切换时未同步数据可能永久丢失
CODE
风险链路:
Client ──写入──> Master ──异步复制──> Replica
│
▼
[立即返回OK]
│
┌─────▼─────┐
│ Master宕机 │
└─────▼─────┐
│
┌─────▼─────┐
│ 未同步数据 │ ← 永久丢失
└───────────┘
repl_backlog溢出风险:
- 当主节点写入速度超过复制速度时,backlog可能被覆盖
- 触发全量重同步,切换时间大幅延长
检查命令:
BASH
# 1. 检查实例状态和架构
aliyun r-kvstore DescribeInstanceAttribute --InstanceId <id>
# 风险检查点:
# - InstanceStatus: 必须为 "Running" 或 "Normal"
# - ArchitectureType: 确认架构类型(单副本不支持切换)
# - NodeType: 确认节点类型
# 2. 检查主备节点分布和角色
aliyun r-kvstore DescribeRoleZoneInfo --InstanceId <id>
# 风险检查点:
# - 各节点Role: 确认主备角色正确
# - ZoneId: 确认跨可用区部署(如有)
# - 节点状态是否正常
# 3. 检查复制状态(关键!)
aliyun r-kvstore DescribeLogicInstanceTopology --InstanceId <id>
# 风险检查点:
# - ReplicaDelay: 延迟时间(建议 < 1秒)
# - SyncStatus: 同步状态
# - connected_slaves: 连接的备节点数
# 4. 检查实例性能指标
aliyun r-kvstore DescribeHistoryMonitorValues --InstanceId <id> --StartTime <时间> --EndTime <时间>
# 风险检查点:
# - memory_usage: 内存使用率(建议 < 80%)
# - connection_count: 连接数
# - replication_backlog_used: backlog使用率
同步风险详解
复制延迟风险矩阵:
| 延迟程度 | 数据丢失风险 | 切换后数据一致性 | 建议操作 |
|---|---|---|---|
| < 1秒 | 极低 | 基本一致 | 可以切换 |
| 1-5秒 | 低 | 可能少量不一致 | 评估后切换 |
| 5-30秒 | 中 | 较多不一致 | 谨慎切换 |
| > 30秒 | 高 | 大量不一致 | 不建议切换 |
全量重同步风险:
- 触发条件:repl_backlog溢出、备节点重启、网络中断时间过长
- 影响:复制需要从头开始,切换时间从秒级延长到分钟级
连接风险详解
客户端重连风险检查清单:
| 检查项 | 风险描述 | 检查方法 |
|---|---|---|
| 重连机制 | 无重连机制导致服务不可用 | 应用代码审查 |
| 超时配置 | socketTimeout过长导致阻塞 | 配置文件检查 |
| 连接池配置 | 连接池满导致无法重连 | 连接池监控 |
| 幂等性 | 重试导致重复写入 | 应用逻辑审查 |
DNS缓存双写风险:
- 触发条件:切换后DNS未及时更新
- 表现:部分客户端仍连接到旧主节点
- 后果:数据写入到错误的节点
架构风险详解
脑裂风险检测:
- 检查是否存在多个节点同时认为自己是主节点
- 检查min-slaves-to-write配置是否生效
BASH
# 检查集群拓扑,确认主备角色唯一性
aliyun r-kvstore DescribeLogicInstanceTopology --InstanceId <id>
监控与告警风险
必配置监控指标:
| 监控指标 | 阈值建议 | 告警级别 | 说明 |
|---|---|---|---|
| master_repl_offset差值 | > 1000 | 警告 | 主备偏移量差异 |
| connected_slaves | = 0 | 严重 | 无可用备节点 |
| 复制延迟 | > 5秒 | 警告 | 复制延迟过高 |
| 内存使用率 | > 80% | 警告 | 内存压力 |
| 连接数使用率 | > 90% | 警告 | 连接数压力 |
| 切换事件 | 任何切换 | 信息 | 记录切换发生 |
1.3 风险检查完整清单
切换前必查项
BASH
#!/bin/bash
# Redis 切换前风险检查脚本
INSTANCE_ID="your-instance-id"
echo "=== Redis 切换前风险检查 ==="
# 1. 实例状态检查
echo "[1] 检查实例状态..."
aliyun r-kvstore DescribeInstanceAttribute --InstanceId $INSTANCE_ID
# 风险检查:InstanceStatus = "Running"
# 2. 架构检查
echo "[2] 检查实例架构..."
aliyun r-kvstore DescribeInstanceAttribute --InstanceId $INSTANCE_ID
# 风险检查:确认非单副本架构
# 3. 节点角色检查
echo "[3] 检查节点角色..."
aliyun r-kvstore DescribeRoleZoneInfo --InstanceId $INSTANCE_ID
# 风险检查:确认主备角色正确
# 4. 复制状态检查(关键!)
echo "[4] 检查复制状态..."
aliyun r-kvstore DescribeLogicInstanceTopology --InstanceId $INSTANCE_ID
# 风险检查:ReplicaDelay < 1秒
# 5. 性能指标检查
echo "[5] 检查性能指标..."
aliyun r-kvstore DescribeHistoryMonitorValues \
--InstanceId $INSTANCE_ID \
--StartTime $(date -u -v-10M +%Y-%m-%dT%H:%M:%SZ 2>/dev/null || date -u -d '10 minutes ago' +%Y-%m-%dT%H:%M:%SZ) \
--EndTime $(date -u +%Y-%m-%dT%H:%M:%SZ)
# 风险检查:内存 < 80%,连接数正常
echo "=== 检查完成 ==="
| 序号 | 检查项 | CLI命令 | 预期结果 | 风险等级 |
|---|---|---|---|---|
| 1 | 实例状态 | aliyun r-kvstore DescribeInstanceAttribute --InstanceId <id> | InstanceStatus=Running | 🔴必须通过 |
| 2 | 架构类型 | aliyun r-kvstore DescribeInstanceAttribute --InstanceId <id> | ArchitectureType≠单副本 | 🔴必须通过 |
| 3 | 主备角色 | aliyun r-kvstore DescribeRoleZoneInfo --InstanceId <id> | Role正确 | 🔴必须通过 |
| 4 | 复制延迟 | aliyun r-kvstore DescribeLogicInstanceTopology --InstanceId <id> | ReplicaDelay<1秒 | 🔴必须通过 |
| 5 | 内存使用率 | aliyun r-kvstore DescribeHistoryMonitorValues --InstanceId <id> | < 80% | 🟡建议通过 |
| 6 | 连接数 | aliyun r-kvstore DescribeHistoryMonitorValues --InstanceId <id> | 正常范围 | 🟡建议通过 |
| 7 | 白名单配置 | aliyun r-kvstore DescribeInstanceAttribute --InstanceId <id> | 包含客户端IP | 🟡建议通过 |
| 8 | 大Key风险 | aliyun r-kvstore DescribeHistoryMonitorValues --InstanceId <id> --Key slowlog | 无大Key | 🟡建议通过 |
切换后必查项
| 序号 | 检查项 | CLI命令 | 预期结果 | 风险等级 |
|---|---|---|---|---|
| 1 | 实例状态 | aliyun r-kvstore DescribeInstanceAttribute --InstanceId <id> | InstanceStatus=Running | 🔴必须通过 |
| 2 | 新主节点角色 | aliyun r-kvstore DescribeRoleZoneInfo --InstanceId <id> | Role=Master | 🔴必须通过 |
| 3 | 备节点重建 | aliyun r-kvstore DescribeLogicInstanceTopology --InstanceId <id> | 同步状态=Normal | 🔴必须通过 |
| 4 | 连接恢复 | 应用日志检查 | 无大量错误 | 🟡建议通过 |
| 5 | 数据一致性 | 业务抽样校验 | 数据一致 | 🔴必须通过 |
| 6 | 切换事件日志 | aliyun r-kvstore DescribeHistoryEvents --InstanceId <id> | 记录正常 | 🟡建议通过 |
2. RDS 风险洞察
2.1 核心风险矩阵
| 风险类别 | 风险项 | 风险等级 | 风险描述 | CLI检查命令 |
|---|---|---|---|---|
| 数据丢失风险 | 异步复制数据丢失 | 🔴高危 | 主备异步复制,切换时未同步数据可能丢失 | aliyun rds DescribeDBInstancePerformance --DBInstanceId <id> --Key MySQL_DataDelay |
| 数据丢失风险 | 半同步超时降级 | 🟡中危 | 半同步超时后降级为异步,增加丢失风险 | aliyun rds DescribeDBInstanceAttribute --DBInstanceId <id> 查看参数 |
| 数据丢失风险 | GTID不一致 | 🟡中危 | GTID配置问题可能导致切换失败或数据不一致 | aliyun rds DescribeDBInstanceAttribute --DBInstanceId <id> 查看EngineVersion |
| 数据丢失风险 | 大事务导致延迟 | 🔴高危 | 大事务导致备库严重延迟,切换丢失大量数据 | aliyun rds DescribeDBInstancePerformance --DBInstanceId <id> --Key MySQL_DataDelay |
| 同步风险 | Seconds_Behind_Master过大 | 🔴高危 | 官方指标可能不准确,需心跳机制辅助检测 | aliyun rds DescribeDBInstancePerformance --DBInstanceId <id> --Key MySQL_DataDelay |
| 同步风险 | Binlog堆积 | 🟡中危 | Binlog大量堆积影响复制性能 | aliyun rds DescribeDBInstancePerformance --DBInstanceId <id> --Key MySQL_BinlogSize |
| 同步风险 | Relay Log空间不足 | 🟡中危 | Relay Log空间不足导致复制中断 | aliyun rds DescribeDBInstanceAttribute --DBInstanceId <id> 查看DBInstanceStorageUsed |
| 同步风险 | 复制线程异常 | 🔴高危 | IO/SQL线程停止导致无法同步 | aliyun rds DescribeDBInstancePerformance --DBInstanceId <id> --Key MySQL_SlaveStatus |
| 只读实例风险 | 只读实例延迟 | 🟡中危 | 主备切换后只读实例需要几分钟追赶 | aliyun rds DescribeReadOnlyDBInstances --DBInstanceId <id> |
| 只读实例风险 | 只读实例链路断开 | 🟡中危 | 切换后只读实例复制链路需重建 | aliyun rds DescribeReadOnlyDBInstances --DBInstanceId <id> |
| 只读实例风险 | 只读实例不支持提升 | 🟡中危 | 部分系列只读实例不可提升为主 | aliyun rds DescribeReadOnlyDBInstances --DBInstanceId <id> 查看DBInstanceClass |
| 连接风险 | 连接闪断(~15秒) | 🟡中危 | 切换期间约15秒服务不可用 | 应用日志检查或 aliyun rds DescribeDBInstancePerformance --DBInstanceId <id> --Key MySQL_Sessions |
| 连接风险 | Druid兼容性问题 | 🔴高危 | Druid < 1.1.16 版本可能无法重连 | 应用配置文件检查(pom.xml/build.gradle查看Druid版本) |
| 连接风险 | socketTimeout配置不当 | 🟡中危 | 超时配置不当导致连接长时间阻塞 | 应用配置文件检查(application.properties/yml) |
| 连接风险 | 连接池重连风暴 | 🟡中危 | 大量连接同时重连导致瞬时压力 | aliyun rds DescribeDBInstancePerformance --DBInstanceId <id> --Key MySQL_Sessions |
| 架构风险 | 基础版不支持切换 | 🔴高危 | 基础版无备节点,无法进行主备切换 | aliyun rds DescribeDBInstanceAttribute --DBInstanceId <id> 查看Category |
| 架构风险 | HA配置被关闭 | 🔴高危 | 自动切换被临时关闭导致故障时无法切换 | aliyun rds DescribeHASwitchConfig --DBInstanceId <id> |
| 架构风险 | 跨可用区网络延迟 | 🟡中危 | 跨AZ部署复制延迟增加 | aliyun rds DescribeDBInstanceAttribute --DBInstanceId <id> 查看ZoneId |
| 性能风险 | 切换后性能下降 | 🟡中危 | 缓存冷启动、统计信息失效导致性能下降 | aliyun rds DescribeDBInstancePerformance --DBInstanceId <id> --Key MySQL_CpuUsage,MySQL_IOPS |
| 性能风险 | 切换触发慢查询激增 | 🟡中危 | 切换后执行计划变化导致慢查询 | aliyun rds DescribeDBInstancePerformance --DBInstanceId <id> --Key MySQL_SlowQueries |
| Binlog风险 | Binlog格式不一致 | 🟡中危 | ROW/MIXED/STATEMENT格式影响CDC和一致性 | aliyun rds DescribeDBInstanceAttribute --DBInstanceId <id> 查看参数 |
| Binlog风险 | Binlog写入失败 | 🔴高危 | 磁盘满或其他原因导致Binlog写入失败 | aliyun rds DescribeDBInstanceAttribute --DBInstanceId <id> 查看错误日志 |
| 监控风险 | 复制延迟监控不准确 | 🟡中危 | Seconds_Behind_Master可能显示0但实际延迟 | aliyun rds DescribeDBInstancePerformance --DBInstanceId <id> --Key MySQL_DataDelay |
| 监控风险 | 无延迟告警 | 🟡中危 | 延迟过高时无告警 | aliyun cms DescribeAlertRules --Namespace acs_rds |
2.2 风险详细说明与检查命令
数据丢失风险详解
复制延迟与数据丢失关系:
CODE
┌─────────────────────────────────────────────────────────────────────────────┐
│ RDS 复制延迟 → 数据丢失风险映射 │
├─────────────────────────────────────────────────────────────────────────────┤
│ │
│ 延迟 < 1秒 │████████████████████│ 数据丢失风险极低,可以安全切换 │
│ 延迟 1-5秒 │██████████████████ │ 数据丢失风险低,评估后可切换 │
│ 延迟 5-30秒 │██████████████ │ 数据丢失风险中等,谨慎切换 │
│ 延迟 30-60秒 │████████████ │ 数据丢失风险较高,不建议切换 │
│ 延迟 > 60秒 │██████████ │ 数据丢失风险高,禁止切换 │
│ │
│ 注:Seconds_Behind_Master可能不准确,建议使用心跳机制辅助检测 │
│ │
└─────────────────────────────────────────────────────────────────────────────┘
半同步复制风险:
| 半同步状态 | 数据安全 | 性能影响 | 切换风险 |
|---|---|---|---|
| 正常半同步 | RPO≈0 | 有延迟开销 | 低 |
| 超时降级异步 | RPO可能>0 | 无影响 | 中 |
| 完全异步 | RPO不确定 | 无影响 | 高 |
大事务风险检测:
- 大批量DELETE/UPDATE导致备库追赶困难
- DDL操作可能导致长时间复制延迟
- 需要在切换前确认无大事务执行
检查命令:
BASH
# 1. 检查实例状态和系列
aliyun rds DescribeDBInstanceAttribute --DBInstanceId <id>
# 风险检查点:
# - DBInstanceStatus: 必须为 "Running"
# - Category: 必须为 HighAvailability 或 Cluster(基础版不支持切换)
# - EngineVersion: MySQL版本
# 2. 检查主备延迟(关键!)
aliyun rds DescribeDBInstancePerformance --DBInstanceId <id> --Key MySQL_DataDelay
# 风险检查点:
# - Seconds_Behind_Master: 建议 < 5秒
# - 注意:此指标可能不准确,需结合其他方式验证
# 3. 检查只读实例状态
aliyun rds DescribeReadOnlyDBInstances --DBInstanceId <id>
# 风险检查点:
# - 只读实例延迟状态
# - 只读实例数量和分布
# 4. 检查HA配置状态
aliyun rds DescribeHASwitchConfig --DBInstanceId <id>
# 风险检查点:
# - SwitchConfig: 应为 Auto(非 TempClose 或 PermanentClose)
# 5. 检查连接数和性能
aliyun rds DescribeDBInstancePerformance --DBInstanceId <id> --Key MySQL_Sessions,MySQL_CpuUsage,MySQL_SpaceUsage
# 风险检查点:
# - 连接数使用率
# - CPU使用率
# - 存储空间使用率
# 6. 检查Binlog状态
aliyun rds DescribeDBInstancePerformance --DBInstanceId <id> --Key MySQL_BinlogSize,MySQL_IOPS
只读实例风险详解
只读实例切换风险链:
CODE
┌─────────────────────────────────────────────────────────────────────────────┐
│ RDS 只读实例切换风险链 │
├─────────────────────────────────────────────────────────────────────────────┤
│ │
│ Master ──切换──> New Master │
│ │ │ │
│ ▼ ▼ │
│ [只读实例] [只读实例] │
│ │ │ │
│ │ ▼ │
│ │ [复制链路断开] │
│ │ │ │
│ │ ▼ │
│ │ [链路重建] ← 几分钟延迟 │
│ │ │ │
│ │ ▼ │
│ │ [数据追赶] ← 延迟恢复 │
│ │ │ │
│ ▼ ▼ │
│ [读延迟开始] [延迟恢复] │
│ │
│ 风险:只读实例在主备切换后会有几分钟的复制延迟 │
│ 影响:读请求可能读到旧数据 │
│ │
└─────────────────────────────────────────────────────────────────────────────┘
连接与驱动风险详解
Druid连接池风险:
| Druid版本 | 重连能力 | 风险等级 | 建议 |
|---|---|---|---|
| < 1.1.16 | 可能失败 | 🔴高危 | 必须升级 |
| >= 1.1.16 | 正常重连 | 🟢低风险 | 推荐版本 |
socketTimeout配置建议:
| 环境 | connectTimeout | socketTimeout | 说明 |
|---|---|---|---|
| 内网同AZ | 1-2秒 | 10-15秒 | 网络延迟低 |
| 内网跨AZ | 2-3秒 | 30-45秒 | 有一定延迟 |
| 公网/跨地域 | 3-5秒 | 60-90秒 | 网络延迟高 |
架构风险详解
实例系列风险对比:
| 实例系列 | HA能力 | 切换支持 | 风险等级 |
|---|---|---|---|
| 基础版 | 无 | ❌不支持 | 🔴不可切换 |
| 高可用版 | 有 | ✅支持 | 🟢可切换 |
| 集群版 | 有 | ✅支持 | 🟢可切换 |
HA配置状态风险:
| HA配置 | 含义 | 切换风险 | 处置 |
|---|---|---|---|
| Auto | 自动切换开启 | 正常 | 无需处置 |
| TempClose | 临时关闭 | 故障时无保护 | 确认原因,尽快恢复 |
| PermanentClose | 永久关闭 | 🔴高风险 | 不推荐,评估风险 |
2.3 风险检查完整清单
切换前必查项
BASH
#!/bin/bash
# RDS 切换前风险检查脚本
DB_INSTANCE_ID="your-instance-id"
echo "=== RDS 切换前风险检查 ==="
# 1. 实例状态检查
echo "[1] 检查实例状态和系列..."
aliyun rds DescribeDBInstanceAttribute --DBInstanceId $DB_INSTANCE_ID
# 风险检查:DBInstanceStatus = "Running", Category != "Basic"
# 2. 主备延迟检查(关键!)
echo "[2] 检查主备延迟..."
aliyun rds DescribeDBInstancePerformance --DBInstanceId $DB_INSTANCE_ID --Key MySQL_DataDelay
# 风险检查:Seconds_Behind_Master < 5秒
# 3. 只读实例检查
echo "[3] 检查只读实例状态..."
aliyun rds DescribeReadOnlyDBInstances --DBInstanceId $DB_INSTANCE_ID
# 风险检查:只读实例延迟正常
# 4. HA配置检查
echo "[4] 检查HA配置..."
aliyun rds DescribeHASwitchConfig --DBInstanceId $DB_INSTANCE_ID
# 风险检查:SwitchConfig = "Auto"
# 5. 性能指标检查
echo "[5] 检查性能指标..."
aliyun rds DescribeDBInstancePerformance --DBInstanceId $DB_INSTANCE_ID \
--Key MySQL_Sessions,MySQL_CpuUsage,MySQL_SpaceUsage,MySQL_IOPS
# 风险检查:资源使用率正常
# 6. Binlog检查
echo "[6] 检查Binlog状态..."
aliyun rds DescribeDBInstancePerformance --DBInstanceId $DB_INSTANCE_ID --Key MySQL_BinlogSize
echo "=== 检查完成 ==="
| 序号 | 检查项 | CLI命令 | 预期结果 | 风险等级 |
|---|---|---|---|---|
| 1 | 实例状态 | aliyun rds DescribeDBInstanceAttribute --DBInstanceId <id> | DBInstanceStatus=Running | 🔴必须通过 |
| 2 | 实例系列 | aliyun rds DescribeDBInstanceAttribute --DBInstanceId <id> | Category≠Basic | 🔴必须通过 |
| 3 | 主备延迟 | aliyun rds DescribeDBInstancePerformance --DBInstanceId <id> --Key MySQL_DataDelay | Seconds_Behind_Master<5秒 | 🔴必须通过 |
| 4 | HA配置 | aliyun rds DescribeHASwitchConfig --DBInstanceId <id> | SwitchConfig=Auto | 🔴必须通过 |
| 5 | 只读实例状态 | aliyun rds DescribeReadOnlyDBInstances --DBInstanceId <id> | 延迟正常 | 🟡建议通过 |
| 6 | 存储空间 | aliyun rds DescribeDBInstanceAttribute --DBInstanceId <id> | DBInstanceStorageUsed<80% | 🟡建议通过 |
| 7 | 连接数 | aliyun rds DescribeDBInstancePerformance --DBInstanceId <id> --Key MySQL_Sessions | 正常范围 | 🟡建议通过 |
| 8 | CPU使用率 | aliyun rds DescribeDBInstancePerformance --DBInstanceId <id> --Key MySQL_CpuUsage | < 80% | 🟡建议通过 |
| 9 | Binlog大小 | aliyun rds DescribeDBInstancePerformance --DBInstanceId <id> --Key MySQL_BinlogSize | 正常范围 | 🟡建议通过 |
| 10 | Druid版本 | 应用配置检查 | >= 1.1.16 | 🔴必须通过 |
| 11 | socketTimeout配置 | 应用配置检查 | 合理配置 | 🟡建议通过 |
切换后必查项
| 序号 | 检查项 | CLI命令 | 预期结果 | 风险等级 |
|---|---|---|---|---|
| 1 | 实例状态 | aliyun rds DescribeDBInstanceAttribute --DBInstanceId <id> | DBInstanceStatus=Running | 🔴必须通过 |
| 2 | 新主节点信息 | aliyun rds DescribeDBInstanceAttribute --DBInstanceId <id> | 确认新主 | 🔴必须通过 |
| 3 | 只读实例延迟恢复 | aliyun rds DescribeReadOnlyDBInstances --DBInstanceId <id> | 延迟恢复 | 🟡建议通过 |
| 4 | 连接恢复 | 应用日志检查 | 连接正常 | 🔴必须通过 |
| 5 | 数据一致性 | 业务抽样校验 | 数据一致 | 🔴必须通过 |
| 6 | 性能恢复 | aliyun rds DescribeDBInstancePerformance --DBInstanceId <id> | 性能正常 | 🟡建议通过 |
3. PolarDB 风险洞察
3.1 核心风险矩阵
| 风险类别 | 风险项 | 风险等级 | 风险描述 | CLI检查命令 |
|---|---|---|---|---|
| 切换时间风险 | 热备未开启 | 🔴高危 | 未开启热备时切换时间20-30秒,开启后5-10秒 | aliyun polardb DescribeDBClusters --DBClusterId <id> 查看HasHotStandby |
| 切换时间风险 | 热备节点未预热 | 🟡中危 | 热备节点Buffer Pool未预热影响切换速度 | aliyun polardb DescribeDBClusterPerformance --DBClusterId <id> |
| 切换时间风险 | 极端场景闪断延长 | 🔴高危 | 特殊故障场景闪断可能延长至3分钟 | aliyun polardb DescribeDBClusterPerformance --DBClusterId <id> 监控切换事件时间 |
| 数据丢失风险 | 事务中断丢失 | 🔴高危 | 切换时刻未提交事务可能丢失 | 应用事务日志检查(建议检查应用事务重试逻辑) |
| 数据丢失风险 | 事务续传失败 | 🟡中危 | 事务续传功能失败导致事务回滚 | aliyun polardb DescribeDBClusters --DBClusterId <id> 查看版本支持 |
| 数据丢失风险 | 半同步超时降级 | 🟡中危 | 半同步超时后退化为异步 | aliyun polardb DescribeDBClusterPerformance --DBClusterId <id> |
| VDS风险 | VDS服务异常 | 🔴高危 | 投票盘服务异常导致选举失败 | aliyun polardb DescribeDBClusters --DBClusterId <id>(检查HasHotStandby及节点状态) |
| VDS风险 | 选举超时 | 🟡中危 | Paxos选举超时导致切换延迟 | aliyun polardb DescribeDBClusters --DBClusterId <id> |
| 复制风险 | 物理复制延迟 | 🟡中危 | Redo日志应用延迟 | aliyun polardb DescribeDBClusterPerformance --DBClusterId <id> --Key polar_replication_lag |
| 复制风险 | 复制链路异常 | 🔴高危 | 物理复制链路中断 | aliyun polardb DescribeDBClusters --DBClusterId <id> |
| 连接风险 | 连接闪断 | 🟡中危 | 热备5-10秒,非热备20-30秒 | 应用日志检查或 aliyun polardb DescribeDBClusterPerformance --DBClusterId <id> --Key PolarNode_Sessions |
| 连接风险 | 长连接失效 | 🟡中危 | 长连接在切换后可能无法感知状态变化 | 应用日志检查(建议配置connectionValidationInterval) |
| 连接风险 | PolarProxy路由延迟 | 🟡中危 | 代理路由更新延迟 | aliyun polardb DescribeDBClusterEndpoints --DBClusterId <id> |
| 连接风险 | 集群地址路由异常 | 🟡中危 | 集群地址路由到错误节点 | aliyun polardb DescribeDBClusterEndpoints --DBClusterId <id> |
| 节点风险 | Failover优先级冲突 | 🟡中危 | 多备节点优先级配置不当 | aliyun polardb DescribeDBClusters --DBClusterId <id> 查看FailoverPriority |
| 节点风险 | 目标节点规格不足 | 🔴高危 | 目标节点规格不足以承载业务 | aliyun polardb DescribeDBClusters --DBClusterId <id> 查看DBNodeClass |
| 节点风险 | 节点状态异常 | 🔴高危 | 目标节点状态异常无法切换 | aliyun polardb DescribeDBClusters --DBClusterId <id> |
| 存储风险 | 存储空间不足 | 🔴高危 | 存储空间不足影响切换和恢复 | aliyun polardb DescribeDBClusters --DBClusterId <id> 查看DBClusterStorageUsed |
| 存储风险 | IO瓶颈 | 🟡中危 | IO压力大影响切换速度 | aliyun polardb DescribeDBClusterPerformance --DBClusterId <id> --Key PolarNode_IOPS |
| 性能风险 | 切换后性能下降 | 🟡中危 | 缓存冷启动导致性能下降 | aliyun polardb DescribeDBClusterPerformance --DBClusterId <id> |
| 性能风险 | 慢查询激增 | 🟡中危 | 切换后执行计划变化 | aliyun polardb DescribeDBClusterPerformance --DBClusterId <id> --Key PolarNode_SlowLogCounts |
| 监控风险 | VDS状态未监控 | 🟡中危 | VDS异常无告警 | aliyun cms DescribeAlertRules --Namespace acs_polardb |
| 监控风险 | 切换时间无监控 | 🟡中危 | 切换超时无告警 | aliyun cms DescribeAlertRules --Namespace acs_polardb |
3.2 风险详细说明与检查命令
热备切换风险详解
热备与非热备切换对比:
CODE
┌─────────────────────────────────────────────────────────────────────────────┐
│ PolarDB 热备 vs 非热备切换对比 │
├─────────────────────────────────────────────────────────────────────────────┤
│ │
│ 【热备模式】 【非热备模式】 │
│ │
│ 切换时间: 5-10秒 切换时间: 20-30秒 │
│ ████████████ ████████████████████████████████ │
│ │
│ 事务保留: 支持 事务保留: 不支持 │
│ 数据丢失: 极少 数据丢失: 可能较多 │
│ │
│ 适用场景: 关键业务 适用场景: 一般业务 │
│ │
│ 前提条件: 前提条件: │
│ - 开启热备功能 - 无特殊要求 │
│ - VDS正常 │
│ - 备节点预热完成 │
│ │
└─────────────────────────────────────────────────────────────────────────────┘
VDS(投票盘服务)风险:
- VDS负责仲裁主备切换决策
- VDS异常可能导致切换失败或脑裂
- 需要监控VDS服务状态
检查命令:
BASH
# 1. 检查集群状态
aliyun polardb DescribeDBClusters --DBClusterId <id>
# 风险检查点:
# - DBClusterStatus: 必须为 "Running"
# - HasHotStandby: 是否开启热备(关键!)
# - 节点列表和角色
# 2. 检查节点详细状态
aliyun polardb DescribeDBClusters --DBClusterId <id>
# 风险检查点:
# - 各节点 DBNodeRole
# - FailoverPriority: 切换优先级
# - ZoneId: 可用区分布
# 3. 检查连接地址
aliyun polardb DescribeDBClusterEndpoints --DBClusterId <id>
# 风险检查点:
# - EndpointType: Primary/Cluster/Custom
# - 地址可访问性
# 4. 检查性能指标
aliyun polardb DescribeDBClusterPerformance --DBClusterId <id>
# 风险检查点:
# - CPU使用率
# - 内存使用率
# - 存储使用率
# - 连接数
# 5. 检查存储空间
aliyun polardb DescribeDBClusters --DBClusterId <id>
# 风险检查点:
# - DBClusterStorageUsed
# - DBClusterStorage
事务续传风险详解
事务续传功能说明:
- 切换时保持活跃事务状态
- 新主节点继承未完成事务
- 客户端无需重试事务
事务续传失败风险:
- 触发条件:PolarProxy未部署或transaction keep失败
- 影响:活跃事务回滚,应用需要重试
检查点:
- 确认PolarProxy部署状态
- 确认事务续传功能启用
- 配置合理的客户端超时
Failover优先级风险
优先级配置风险矩阵:
| 配置场景 | 风险描述 | 建议 |
|---|---|---|
| 所有节点优先级相同 | 自动选举可能选择低规格节点 | 设置差异化优先级 |
| 高优先级节点状态异常 | 可能切换失败 | 监控节点状态 |
| 手动指定节点切换 | 指定节点可能不可用 | 预检查节点状态 |
| 跨AZ切换 | 可能影响延迟 | 评估业务容忍度 |
3.3 风险检查完整清单
切换前必查项
BASH
#!/bin/bash
# PolarDB 切换前风险检查脚本
CLUSTER_ID="your-cluster-id"
echo "=== PolarDB 切换前风险检查 ==="
# 1. 集群状态检查
echo "[1] 检查集群状态..."
aliyun polardb DescribeDBClusters --DBClusterId $CLUSTER_ID
# 风险检查:DBClusterStatus = "Running"
# 2. 热备状态检查(关键!)
echo "[2] 检查热备状态..."
aliyun polardb DescribeDBClusters --DBClusterId $CLUSTER_ID
# 风险检查:HasHotStandby = true
# 3. 节点状态检查
echo "[3] 检查节点状态..."
aliyun polardb DescribeDBClusters --DBClusterId $CLUSTER_ID
# 风险检查:各节点状态正常,优先级配置合理
# 4. 连接地址检查
echo "[4] 检查连接地址..."
aliyun polardb DescribeDBClusterEndpoints --DBClusterId $CLUSTER_ID
# 风险检查:地址配置正确
# 5. 存储空间检查
echo "[5] 检查存储空间..."
aliyun polardb DescribeDBClusters --DBClusterId $CLUSTER_ID
# 风险检查:存储使用率 < 80%
# 6. 性能指标检查
echo "[6] 检查性能指标..."
aliyun polardb DescribeDBClusterPerformance --DBClusterId $CLUSTER_ID
# 风险检查:CPU、内存、连接数正常
echo "=== 检查完成 ==="
| 序号 | 检查项 | CLI命令 | 预期结果 | 风险等级 |
|---|---|---|---|---|
| 1 | 集群状态 | aliyun polardb DescribeDBClusters --DBClusterId <id> | DBClusterStatus=Running | 🔴必须通过 |
| 2 | 热备状态 | aliyun polardb DescribeDBClusters --DBClusterId <id> | HasHotStandby=true | 🟡建议通过 |
| 3 | 节点状态 | aliyun polardb DescribeDBClusters --DBClusterId <id> | 各节点DBNodeStatus=Running | 🔴必须通过 |
| 4 | Failover优先级 | aliyun polardb DescribeDBClusters --DBClusterId <id> | FailoverPriority配置合理 | 🟡建议通过 |
| 5 | 存储空间 | aliyun polardb DescribeDBClusters --DBClusterId <id> | DBClusterStorageUsed<80% | 🟡建议通过 |
| 6 | 连接地址 | aliyun polardb DescribeDBClusterEndpoints --DBClusterId <id> | 地址配置正确 | 🔴必须通过 |
| 7 | CPU使用率 | aliyun polardb DescribeDBClusterPerformance --DBClusterId <id> | < 80% | 🟡建议通过 |
| 8 | 内存使用率 | aliyun polardb DescribeDBClusterPerformance --DBClusterId <id> | < 80% | 🟡建议通过 |
| 9 | 连接数 | aliyun polardb DescribeDBClusterPerformance --DBClusterId <id> | 正常范围 | 🟡建议通过 |
| 10 | 复制延迟 | aliyun polardb DescribeDBClusterPerformance --DBClusterId <id> --Key polar_replication_lag | 正常 | 🔴必须通过 |
切换后必查项
| 序号 | 检查项 | CLI命令 | 预期结果 | 风险等级 |
|---|---|---|---|---|
| 1 | 集群状态 | aliyun polardb DescribeDBClusters --DBClusterId <id> | DBClusterStatus=Running | 🔴必须通过 |
| 2 | 新主节点角色 | aliyun polardb DescribeDBClusters --DBClusterId <id> | DBNodeRole=writer | 🔴必须通过 |
| 3 | 连接地址正常 | aliyun polardb DescribeDBClusterEndpoints --DBClusterId <id> | 地址可访问 | 🔴必须通过 |
| 4 | 只读节点状态 | aliyun polardb DescribeDBClusters --DBClusterId <id> | 全部正常 | 🟡建议通过 |
| 5 | 性能指标恢复 | aliyun polardb DescribeDBClusterPerformance --DBClusterId <id> | 正常 | 🟡建议通过 |
| 6 | 数据一致性 | 业务抽样校验 | 数据一致 | 🔴必须通过 |
| 7 | 应用连接恢复 | 应用日志检查 | 连接正常 | 🔴必须通过 |
4. OceanBase 风险洞察
4.1 核心风险矩阵
| 风险类别 | 风险项 | 风险等级 | 风险描述 | CLI检查命令 |
|---|---|---|---|---|
| Paxos选举风险 | 多数副本不可达 | 🔴高危 | Paxos需要多数副本达成一致,无法选举导致服务不可用 | aliyun OceanBasePro DescribeInstanceTopology --InstanceId <id> |
| Paxos选举风险 | 选举超时 | 🟡中危 | 网络分区或延迟导致选举时间延长 | aliyun OceanBasePro DescribeInstance --InstanceId <id> |
| Paxos选举风险 | lease_time配置不当 | 🟡中危 | 故障判定时间配置不当影响切换速度 | OCP控制台参数管理查看lease_time配置 |
| Zone风险 | Zone分布不均 | 🟡中危 | PrimaryZone分布影响切换后性能 | aliyun OceanBasePro DescribeInstanceTopology --InstanceId <id> |
| Zone风险 | 单Zone故障 | 🔴高危 | 单Zone故障导致失去多数副本 | aliyun OceanBasePro DescribeInstanceTopology --InstanceId <id> |
| Zone风险 | 跨Zone网络延迟 | 🟡中危 | 跨Zone部署增加复制延迟 | 网络延迟探测(ping/iperf3测试跨Zone延迟) |
| 租户资源风险 | 备租户资源不足 | 🔴高危 | 备租户规格不足以承载业务 | aliyun OceanBasePro DescribeTenant --InstanceId <id> --TenantId <tid> |
| 租户资源风险 | MemStore内存不足 | 🟡中危 | 内存不足影响切换和性能 | aliyun OceanBasePro DescribeInstance --InstanceId <id> |
| 租户资源风险 | CPU资源不足 | 🟡中危 | CPU不足影响切换后性能 | aliyun OceanBasePro DescribeInstance --InstanceId <id> |
| 租户资源风险 | 资源配额超限 | 🔴高危 | 租户资源超限导致操作失败 | aliyun OceanBasePro DescribeTenant --InstanceId <id> --TenantId <tid> |
| OBProxy风险 | 路由缓存延迟 | 🟡中危 | OBProxy路由更新延迟导致连接错误 | OBProxy监控日志(obproxy.log查看路由刷新时间) |
| OBProxy风险 | Service Name配置错误 | 🔴高危 | Service Name配置错误导致路由失败 | 应用配置文件检查(jdbc_url中cluster_name参数) |
| OBProxy风险 | OB_NOT_PRIMARY_TENANT错误 | 🔴高危 | 路由到错误节点返回错误码 | 应用日志检查(错误码-4782) |
| 数据一致性风险 | GTS服务异常 | 🟡中危 | 全局时间戳服务异常影响事务 | aliyun OceanBasePro DescribeInstance --InstanceId <id> |
| 数据一致性风险 | 跨分区事务风险 | 🟡中危 | 多分区事务在切换中可能不一致 | 应用事务日志检查 |
| 数据一致性风险 | standby延迟过大 | 🔴高危 | 备租户同步延迟过大导致数据丢失 | OCP控制台租户管理查看Standby延迟或SQL查询 SELECT * FROM oceanbase.CDB_OB_LS_REPLICATION_PROGRESS |
| 连接风险 | 虚拟IP变更(~30秒) | 🟡中危 | 切换导致虚拟IP变更,约30秒中断 | 应用日志检查或 OBProxy监控日志 |
| 连接风险 | 会话粘性配置冲突 | 🟡中危 | cached_server与primary_zone配置冲突 | OBProxy配置文件检查(obproxy_config.bin) |
| 性能风险 | 切换后性能抖动 | 🟡中危 | 切换后延迟抖动、吞吐下降 | aliyun OceanBasePro DescribeInstance --InstanceId <id> |
| 性能风险 | 后台任务冲突 | 🟡中危 | compaction/merge与切换冲突 | OCP控制台任务管理查看正在执行的后台任务 |
| 版本风险 | 主备版本不一致 | 🔴高危 | 主备集群版本不一致导致切换失败 | aliyun OceanBasePro DescribeInstance --InstanceId <id> 查看EngineVersion |
| 版本风险 | OMS迁移版本兼容 | 🟡中危 | OMS特定版本存在迁移风险 | OMS控制台查看迁移任务版本信息 |
4.2 风险详细说明与检查命令
Paxos选举风险详解
Paxos多数副本风险:
CODE
┌─────────────────────────────────────────────────────────────────────────────┐
│ OceanBase Paxos 多数副本风险 │
├─────────────────────────────────────────────────────────────────────────────┤
│ │
│ 【3副本架构】 │
│ │
│ Zone-1 Zone-2 Zone-3 │
│ ┌──────┐ ┌──────┐ ┌──────┐ │
│ │Leader│◄──Paxos──►│ F1 │◄──Paxos──►│ F2 │ │
│ └──────┘ └──────┘ └──────┘ │
│ │
│ 可容忍故障:1个Zone故障,仍可选举(2/3多数) │
│ │
│ ───────────────────────────────────────────────────────────────────────── │
│ │
│ 【2F1A架构(2副本+仲裁)】 │
│ │
│ Zone-1 Zone-2 仲裁节点 │
│ ┌──────┐ ┌──────┐ ┌──────┐ │
│ │Leader│◄──Paxos──►│ F1 │◄──Paxos──►│仲裁 │ │
│ └──────┘ └──────┘ └──────┘ │
│ │
│ 可容忍故障:1个Zone故障 + 仲裁节点可用 │
│ 风险:仲裁节点不可用时无法切换 │
│ │
│ 关键参数: │
│ - lease_time: 默认10秒,故障判定时间 │
│ - server_check_interval: 默认30秒,心跳检查间隔 │
│ │
└─────────────────────────────────────────────────────────────────────────────┘
检查命令:
BASH
# 1. 检查集群状态
aliyun OceanBasePro DescribeInstance --InstanceId <id>
# 风险检查点:
# - InstanceStatus: 必须为 "running"
# - 集群版本信息
# 2. 检查租户信息
aliyun OceanBasePro DescribeTenants --InstanceId <id>
# 风险检查点:
# - 租户列表和状态
# - 租户类型(Primary/Standby)
# 3. 检查租户详细状态
aliyun OceanBasePro DescribeTenant --InstanceId <id> --TenantId <tid>
# 集群检查点:
# - TenantRole: Primary 或 Standby
# - PrimaryZone: 主可用区配置
# - 资源配置
# 4. 检查集群拓扑
aliyun OceanBasePro DescribeInstanceTopology --InstanceId <id>
# 风险检查点:
# - Zone分布
# - 副本类型
# - 节点状态
# 5. 检查资源使用
aliyun OceanBasePro DescribeInstance --InstanceId <id>
# 风险检查点:
# - CPU使用率
# - 内存使用率
# - 存储使用率
租户资源风险详解
资源风险矩阵:
| 资源类型 | 风险阈值 | 影响 | 检查项 |
|---|---|---|---|
| MemStore | > 80% | 写入阻塞 | 活跃内存使用 |
| CPU | > 80% | 性能下降 | CPU使用率 |
| 磁盘 | > 80% | 空间不足 | 存储使用率 |
| 连接数 | > 90% | 新连接失败 | 活跃会话数 |
备租户规格风险:
- 切换后备租户变为主租户
- 若规格不足可能导致性能严重下降
- 需要确保主备租户规格一致
OBProxy路由风险详解
路由错误码:
| 错误码 | 含义 | 处置 |
|---|---|---|
| OB_NOT_PRIMARY_TENANT (-4782) | 路由到非主租户 | 刷新路由缓存 |
| OB_SERVICE_NAME_NOT_FOUND (-4780) | Service Name不存在 | 检查配置 |
路由缓存机制:
- ODP优先使用本地缓存
- 切换后需要刷新缓存
- 默认15秒拉取一次路由信息
4.3 风险检查完整清单
切换前必查项
BASH
#!/bin/bash
# OceanBase 切换前风险检查脚本
INSTANCE_ID="your-instance-id"
TENANT_ID="your-tenant-id"
echo "=== OceanBase 切换前风险检查 ==="
# 1. 集群状态检查
echo "[1] 检查集群状态..."
aliyun OceanBasePro DescribeInstance --InstanceId $INSTANCE_ID
# 风险检查:InstanceStatus = "running"
# 2. 租户状态检查
echo "[2] 检查租户状态..."
aliyun OceanBasePro DescribeTenant --InstanceId $INSTANCE_ID --TenantId $TENANT_ID
# 风险检查:租户状态正常
# 3. Zone分布检查
echo "[3] 检查Zone分布..."
aliyun OceanBasePro DescribeInstanceTopology --InstanceId $INSTANCE_ID
# 风险检查:Zone分布合理,多数副本可达
# 4. 备租户资源检查(关键!)
echo "[4] 检查备租户资源..."
aliyun OceanBasePro DescribeTenant --InstanceId <备集群id> --TenantId $TENANT_ID
# 风险检查:资源规格充足
# 5. 资源使用检查
echo "[5] 检查资源使用..."
aliyun OceanBasePro DescribeInstance --InstanceId $INSTANCE_ID
# 风险检查:CPU、内存、存储使用率正常
# 6. standby延迟检查
echo "[6] 检查standby延迟..."
# 通过OCP控制台或SQL查询
echo "=== 检查完成 ==="
| 序号 | 检查项 | CLI命令 | 预期结果 | 风险等级 |
|---|---|---|---|---|
| 1 | 集群状态 | aliyun OceanBasePro DescribeInstance --InstanceId <id> | InstanceStatus=running | 🔴必须通过 |
| 2 | 租户状态 | aliyun OceanBasePro DescribeTenant --InstanceId <id> --TenantId <tid> | TenantStatus正常 | 🔴必须通过 |
| 3 | Zone分布 | aliyun OceanBasePro DescribeInstanceTopology --InstanceId <id> | Zone分布合理 | 🔴必须通过 |
| 4 | 备租户规格 | aliyun OceanBasePro DescribeTenant --InstanceId <备集群id> --TenantId <tid> | 资源规格充足 | 🔴必须通过 |
| 5 | 资源使用率 | aliyun OceanBasePro DescribeInstance --InstanceId <id> | CPU/内存/存储<80% | 🟡建议通过 |
| 6 | standby延迟 | OCP控制台/SQL查询 | < 5秒 | 🔴必须通过 |
| 7 | OBProxy状态 | OBProxy集群监控(或 aliyun OceanBasePro DescribeInstance --InstanceId <id> 间接检查) | 正常 | 🔴必须通过 |
| 8 | 版本一致性 | aliyun OceanBasePro DescribeInstance --InstanceId <id> | 主备版本一致 | 🔴必须通过 |
| 9 | Service Name配置 | 应用配置文件检查(jdbc_url中cluster_name) | 正确 | 🔴必须通过 |
切换后必查项
| 序号 | 检查项 | CLI命令 | 预期结果 | 风险等级 |
|---|---|---|---|---|
| 1 | 集群状态 | aliyun OceanBasePro DescribeInstance --InstanceId <id> | InstanceStatus=running | 🔴必须通过 |
| 2 | 租户角色 | aliyun OceanBasePro DescribeTenant --InstanceId <id> --TenantId <tid> | TenantRole=Primary | 🔴必须通过 |
| 3 | 数据一致性 | SQL校验(SELECT COUNT(*) FROM 关键表 对比主备) | 数据一致 | 🔴必须通过 |
| 4 | OBProxy路由 | OBProxy监控日志(obproxy.log) | 路由正确 | 🔴必须通过 |
| 5 | 应用连接 | 应用日志检查 | 连接正常 | 🔴必须通过 |
| 6 | 性能指标 | aliyun OceanBasePro DescribeInstance --InstanceId <id> | 性能正常 | 🟡建议通过 |
5. HBase 风险洞察
5.1 核心风险矩阵
| 风险类别 | 风险项 | 风险等级 | 风险描述 | CLI检查命令 |
|---|---|---|---|---|
| WAL同步风险 | WAL未及时同步 | 🔴高危 | WAL日志未同步到备集群,切换后数据丢失 | BDS控制台查看WAL同步延迟 |
| WAL同步风险 | WAL日志超期删除 | 🔴高危 | 未消费WAL超过48小时被删除(默认) | BDS控制台查看未消费日志时间 |
| WAL同步风险 | BulkLoad不同步 | 🔴高危 | BulkLoad导入的数据不会被LTS同步 | 应用代码审查(检查是否使用BulkLoad导入,需单独同步) |
| WAL同步风险 | 未写WAL的数据 | 🔴高危 | 不写WAL的数据不会被同步 | 应用写入配置检查(确认WriteToWAL=true) |
| 同步延迟风险 | 增量同步延迟过大 | 🔴高危 | 异步复制延迟可能从几分钟到几小时 | BDS控制台查看增量同步延迟 |
| 同步延迟风险 | 历史数据同步未完成 | 🔴高危 | 历史迁移任务未完成,切换后数据缺失 | BDS控制台查看迁移任务状态 |
| 同步延迟风险 | 同步链路异常 | 🔴高危 | BDS服务异常导致同步中断 | BDS控制台查看服务状态 |
| 数据一致性风险 | 最终一致性丢失 | 🔴高危 | 异步复制导致切换时可能丢失数据 | BDS控制台查看同步延迟 |
| 数据一致性风险 | 双写风险 | 🔴高危 | 切换过程中可能同时写入两个集群 | 应用配置检查(确认haclient.enable=true且只有一个Active集群) |
| 客户端风险 | haclient配置错误 | 🔴高危 | 高可用集群ID配置错误导致无法切换 | 应用配置文件检查(haclient.cluster.id参数) |
| 客户端风险 | 客户端版本不兼容 | 🔴高危 | 客户端与服务端版本不匹配 | aliyun hbase DescribeInstance --ClusterId <id> 对比服务端与客户端版本 |
| 客户端风险 | Meta缓存指向错误 | 🟡中危 | 客户端Meta缓存指向旧集群 | 应用日志检查(建议配置meta.update.interval) |
| Phoenix风险 | Phoenix索引不一致 | 🔴高危 | 索引与主表数据不一致 | Phoenix SQL: SELECT COUNT(*) FROM 索引表 对比主表 |
| Phoenix风险 | Phoenix索引重建成本高 | 🟡中危 | 大表索引重建时间长 | Phoenix SQL: SELECT COUNT(*) FROM 主表 评估表规模 |
| Phoenix风险 | Coprocessor JAR缺失 | 🔴高危 | 目标集群未安装必需的JAR | HDFS检查目标集群 /hbase/lib/ 目录下的Coprocessor JAR |
| Solr风险 | Solr索引不同步 | 🔴高危 | Solr索引需要单独处理 | Solr Admin UI查看索引状态或 curl http://<solr-host>:8983/solr/admin/collections |
| Solr风险 | Solr索引重建 | 🟡中危 | 切换后可能需要重建索引 | Solr Admin UI查看索引文档数量 |
| Region风险 | Region分布不均 | 🟡中危 | Region分布不均影响切换后性能 | HBase Shell: status 'detailed' |
| Region风险 | RegionServer状态异常 | 🔴高危 | RegionServer异常影响切换 | aliyun hbase DescribeInstance --ClusterId <id> |
| 存储风险 | 目标HDFS空间不足 | 🔴高危 | 目标集群存储空间不足导致同步失败 | aliyun hbase DescribeInstance --ClusterId <id> 查看存储 |
| 存储风险 | hbase.master.logcleaner.ttl过小 | 🔴高危 | 日志保留时间不足导致同步失败(需>12h) | Ambari/控制台查看hbase.master.logcleaner.ttl配置值 |
| 网络风险 | VPC不一致 | 🔴高危 | 主备集群VPC不同无法同步 | aliyun hbase DescribeInstance --ClusterId <id> 查看VpcId |
| 网络风险 | 跨AZ网络延迟 | 🟡中危 | 跨可用区部署增加同步延迟 | ping/iperf3测试主备集群间网络延迟 |
| 监控风险 | WAL延迟无告警 | 🟡中危 | WAL延迟过高无告警 | aliyun cms DescribeAlertRules --Namespace acs_hbase --NamePrefix wal |
| 监控风险 | BDS任务状态无监控 | 🟡中危 | BDS任务异常无告警 | BDS控制台告警配置页面检查告警规则 |
5.2 风险详细说明与检查命令
WAL同步风险详解
WAL同步风险链路:
CODE
┌─────────────────────────────────────────────────────────────────────────────┐
│ HBase WAL 同步风险链路 │
├─────────────────────────────────────────────────────────────────────────────┤
│ │
│ Client ──写入──> 主集群 ──写入WAL──> WAL文件 │
│ │ │
│ ▼ │
│ [立即返回成功] │
│ │ │
│ ▼ │
│ BDS通道 ──异步传输──> 备集群 │
│ │ │
│ ▼ │
│ [WAL堆积窗口] ← 未同步WAL │
│ │ │
│ ┌─────▼─────┐ │
│ │ 主集群宕机 │ │
│ └─────▼─────┐ │
│ │ │
│ ┌─────▼─────┐ │
│ │ 数据丢失窗口│ ← 堆积WAL永久丢失 │
│ └───────────┘ │
│ │
│ 关键风险点: │
│ - BulkLoad导入数据不同步 │
│ - 未写WAL的数据不同步 │
│ - 未消费WAL超过48小时被删除 │
│ - hbase.master.logcleaner.ttl必须 > 12小时 │
│ │
└─────────────────────────────────────────────────────────────────────────────┘
LTS/BDS关键配置风险:
| 配置项 | 要求 | 风险 | 默认值 |
|---|---|---|---|
| hbase.master.logcleaner.ttl | > 12小时 | 配置过小导致日志被清理 | - |
| LTS未消费日志保留 | 48小时 | 超期删除,数据丢失 | 48小时 |
| REPLICATION_SCOPE | = 1 | 不设置则不同步 | 0 |
| hbase.replication (1.x) | = true | 不开启则不复制 | false(1.x) |
检查命令:
BASH
# 1. 检查主集群状态
aliyun hbase DescribeInstance --ClusterId <主集群id>
# 风险检查点:
# - Status: 必须为 "Running"
# - 版本信息
# 2. 检查备集群状态
aliyun hbase DescribeInstance --ClusterId <备集群id>
# 风险检查点:
# - Status: 必须为 "Running"
# 3. 检查实例配置
aliyun hbase DescribeInstance --ClusterId <id>
# 风险检查点:
# - VpcId: 主备VPC必须一致
# - ZoneId: 可用区分布
# - 存储空间
# 以下需要通过BDS控制台或HBase Shell检查:
# - BDS服务状态
# - 增量同步延迟
# - 历史数据同步进度
# - WAL未消费时间
数据一致性风险详解
最终一致性风险矩阵:
| 同步延迟 | 数据丢失风险 | 切换建议 |
|---|---|---|
| < 1分钟 | 低 | 可以切换 |
| 1-10分钟 | 中 | 评估后切换 |
| 10-30分钟 | 较高 | 谨慎切换 |
| > 30分钟 | 高 | 不建议切换 |
| > 1小时 | 极高 | 禁止切换 |
双写风险:
- 触发条件:切换过程中客户端同时写入两个集群
- 后果:数据不一致,需要人工修复
- 预防:使用haclient配置,确保客户端自动感知Active状态
Phoenix/Solr风险详解
服务同步范围:
| 服务 | BDS同步范围 | 切换风险 | 处置方案 |
|---|---|---|---|
| HBase数据 | ✓ 同步 | 延迟丢失风险 | 监控延迟 |
| Phoenix索引 | ✗ 不同步 | 需要重建 | 切换后重建 |
| Solr索引 | ✗ 不同步 | 需要重建 | 切换后重建 |
| Coprocessor | ✗ 不同步 | 功能缺失 | 安装JAR |
5.3 风险检查完整清单
切换前必查项
BASH
#!/bin/bash
# HBase 切换前风险检查脚本
PRIMARY_CLUSTER_ID="primary-cluster-id"
STANDBY_CLUSTER_ID="standby-cluster-id"
echo "=== HBase 切换前风险检查 ==="
# 1. 主集群状态检查
echo "[1] 检查主集群状态..."
aliyun hbase DescribeInstance --ClusterId $PRIMARY_CLUSTER_ID
# 风险检查:Status = "Running"
# 2. 备集群状态检查
echo "[2] 检查备集群状态..."
aliyun hbase DescribeInstance --ClusterId $STANDBY_CLUSTER_ID
# 风险检查:Status = "Running"
# 3. VPC一致性检查(关键!)
echo "[3] 检查VPC一致性..."
# 风险检查:主备VpcId必须相同
# 4. 存储空间检查
echo "[4] 检查存储空间..."
aliyun hbase DescribeInstance --ClusterId $STANDBY_CLUSTER_ID
# 风险检查:备集群存储空间充足
# 以下需要通过BDS控制台检查:
echo "[5-9] 需要在BDS控制台检查以下项目..."
# 5. BDS服务状态
echo "[5] 检查BDS服务状态..."
# 6. 增量同步延迟(关键!)
echo "[6] 检查增量同步延迟..."
# 7. 历史数据同步进度(关键!)
echo "[7] 检查历史数据同步进度..."
# 8. WAL未消费时间
echo "[8] 检查WAL未消费时间..."
# 9. 客户端配置检查
echo "[9] 检查客户端haclient.cluster.id配置..."
echo "=== 检查完成 ==="
| 序号 | 检查项 | CLI命令/检查方式 | 预期结果 | 风险等级 |
|---|---|---|---|---|
| 1 | 主集群状态 | aliyun hbase DescribeInstance --ClusterId <主集群id> | Status=Running | 🔴必须通过 |
| 2 | 备集群状态 | aliyun hbase DescribeInstance --ClusterId <备集群id> | Status=Running | 🔴必须通过 |
| 3 | VPC一致性 | aliyun hbase DescribeInstance --ClusterId <id>(对比VpcId) | 主备VpcId相同 | 🔴必须通过 |
| 4 | BDS服务状态 | BDS控制台查看服务状态 | 服务正常 | 🔴必须通过 |
| 5 | 增量同步延迟 | BDS控制台查看增量同步延迟 | < 30秒 | 🔴必须通过 |
| 6 | 历史数据同步进度 | BDS控制台查看迁移任务状态 | 已完成 | 🔴必须通过 |
| 7 | WAL未消费时间 | BDS控制台查看未消费日志时间 | < 48小时 | 🔴必须通过 |
| 8 | 备集群存储空间 | aliyun hbase DescribeInstance --ClusterId <备集群id> | 存储充足(<80%) | 🔴必须通过 |
| 9 | hbase.master.logcleaner.ttl | HBase配置参数检查(Ambari/控制台) | > 12小时 | 🔴必须通过 |
| 10 | haclient.cluster.id | 应用配置文件检查 | 配置正确 | 🔴必须通过 |
| 11 | 客户端版本 | aliyun hbase DescribeInstance --ClusterId <id>(对比版本) | 与服务端匹配 | 🔴必须通过 |
| 12 | 白名单配置 | aliyun hbase DescribeInstance --ClusterId <id> | 包含客户端IP | 🟡建议通过 |
| 13 | Region分布 | HBase Shell: status 'detailed' | 均匀分布 | 🟡建议通过 |
切换后必查项
| 序号 | 检查项 | CLI命令/检查方式 | 预期结果 | 风险等级 |
|---|---|---|---|---|
| 1 | 集群状态 | aliyun hbase DescribeInstance --ClusterId <id> | Status=Running | 🔴必须通过 |
| 2 | Active状态变更 | BDS控制台查看集群角色 | 已变更 | 🔴必须通过 |
| 3 | 反向同步链路 | BDS控制台查看同步链路状态 | 正常 | 🔴必须通过 |
| 4 | 客户端连接 | 应用日志检查 | 已切换到新主 | 🔴必须通过 |
| 5 | 读写测试 | HBase Shell/API测试 | 正常 | 🔴必须通过 |
| 6 | 数据完整性 | 抽样校验(RowKey对比) | 数据一致 | 🔴必须通过 |
| 7 | Phoenix索引(如有) | Phoenix SQL测试 | 正常 | 🟡建议通过 |
| 8 | Solr索引(如有) | Solr搜索测试 | 正常 | 🟡建议通过 |
CLI命令速查表
全量CLI命令汇总
| 产品 | 检查项 | CLI命令 |
|---|---|---|
| Redis | 实例状态 | aliyun r-kvstore DescribeInstanceAttribute --InstanceId <id> |
| Redis | 节点角色 | aliyun r-kvstore DescribeRoleZoneInfo --InstanceId <id> |
| Redis | 复制状态 | aliyun r-kvstore DescribeLogicInstanceTopology --InstanceId <id> |
| Redis | 性能指标 | aliyun r-kvstore DescribeHistoryMonitorValues --InstanceId <id> |
| Redis | 切换事件 | aliyun r-kvstore DescribeHistoryEvents --InstanceId <id> |
| RDS | 实例状态 | aliyun rds DescribeDBInstanceAttribute --DBInstanceId <id> |
| RDS | 主备延迟 | aliyun rds DescribeDBInstancePerformance --DBInstanceId <id> --Key MySQL_DataDelay |
| RDS | 只读实例 | aliyun rds DescribeReadOnlyDBInstances --DBInstanceId <id> |
| RDS | HA配置 | aliyun rds DescribeHASwitchConfig --DBInstanceId <id> |
| RDS | 性能指标 | aliyun rds DescribeDBInstancePerformance --DBInstanceId <id> |
| PolarDB | 集群状态 | aliyun polardb DescribeDBClusters --DBClusterId <id> |
| PolarDB | 连接地址 | aliyun polardb DescribeDBClusterEndpoints --DBClusterId <id> |
| PolarDB | 性能指标 | aliyun polardb DescribeDBClusterPerformance --DBClusterId <id> |
| OceanBase | 集群状态 | aliyun OceanBasePro DescribeInstance --InstanceId <id> |
| OceanBase | 租户状态 | aliyun OceanBasePro DescribeTenant --InstanceId <id> --TenantId <tid> |
| OceanBase | 集群拓扑 | aliyun OceanBasePro DescribeInstanceTopology --InstanceId <id> |
| OceanBase | 租户列表 | aliyun OceanBasePro DescribeTenants --InstanceId <id> |
| HBase | 实例状态 | aliyun hbase DescribeInstance --ClusterId <id> |
| 通用 | Redis告警规则 | aliyun cms DescribeAlertRules --Namespace acs_r-kvstore |
| 通用 | RDS告警规则 | aliyun cms DescribeAlertRules --Namespace acs_rds |
| 通用 | PolarDB告警规则 | aliyun cms DescribeAlertRules --Namespace acs_polardb |
| 通用 | HBase告警规则 | aliyun cms DescribeAlertRules --Namespace acs_hbase |
风险对比与选型建议
核心风险指标对比
| 风险维度 | Redis | RDS | PolarDB | OceanBase | HBase |
|---|---|---|---|---|---|
| 数据丢失风险 | 高(异步) | 中(半同步可选) | 低(物理复制) | 最低(Paxos) | 高(最终一致) |
| 切换时间风险 | 中(~30秒) | 中(~15秒) | 低(5-10秒热备) | 低(<8秒) | 中(~30秒) |
| 同步延迟风险 | 高 | 中 | 低 | 低 | 高 |
| 连接风险 | 中 | 中 | 中 | 中 | 高 |
| 配置风险 | 中 | 中 | 中 | 高 | 高 |
| 监控风险 | 中 | 中 | 中 | 中 | 高 |
| 整体风险等级 | 🟡中高 | 🟡中 | 🟢低 | 🟢最低 | 🟡中高 |
产品选型风险建议
| 业务场景 | 推荐产品 | 关键理由 | 主要风险点 |
|---|---|---|---|
| 金融核心交易 | OceanBase | RPO=0,Paxos强一致 | Zone分布、资源规格 |
| 高吞吐读写 | PolarDB | 物理复制低延迟,热备快速切换 | 热备配置、VDS状态 |
| 传统业务数据库 | RDS | 成本适中,半同步保证 | 复制延迟、Druid版本 |
| 缓存场景 | Redis | 高性能 | 异步复制、脑裂风险 |
| 大数据存储 | HBase | 海量数据支持 | WAL同步、最终一致性 |
风险处置速查表
| 风险现象 | 可能产品 | 检查命令 | 处置建议 |
|---|---|---|---|
| 复制延迟过大 | 全部 | 各产品延迟检查命令 | 等待延迟恢复或减少写入压力 |
| 切换后连接失败 | 全部 | 实例状态检查 | 检查新主节点状态 |
| 数据丢失报警 | Redis/HBase | 复制状态检查 | 评估丢失范围,数据修复 |
| 只读实例异常 | RDS/PolarDB | 只读实例状态检查 | 等待复制链路恢复 |
| 脑裂风险 | Redis | 节点角色检查 | 配置min-slaves参数 |
| WAL堆积 | HBase | BDS监控 | 检查同步链路 |
| VDS异常 | PolarDB | VDS状态检查 | 检查VDS服务 |
| Zone不可达 | OceanBase | 拓扑检查 | 恢复Zone或手动切换 |
附录
A. 监控告警配置建议
| 产品 | 监控指标 | 建议阈值 | 告警级别 |
|---|---|---|---|
| Redis | 复制延迟 | > 5秒 | 警告 |
| Redis | 内存使用率 | > 80% | 警告 |
| Redis | 连接数使用率 | > 90% | 警告 |
| RDS | Seconds_Behind_Master | > 5秒 | 警告 |
| RDS | CPU使用率 | > 80% | 警告 |
| RDS | 存储使用率 | > 80% | 警告 |
| PolarDB | 切换时间 | > 30秒(热备>10秒) | 严重 |
| PolarDB | 存储使用率 | > 80% | 警告 |
| OceanBase | standby延迟 | > 5秒 | 警告 |
| OceanBase | MemStore使用率 | > 80% | 警告 |
| HBase | WAL延迟 | > 60秒 | 严重 |
| HBase | BDS任务状态 | 异常 | 严重 |
B. 相关文档链接
本文档由阿里云技术团队整理,如有疑问请联系技术支持。
文档版本历史
| 版本 | 日期 | 更新内容 |
|---|---|---|
| v1.0 | 2026-03-29 | 初始版本 |
| v2.0 | 2026-03-29 | 重构为纯风险洞察,大幅扩展风险项,删除切换操作内容 |
| v2.1 | 2026-03-29 | 完善CLI命令,统一检查方式格式 |