风哥教程参考DB2官方文档HADR、Disaster Recovery等内容,详细介绍容灾切换自动化、切换脚本、自动化流程等。更多视频教程www.fgedu.net.cn
目录大纲
Part01-容灾切换自动化概述
1.1 自动化切换优势
自动化切换优势:
- 快速响应:减少切换时间
- 减少错误:避免人为错误
- 可重复:标准化流程
- 可审计:完整记录
1.2 自动化内容
- 健康检查
- 故障检测
- 自动切换
- 服务验证
- 告警通知
Part02-切换脚本开发
2.1 健康检查脚本
# health_check.sh
DBNAME=FGEDB
PRIMARY_HOST=192.168.1.10
STANDBY_HOST=192.168.1.11
check_hadr_status() {
local host=$1
ssh db2inst1@$host “db2pd -db $DBNAME -hadr” | grep “HADR_STATE”
}
check_db_connection() {
local host=$1
db2 connect to $DBNAME user db2inst1 using password
if [ $? -eq 0 ]; then
echo “Connection to $host successful”
db2 connect reset
return 0
else
echo “Connection to $host failed”
return 1
fi
}
echo “=== Health Check ===”
echo “Primary HADR Status:”
check_hadr_status $PRIMARY_HOST
echo “Standby HADR Status:”
check_hadr_status $STANDBY_HOST
echo “Primary Connection:”
check_db_connection $PRIMARY_HOST
echo “Standby Connection:”
check_db_connection $STANDBY_HOST
2.2 自动切换脚本
# auto_failover.sh
DBNAME=FGEDB
STANDBY_HOST=192.168.1.11
LOG_FILE=/var/log/db2_failover.log
log_message() {
echo “$(date ‘+%Y-%m-%d %H:%M:%S’) – $1” | tee -a $LOG_FILE
}
execute_failover() {
log_message “Starting failover to $STANDBY_HOST”
ssh db2inst1@$STANDBY_HOST “db2 takeover hadr on database $DBNAME by force”
if [ $? -eq 0 ]; then
log_message “Failover completed successfully”
verify_service
else
log_message “Failover failed”
send_alert “Failover failed”
fi
}
verify_service() {
log_message “Verifying service…”
db2 connect to $DBNAME user db2inst1 using password
if [ $? -eq 0 ]; then
log_message “Service verification successful”
db2 connect reset
send_alert “Failover completed successfully”
else
log_message “Service verification failed”
send_alert “Service verification failed”
fi
}
send_alert() {
local message=$1
echo “$message” | mail -s “DB2 Failover Alert” dba@company.com
}
execute_failover
Part03-自动化流程
3.1 监控脚本
# monitor_hadr.sh
DBNAME=FGEDB
PRIMARY_HOST=192.168.1.10
STANDBY_HOST=192.168.1.11
LOG_FILE=/var/log/db2_hadr_monitor.log
log_message() {
echo “$(date ‘+%Y-%m-%d %H:%M:%S’) – $1” >> $LOG_FILE
}
check_primary() {
local status=$(ssh db2inst1@$PRIMARY_HOST “db2pd -db $DBNAME -hadr” | grep “HADR_STATE” | awk ‘{print $3}’)
if [ “$status” != “PEER” ]; then
log_message “Primary HADR status abnormal: $status”
return 1
fi
return 0
}
check_standby() {
local status=$(ssh db2inst1@$STANDBY_HOST “db2pd -db $DBNAME -hadr” | grep “HADR_STATE” | awk ‘{print $3}’)
if [ “$status” != “PEER” ]; then
log_message “Standby HADR status abnormal: $status”
return 1
fi
return 0
}
while true; do
if ! check_primary; then
if ! check_standby; then
log_message “Both primary and standby are down”
/opt/db2/scripts/auto_failover.sh
fi
fi
sleep 60
done
3.2 切换流程
1. 检测主库故障
2. 验证备库状态
3. 执行切换操作
4. 验证服务状态
5. 更新DNS配置
6. 发送告警通知
7. 记录切换日志
Part04-监控告警
4.1 监控指标
db2pd -db FGEDB -hadr
# 连接监控
db2 connect to FGEDB
# 日志监控
db2pd -db FGEDB -logs
4.2 告警配置
send_alert() {
local message=$1
echo “$message” | mail -s “DB2 Alert” dba@company.com
}
# 短信告警
send_sms() {
local message=$1
curl -X POST “http://sms.api/send” -d “phone=13800138000&message=$message”
}
Part05-风哥经验总结与分享
5.1 容灾切换自动化要点
- 建立完善的监控体系
- 开发可靠的切换脚本
- 定期测试切换流程
- 建立告警机制
- 记录完整日志
- 持续优化改进
5.2 自动化建议
| 自动化内容 | 触发条件 | 执行频率 |
|---|---|---|
| 健康检查 | 定时 | 每分钟 |
| 故障检测 | 异常 | 实时 |
| 自动切换 | 故障 | 立即 |
5.3 运维要点
- 定期测试切换脚本
- 定期演练切换流程
- 监控切换执行
- 处理异常情况
- 优化切换时间
- 持续优化改进
学习交流加群风哥微信:itpux-com
风哥Oracle/MySQL/PostgreSQL/Greenplum/DB2/Redis等数据库培训课程,10年一线实战经验,企业级培训,真正掌握数据库核心技术!
本文由风哥教程整理发布,仅用于学习测试使用,转载注明出处:http://www.fgedu.net.cn/10327.html
