今天业务咨询了我一个问题,服务器如果断电了,能自动执行备份吗?我的回答是:UPS只是在断电后,给服务器提供一个短暂的电力供应,自动备份是应用层面做的吧,和UPS没多大关系。

后来细想了下,其实可以通过脚本层面去解决这个问题,以下是解决思路:

1. 背景与目标

在服务器环境中,市电断开可能导致数据丢失或业务中断。通过脚本自动检测UPS供电状态,一旦市电断开,立即执行数据备份、告警通知,并在电池剩余时间不足时安全关机,实现完整的容灾闭环。

2. 功能框架

脚本包含五个核心环节:

  • 检测环节:定时查询UPS状态(市电/电池)。
  • 延迟确认环节:连续多次检测确认,避免瞬时波动误判。
  • 备份环节:触发数据库或文件备份任务。
  • 告警环节:发送告警通知(邮件、钉钉、企业微信等)。
  • 关机环节:在电池剩余时间不足时执行安全关机。

3. 检测频率建议

  • 常规场景:30秒~1分钟一次检测。
  • 高敏感场景:10~15秒一次检测。
  • 低敏感场景:2~5分钟一次检测。
  • 延迟确认次数:建议设置为3次,即1.5~3分钟确认市电确实断开。

4. 脚本框架示例(Linux + SNMP UPS)

#!/bin/bash
# UPS自动化容灾脚本框架

UPS_IP="192.168.1.100"
OID_STATUS=".1.3.6.1.4.1.xxx.yyy"   # UPS供电状态OID
OID_RUNTIME=".1.3.6.1.4.1.xxx.zzz"  # UPS剩余时间OID
CHECK_INTERVAL=30
CONFIRM_COUNT=3
LOG_FILE="/var/log/ups_failover.log"
BACKUP_SCRIPT="/usr/local/bin/backup.sh"
ALERT_SCRIPT="/usr/local/bin/send_alert.sh"

log_msg() {
    echo "$(date '+%F %T') $1" >> $LOG_FILE
}

check_ups_status() {
    STATUS=$(snmpget -v2c -c public $UPS_IP $OID_STATUS | awk '{print $NF}')
    echo $STATUS
}

get_runtime() {
    RUNTIME=$(snmpget -v2c -c public $UPS_IP $OID_RUNTIME | awk '{print $NF}')
    echo $RUNTIME
}

do_backup() {
    log_msg "开始执行数据备份任务..."
    $BACKUP_SCRIPT
    log_msg "数据备份任务完成。"
}

send_alert() {
    log_msg "发送告警通知..."
    $ALERT_SCRIPT "UPS进入电池模式,已执行备份任务"
}

safe_shutdown() {
    log_msg "UPS剩余时间不足,执行安全关机..."
    shutdown -h +1 "UPS电池供电,系统即将关机"
}

log_msg "UPS容灾脚本启动。"

while true; do
    FAIL_COUNT=0
    for i in $(seq 1 $CONFIRM_COUNT); do
        STATUS=$(check_ups_status)
        if [ "$STATUS" == "battery" ]; then
            FAIL_COUNT=$((FAIL_COUNT+1))
        fi
        sleep $CHECK_INTERVAL
    done

    if [ $FAIL_COUNT -eq $CONFIRM_COUNT ]; then
        log_msg "市电断开,UPS进入电池模式。"
        do_backup
        send_alert
        RUNTIME=$(get_runtime)
        if [ "$RUNTIME" -lt 30 ]; then
            safe_shutdown
        else
            log_msg "UPS剩余时间约 ${RUNTIME} 分钟,暂不关机。"
        fi
    fi
done

5. 外部脚本说明

  • backup.sh:执行具体的数据备份逻辑(数据库、文件、虚拟机快照)。
  • send_alert.sh:发送告警通知(邮件、钉钉、企业微信)。

6. 总结

该脚本框架实现了自动检测 → 延迟确认 → 数据备份 → 告警通知 → 安全关机的完整闭环,适合在UPS保护的服务器环境中部署,确保在市电断开时数据安全与业务连续性。

Copyright © https://yan-jian.com 2023 all right reserved更新时间: 2025-12-24 17:24:29

results matching ""

    No results matching ""