外观
DB2 HADR 配置与监控
HADR 概述
HADR(High Availability Disaster Recovery)是DB2提供的高可用性和灾难恢复解决方案,通过在主数据库和备用数据库之间实时复制数据,实现数据库的高可用性和灾难恢复能力。HADR可以在数据库级别提供快速故障转移,确保在主数据库发生故障时,备用数据库能够迅速接管,最大限度地减少业务中断时间。
HADR 架构
1. 基本组件
- 主数据库(Primary):处理所有客户端请求,是生产数据库
- 备用数据库(Standby):接收主数据库的日志并应用,保持与主数据库同步
- HADR守护进程:运行在主备数据库上,负责日志传输和应用
- 网络连接:主备数据库之间的通信通道
2. HADR 类型
- 同步模式(SYNC):主数据库等待备用数据库确认日志已写入磁盘后才提交事务
- 近同步模式(NEARSYNC):主数据库等待备用数据库确认日志已收到后才提交事务
- 异步模式(ASYNC):主数据库不等待备用数据库确认,直接提交事务
- 超级异步模式(SUPERASYNC):主数据库以最快速度提交事务,不考虑备用数据库的状态
HADR 配置准备
1. 环境准备
bash
# 检查主备服务器的DB2版本
db2level
# 确保主备服务器的DB2版本相同
db2 get dbm cfg | grep -i release2. 主数据库准备
sql
-- 在主数据库上启用归档日志
db2 update db cfg for sample using LOGARCHMETH1 DISK:/db2/archlog
db2 update db cfg for sample using LOGRETAIN ON
db2 update db cfg for sample using TRACKMOD YES
-- 重启数据库使配置生效
db2stop forced
db2start
-- 备份主数据库
db2 backup database sample to /db2/backup3. 备用数据库准备
sql
-- 在备用服务器上创建相同名称的数据库
db2 create database sample
db2stop forced
-- 从主数据库备份恢复备用数据库
db2 restore database sample from /db2/backup taken at 20231015100000 into sample
-- 启用备用数据库的HADR模式
db2 update db cfg for sample using HADR ON
db2startHADR 配置步骤
1. 主数据库配置
sql
-- 配置主数据库HADR参数
db2 update db cfg for sample using HADR_LOCAL_HOST primary_server
db2 update db cfg for sample using HADR_LOCAL_SVC 50001
db2 update db cfg for sample using HADR_REMOTE_HOST standby_server
db2 update db cfg for sample using HADR_REMOTE_SVC 50001
db2 update db cfg for sample using HADR_REMOTE_INST db2inst1
db2 update db cfg for sample using HADR_TIMEOUT 120
db2 update db cfg for sample using HADR_SYNCMODE NEARSYNC
db2 update db cfg for sample using HADR_PEER_WINDOW 3002. 备用数据库配置
sql
-- 配置备用数据库HADR参数
db2 update db cfg for sample using HADR_LOCAL_HOST standby_server
db2 update db cfg for sample using HADR_LOCAL_SVC 50001
db2 update db cfg for sample using HADR_REMOTE_HOST primary_server
db2 update db cfg for sample using HADR_REMOTE_SVC 50001
db2 update db cfg for sample using HADR_REMOTE_INST db2inst1
db2 update db cfg for sample using HADR_TIMEOUT 120
db2 update db cfg for sample using HADR_SYNCMODE NEARSYNC
db2 update db cfg for sample using HADR_PEER_WINDOW 3003. 启动 HADR
sql
-- 先启动备用数据库的HADR
db2 deactivate db sample
db2 start hadr on db sample as standby
-- 再启动主数据库的HADR
db2 deactivate db sample
db2 start hadr on db sample as primary4. 验证 HADR 状态
sql
-- 检查主数据库HADR状态
db2 get snapshot for database on sample | grep -i hadr
-- 检查备用数据库HADR状态
db2 get snapshot for database on sample | grep -i hadr
-- 使用db2pd命令检查HADR状态
db2pd -db sample -hadrHADR 监控
1. 状态监控
使用快照监控
sql
-- 获取HADR快照
db2 get snapshot for database on sample
-- 只查看HADR相关信息
db2 get snapshot for database on sample | grep -i hadr使用db2pd命令监控
bash
# 查看HADR状态
db2pd -db sample -hadr
# 查看HADR日志应用状态
db2pd -db sample -logs
# 查看HADR延迟
db2pd -db sample -hadr | grep -i lag使用监控视图
sql
-- 查询HADR状态
db2 "SELECT * FROM SYSIBMADM.HADR"
-- 查询HADR历史状态
db2 "SELECT * FROM SYSIBMADM.HISTORY_HADR WHERE DB_NAME = 'SAMPLE' ORDER BY SNAPSHOT_TIMESTAMP DESC"2. 性能监控
日志传输性能
sql
-- 监控日志传输速率
db2 "SELECT
DB_NAME,
SNAPSHOT_TIMESTAMP,
HADR_LOG_GAP_SIZE,
HADR_LOG_SEND_WAIT_TIME,
HADR_LOG_APPLY_WAIT_TIME
FROM
SYSIBMADM.HISTORY_HADR
WHERE
DB_NAME = 'SAMPLE'
ORDER BY
SNAPSHOT_TIMESTAMP DESC"网络性能
bash
# 监控主备服务器之间的网络延迟
ping -c 10 standby_server
# 监控网络带宽使用
iperf3 -c standby_server -t 603. 自动化监控脚本
bash
#!/bin/bash
# DB2 HADR监控脚本
DB_NAME="sample"
LOG_FILE="hadr_monitor.log"
ALERT_EMAIL="dba@example.com"
# 日志函数
log() {
echo "[$(date +'%Y-%m-%d %H:%M:%S')] $1" >> $LOG_FILE
}
# 发送告警邮件
send_alert() {
echo "$1" | mail -s "DB2 HADR告警" $ALERT_EMAIL
}
log "开始HADR监控..."
# 连接数据库
db2 connect to $DB_NAME > /dev/null 2>&1
if [ $? -ne 0 ]; then
log "数据库连接失败"
send_alert "数据库连接失败,无法监控HADR状态"
exit 1
fi
# 获取HADR状态
HADR_STATUS=$(db2 -x "SELECT HADR_ROLE, HADR_STATE FROM SYSIBMADM.HADR WHERE DB_NAME = '$DB_NAME'")
if [ -z "$HADR_STATUS" ]; then
log "未找到HADR配置"
send_alert "数据库 $DB_NAME 未配置HADR"
exit 1
fi
HADR_ROLE=$(echo $HADR_STATUS | awk '{print $1}')
HADR_STATE=$(echo $HADR_STATUS | awk '{print $2}')
log "HADR角色: $HADR_ROLE, 状态: $HADR_STATE"
# 检查HADR状态
if [ "$HADR_STATE" != "PEER" ] && [ "$HADR_STATE" != "CONNECTED" ]; then
ALERT_MSG="HADR状态异常: 角色=$HADR_ROLE, 状态=$HADR_STATE"
log "告警: $ALERT_MSG"
send_alert "$ALERT_MSG"
fi
# 检查日志差距
LOG_GAP=$(db2pd -db $DB_NAME -hadr | grep -i "Log Gap" | awk '{print $3}')
if [ "$LOG_GAP" -gt 100 ]; then
ALERT_MSG="HADR日志差距过大: $LOG_GAP 页"
log "告警: $ALERT_MSG"
send_alert "$ALERT_MSG"
fi
log "HADR监控完成!"HADR 故障转移
1. 手动故障转移
sql
-- 在主数据库上执行故障转移(如果主数据库仍可访问)
db2 takeover hadr on db sample
-- 在备用数据库上执行故障转移(如果主数据库不可访问)
db2 takeover hadr on db sample by force2. 自动故障转移
HADR可以与TSA(Tivoli System Automation)或其他集群管理软件结合,实现自动故障转移。
bash
# 配置TSA自动故障转移
# 1. 安装TSA软件
# 2. 配置TSA域
# 3. 添加DB2资源到TSA
# 4. 配置HADR自动故障转移策略3. 故障转移后处理
sql
-- 故障转移后,原备用数据库变为主数据库
-- 在新的主数据库上更新应用连接配置
-- 重新配置原主数据库为备用数据库
db2 update db cfg for sample using HADR_ROLE STANDBY
db2 start hadr on db sample as standbyHADR 维护
1. 主备切换
sql
-- 手动切换主备角色
db2 takeover hadr on db sample
-- 验证切换后的状态
db2 get snapshot for database on sample | grep -i hadr_role2. 备用数据库升级
bash
# 暂停HADR
db2 stop hadr on db sample
# 在备用数据库上执行升级
db2 upgrade database sample
# 重启HADR
db2 start hadr on db sample as standby
# 执行故障转移
db2 takeover hadr on db sample
# 在原主数据库上执行升级
db2 upgrade database sample
# 重新配置为备用数据库
db2 start hadr on db sample as standby3. 日志清理
bash
# 监控归档日志使用情况
du -sh /db2/archlog/*
# 清理过期的归档日志
find /db2/archlog -name "SAMPLE.*.LOG" -mtime +7 -deleteHADR 监控报告
1. 基本报告
sql
-- 生成HADR状态报告
SELECT
'HADR状态报告' AS REPORT_TITLE,
CURRENT_DATE AS REPORT_DATE,
DB_NAME,
HADR_ROLE,
HADR_STATE,
HADR_SYNCMODE,
HADR_LOG_GAP_SIZE,
HADR_LOG_SEND_WAIT_TIME,
HADR_LOG_APPLY_WAIT_TIME
FROM
SYSIBMADM.HADR
WHERE
DB_NAME = 'SAMPLE';2. 历史趋势报告
sql
-- 生成HADR历史趋势报告
SELECT
'HADR历史趋势报告' AS REPORT_TITLE,
CURRENT_DATE AS REPORT_DATE,
SNAPSHOT_TIMESTAMP,
HADR_ROLE,
HADR_STATE,
HADR_LOG_GAP_SIZE,
HADR_LOG_SEND_WAIT_TIME,
HADR_LOG_APPLY_WAIT_TIME
FROM
SYSIBMADM.HISTORY_HADR
WHERE
DB_NAME = 'SAMPLE'
AND SNAPSHOT_TIMESTAMP >= CURRENT_DATE - 7 DAYS
ORDER BY
SNAPSHOT_TIMESTAMP;3. 自动化报告脚本
bash
#!/bin/bash
# DB2 HADR报告生成脚本
DB_NAME="sample"
REPORT_FILE="hadr_report_$(date +'%Y%m%d').txt"
# 连接数据库
db2 connect to $DB_NAME > /dev/null 2>&1
if [ $? -ne 0 ]; then
echo "数据库连接失败"
exit 1
fi
echo "=========================================" > $REPORT_FILE
echo "DB2 HADR状态报告" >> $REPORT_FILE
echo "报告生成时间:$(date)" >> $REPORT_FILE
echo "数据库名称:$DB_NAME" >> $REPORT_FILE
echo "=========================================" >> $REPORT_FILE
echo "" >> $REPORT_FILE
# 生成HADR基本状态报告
echo "1. HADR基本状态" >> $REPORT_FILE
echo "-----------------------------------------" >> $REPORT_FILE
db2 -x "SELECT
DB_NAME,
HADR_ROLE,
HADR_STATE,
HADR_SYNCMODE,
HADR_LOG_GAP_SIZE AS LOG_GAP,
HADR_LOG_SEND_WAIT_TIME AS SEND_WAIT,
HADR_LOG_APPLY_WAIT_TIME AS APPLY_WAIT
FROM
SYSIBMADM.HADR
WHERE
DB_NAME = '$DB_NAME'" >> $REPORT_FILE
echo "" >> $REPORT_FILE
# 生成HADR详细信息报告
echo "2. HADR详细信息" >> $REPORT_FILE
echo "-----------------------------------------" >> $REPORT_FILE
db2pd -db $DB_NAME -hadr >> $REPORT_FILE
echo "" >> $REPORT_FILE
# 生成HADR历史趋势报告
echo "3. HADR历史趋势(最近24小时)" >> $REPORT_FILE
echo "-----------------------------------------" >> $REPORT_FILE
db2 -x "SELECT
SNAPSHOT_TIMESTAMP,
HADR_STATE,
HADR_LOG_GAP_SIZE
FROM
SYSIBMADM.HISTORY_HADR
WHERE
DB_NAME = '$DB_NAME'
AND SNAPSHOT_TIMESTAMP >= CURRENT_TIMESTAMP - 24 HOURS
ORDER BY
SNAPSHOT_TIMESTAMP" >> $REPORT_FILE
echo "" >> $REPORT_FILE
echo "=========================================" >> $REPORT_FILE
echo "报告生成完成" >> $REPORT_FILE
echo "=========================================" >> $REPORT_FILE
# 发送报告邮件
cat $REPORT_FILE | mail -s "DB2 HADR状态报告 $(date +'%Y-%m-%d')" dba@example.com
echo "报告已生成并发送:$REPORT_FILE"版本差异考虑
| 版本 | HADR 特点 |
|---|---|
| DB2 10.5 | 支持基本的HADR配置,包括同步、近同步、异步和超级异步模式 |
| DB2 11.1 | 增强了HADR功能,支持多个备用数据库,增强了监控能力 |
| DB2 11.5 | 支持HADR只读备用数据库,增强了自动故障转移能力,支持更多的监控指标 |
常见问题及解决方案
1. HADR 连接失败
症状:HADR守护进程无法连接到对方数据库 解决方案:
- 检查网络连接是否正常
- 检查防火墙是否允许HADR端口通信
- 检查主备数据库的HADR配置参数是否正确
- 检查DB2实例是否正在运行
2. HADR 同步延迟过大
症状:备用数据库与主数据库的同步延迟过大 解决方案:
- 检查网络带宽是否足够
- 检查备用数据库的性能是否足够
- 调整HADR同步模式
- 检查主数据库的日志生成速率
3. HADR 状态异常
症状:HADR状态不是PEER或CONNECTED 解决方案:
- 检查主备数据库的日志配置
- 检查HADR守护进程是否正常运行
- 重启HADR服务
- 检查数据库是否有损坏
4. 故障转移失败
症状:执行takeover命令失败 解决方案:
- 检查主数据库是否真的不可用
- 使用force选项执行故障转移
- 检查HADR配置参数
- 检查备用数据库的状态
5. 备用数据库无法应用日志
症状:备用数据库收到日志但无法应用 解决方案:
- 检查备用数据库的存储空间是否足够
- 检查备用数据库的性能是否足够
- 检查日志文件是否损坏
- 重启HADR服务
生产实践
1. 企业级 HADR 配置方案
bash
#!/bin/bash
# 企业级DB2 HADR配置脚本
# 配置文件
CONFIG_FILE="hadr-config.conf"
LOG_FILE="hadr-config.log"
# 加载配置
if [ -f $CONFIG_FILE ]; then
source $CONFIG_FILE
else
echo "配置文件不存在:$CONFIG_FILE"
exit 1
fi
# 日志函数
log() {
echo "[$(date +'%Y-%m-%d %H:%M:%S')] $1" >> $LOG_FILE
}
log "开始HADR配置..."
# 1. 配置主数据库
log "配置主数据库:$PRIMARY_HOST"
ssh $PRIMARY_HOST << 'EOF'
# 启用归档日志
db2 update db cfg for $DB_NAME using LOGARCHMETH1 DISK:$ARCHLOG_PATH
db2 update db cfg for $DB_NAME using LOGRETAIN ON
db2 update db cfg for $DB_NAME using TRACKMOD YES
# 重启数据库
db2stop forced
db2start
# 备份数据库
db2 backup database $DB_NAME to $BACKUP_PATH
EOF
# 2. 配置备用数据库
log "配置备用数据库:$STANDBY_HOST"
ssh $STANDBY_HOST << 'EOF'
# 创建数据库
db2 create database $DB_NAME
db2stop forced
# 恢复数据库
scp $PRIMARY_HOST:$BACKUP_PATH/* $BACKUP_PATH/
db2 restore database $DB_NAME from $BACKUP_PATH taken at $(ls -t $BACKUP_PATH | head -1 | cut -d. -f1) into $DB_NAME
# 启用HADR
db2 update db cfg for $DB_NAME using HADR ON
db2start
EOF
# 3. 配置HADR参数
log "配置HADR参数..."
# 配置主数据库HADR参数
ssh $PRIMARY_HOST << 'EOF'
db2 update db cfg for $DB_NAME using HADR_LOCAL_HOST $PRIMARY_HOST
db2 update db cfg for $DB_NAME using HADR_LOCAL_SVC $HADR_PORT
db2 update db cfg for $DB_NAME using HADR_REMOTE_HOST $STANDBY_HOST
db2 update db cfg for $DB_NAME using HADR_REMOTE_SVC $HADR_PORT
db2 update db cfg for $DB_NAME using HADR_REMOTE_INST $DB2_INSTANCE
db2 update db cfg for $DB_NAME using HADR_TIMEOUT $HADR_TIMEOUT
db2 update db cfg for $DB_NAME using HADR_SYNCMODE $HADR_SYNCMODE
db2 update db cfg for $DB_NAME using HADR_PEER_WINDOW $HADR_PEER_WINDOW
EOF
# 配置备用数据库HADR参数
ssh $STANDBY_HOST << 'EOF'
db2 update db cfg for $DB_NAME using HADR_LOCAL_HOST $STANDBY_HOST
db2 update db cfg for $DB_NAME using HADR_LOCAL_SVC $HADR_PORT
db2 update db cfg for $DB_NAME using HADR_REMOTE_HOST $PRIMARY_HOST
db2 update db cfg for $DB_NAME using HADR_REMOTE_SVC $HADR_PORT
db2 update db cfg for $DB_NAME using HADR_REMOTE_INST $DB2_INSTANCE
db2 update db cfg for $DB_NAME using HADR_TIMEOUT $HADR_TIMEOUT
db2 update db cfg for $DB_NAME using HADR_SYNCMODE $HADR_SYNCMODE
db2 update db cfg for $DB_NAME using HADR_PEER_WINDOW $HADR_PEER_WINDOW
EOF
# 4. 启动HADR
log "启动HADR..."
# 启动备用数据库HADR
ssh $STANDBY_HOST << 'EOF'
db2 deactivate db $DB_NAME
db2 start hadr on db $DB_NAME as standby
EOF
# 启动主数据库HADR
ssh $PRIMARY_HOST << 'EOF'
db2 deactivate db $DB_NAME
db2 start hadr on db $DB_NAME as primary
EOF
# 5. 验证HADR状态
log "验证HADR状态..."
ssh $PRIMARY_HOST "db2pd -db $DB_NAME -hadr" >> $LOG_FILE
ssh $STANDBY_HOST "db2pd -db $DB_NAME -hadr" >> $LOG_FILE
log "HADR配置完成!"2. HADR 监控与告警系统
bash
#!/bin/bash
# 企业级HADR监控与告警系统
# 配置文件
CONFIG_FILE="hadr-monitor.conf"
LOG_FILE="hadr-monitor.log"
# 加载配置
if [ -f $CONFIG_FILE ]; then
source $CONFIG_FILE
else
echo "配置文件不存在:$CONFIG_FILE"
exit 1
fi
# 日志函数
log() {
echo "[$(date +'%Y-%m-%d %H:%M:%S')] $1" >> $LOG_FILE
}
# 告警函数
send_alert() {
local level=$1
local message=$2
log "[$level] $message"
# 发送邮件告警
echo "$message" | mail -s "DB2 HADR告警 - $level" $ALERT_EMAIL
# 如果是严重告警,发送短信
if [ "$level" = "CRITICAL" ]; then
curl -X POST -d "msg=$message" $SMS_API_URL
fi
}
log "启动HADR监控..."
# 遍历所有HADR对
for ((i=0; i<${#HADR_PAIRS[@]}; i++)); do
IFS=':' read -r primary standby db_name <<< "${HADR_PAIRS[$i]}"
log "监控HADR对:$primary:$standby, 数据库:$db_name"
# 检查主数据库HADR状态
primary_status=$(ssh $primary "db2pd -db $db_name -hadr 2>/dev/null")
standby_status=$(ssh $standby "db2pd -db $db_name -hadr 2>/dev/null")
if [ -z "$primary_status" ] || [ -z "$standby_status" ]; then
send_alert "CRITICAL" "无法获取HADR状态:$primary:$standby, 数据库:$db_name"
continue
fi
# 检查主数据库角色和状态
primary_role=$(echo "$primary_status" | grep -i "HADR Role" | awk '{print $3}')
primary_state=$(echo "$primary_status" | grep -i "HADR State" | awk '{print $3}')
# 检查备用数据库角色和状态
standby_role=$(echo "$standby_status" | grep -i "HADR Role" | awk '{print $3}')
standby_state=$(echo "$standby_status" | grep -i "HADR State" | awk '{print $3}')
log "主数据库: 角色=$primary_role, 状态=$primary_state"
log "备用数据库: 角色=$standby_role, 状态=$standby_state"
# 检查HADR状态
if [ "$primary_state" != "PEER" ] && [ "$primary_state" != "CONNECTED" ]; then
send_alert "WARNING" "HADR状态异常: 主数据库=$primary, 角色=$primary_role, 状态=$primary_state"
fi
if [ "$standby_state" != "PEER" ] && [ "$standby_state" != "CONNECTED" ]; then
send_alert "WARNING" "HADR状态异常: 备用数据库=$standby, 角色=$standby_role, 状态=$standby_state"
fi
# 检查日志差距
log_gap=$(echo "$standby_status" | grep -i "Log Gap" | awk '{print $3}')
if [ "$log_gap" -gt $LOG_GAP_THRESHOLD ]; then
send_alert "WARNING" "HADR日志差距过大: $primary:$standby, 数据库:$db_name, 差距=$log_gap 页"
fi
done
log "HADR监控完成!"3. HADR 最佳实践
选择合适的同步模式:根据业务需求选择合适的HADR同步模式
- 对数据一致性要求高的业务使用SYNC或NEARSYNC模式
- 对性能要求高的业务使用ASYNC或SUPERASYNC模式
配置适当的HADR参数:
- HADR_TIMEOUT:根据网络延迟设置适当的超时时间
- HADR_PEER_WINDOW:设置适当的对等窗口大小
- LOGINDEXBUILD:启用日志索引构建,加快故障转移后的恢复速度
定期测试故障转移:
- 每季度至少进行一次故障转移测试
- 测试包括手动故障转移和自动故障转移
- 测试后及时恢复HADR配置
监控HADR状态:
- 实时监控HADR状态和日志差距
- 设置合理的告警阈值
- 定期生成HADR状态报告
备份策略:
- 在主备数据库上都配置定期备份
- 备份文件存储在不同的位置
- 定期测试备份恢复
网络配置:
- 使用专用网络进行HADR通信
- 确保网络带宽足够
- 配置适当的网络延迟
常见问题(FAQ)
Q1: HADR支持哪些同步模式?
A1: HADR支持四种同步模式:
- 同步模式(SYNC):最高数据一致性,最低性能
- 近同步模式(NEARSYNC):较好的数据一致性,较好的性能
- 异步模式(ASYNC):较低的数据一致性,较高的性能
- 超级异步模式(SUPERASYNC):最低的数据一致性,最高的性能
Q2: HADR和PureScale有什么区别?
A2: HADR和PureScale都是DB2的高可用性解决方案,但有以下区别:
- HADR是数据库级别的高可用性,PureScale是实例级别的高可用性
- HADR支持跨数据中心部署,PureScale通常部署在同一个数据中心
- HADR的故障转移时间较长(秒级),PureScale的故障转移时间较短(毫秒级)
- HADR的配置和维护相对简单,PureScale的配置和维护相对复杂
Q3: 如何选择HADR的同步模式?
A3: 选择HADR同步模式应考虑以下因素:
- 业务对数据一致性的要求
- 业务对性能的要求
- 主备数据库之间的网络延迟
- 可接受的数据丢失风险
Q4: HADR支持多个备用数据库吗?
A4: DB2 11.1及以上版本支持多个备用数据库,最多可以配置3个备用数据库。
Q5: 如何监控HADR的性能?
A5: 可以通过以下方式监控HADR的性能:
- 使用db2pd命令查看HADR状态和性能指标
- 使用快照监控HADR性能
- 使用监控视图查询HADR性能数据
- 编写自动化监控脚本
Q6: HADR故障转移后需要做哪些处理?
A6: HADR故障转移后需要做以下处理:
- 更新应用程序的数据库连接配置
- 重新配置原主数据库为备用数据库
- 验证新主数据库的状态
- 监控新主数据库的性能
总结
DB2 HADR是一个强大的高可用性和灾难恢复解决方案,可以帮助企业确保数据库的高可用性和灾难恢复能力。通过正确配置HADR、实施有效的监控策略、定期测试故障转移和遵循最佳实践,企业可以最大限度地减少数据库故障对业务的影响,确保业务的持续运行。HADR的配置和监控是数据库运维的重要组成部分,需要管理员具备丰富的经验和技能,才能确保HADR系统的稳定运行。
