You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何在AWS EC2/Lambda/DRS中实现网页健康检查与自动化故障转移?

定制化健康检查+DRS自动故障转移方案

针对你的场景(EC2服务器崩溃/冻结仍返回200、无法使用负载均衡、DNS故障转移不可靠),以下是可行的自动化故障转移方案:

一、业务级深度健康检查脚本

常规HTTP 200检查无法识别"服务器活着但业务瘫痪"的情况,必须做深度检查:

  • 编写脚本同时验证业务接口有效性和服务器资源状态,示例Shell脚本如下:
#!/bin/bash
# 1. 验证业务健康接口的状态和返回内容
HTTP_RESPONSE=$(curl -s -w "%{http_code}" http://localhost/health/check)
HTTP_BODY=$(echo "$HTTP_RESPONSE" | sed -e 's/[0-9]\{3\}$//')
HTTP_CODE=$(echo "$HTTP_RESPONSE" | grep -Eo '[0-9]{3}$')

if [ "$HTTP_CODE" != "200" ] || [[ ! "$HTTP_BODY" =~ "\"status\": \"healthy\"" ]]; then
    exit 1
fi

# 2. 检查15分钟CPU负载阈值(可根据业务调整)
CPU_LOAD=$(uptime | awk -F 'load average:' '{print $2}' | awk -F ',' '{print $3}' | xargs)
if (( $(echo "$CPU_LOAD > 8.0" | bc -l) )); then
    exit 1
fi

# 3. 检查内存使用率阈值
MEM_USAGE=$(free | grep Mem | awk '{print $3/$2 * 100.0}')
if (( $(echo "$MEM_USAGE > 90.0" | bc -l) )); then
    exit 1
fi

# 4. 验证核心业务进程是否存活(以Nginx为例)
if ! pgrep nginx > /dev/null; then
    exit 1
fi

exit 0
  • 把脚本放在EC2实例上,用cron定时执行(比如每分钟一次),执行结果输出到日志文件(如/var/log/health_check.log)。

二、CloudWatch监控与告警

  • 部署CloudWatch Agent到EC2实例,配置收集上述日志文件,创建自定义指标HealthCheckStatus(0=健康,1=故障)。
  • 创建CloudWatch告警规则:当HealthCheckStatus连续3次为1时触发告警(可根据业务容忍度调整次数和频率)。

三、Lambda联动DRS自动故障转移

  • 创建SNS主题,将CloudWatch告警的触发动作关联到该主题。
  • 编写Lambda函数,订阅SNS主题,触发时调用DRS API启动故障转移:
import boto3

def lambda_handler(event, context):
    drs_client = boto3.client('drs')
    # 替换为你的DRS恢复计划ID
    recovery_plan_id = "rp-xxxxxx"
    
    try:
        response = drs_client.start_recovery(
            recoveryPlanID=recovery_plan_id,
            isDrill=False,
            tags={"Trigger": "AutoFailover"}
        )
        print(f"自动故障转移已触发: {response}")
        return {'statusCode': 200, 'body': '故障转移启动成功'}
    except Exception as e:
        print(f"故障转移失败: {str(e)}")
        raise e
  • 给Lambda配置IAM权限:允许调用drs:StartRecovery、drs:GetRecoveryPlan等DRS相关操作,以及必要的日志权限。

四、优化DNS切换可靠性

如果仍需DNS层面的切换,可结合Route 53+CloudWatch指标健康检查:

  • 在Route 53创建健康检查,选择"CloudWatch指标"类型,关联HealthCheckStatus指标,当指标为1时标记实例不健康。
  • 配置主EC2和DRS恢复实例的Route 53加权记录(主记录权重设为100,备记录设为10),当主实例不健康时,Route 53自动将流量导向备实例。
  • 提前给DRS恢复实例分配弹性IP,确保备记录的IP固定。

关键注意事项

  • 务必做故障演练:模拟服务器崩溃、业务进程挂掉等场景,验证健康检查、告警、故障转移的全流程是否正常。
  • 调整阈值:根据业务的资源占用情况,修改脚本中的CPU、内存阈值,避免误触发或漏触发。
  • 权限验证:检查Lambda、CloudWatch Agent、DRS的IAM权限是否完整,避免因权限不足导致流程中断。

内容的提问来源于stack exchange,提问作者Lord Beerus

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.06.28 16:15:28