AWS代付、代实名
阿里云国际 | 腾讯云国际

AWS VPC多可用区Keepalived高可用配置实战指南

核心摘要

  • 单可用区辅助IP方案无法满足跨AZ高可用需求,需采用路由表更新机制实现VIP漂移
  • 推荐选择VPC CIDR以外的RFC 1918私有地址作为VIP,避免与本地路由冲突
  • 通过EIP解绑/绑定操作实现面向公网的VIP切换,建议使用独立ENI承载
  • EC2实例需配置关闭源/目的检查并授予路由表和EIP操作的IAM权限

AWS VPC多可用区Keepalived高可用配置实战指南

为什么单可用区方案无法满足高可用需求

在传统的单可用区Keepalived部署中,我们通常使用辅助IP作为VIP。这种方案的局限性在于:辅助IP只能绑定到同一子网的网络接口,而VPC子网创建后无法更改所属可用区。这意味着任何内网IP地址都无法动态跨可用区漂移。

从架构设计角度来看,真正的高可用系统必须能够承受整个可用区故障。因此,我们需要突破本地路由的限制,通过自定义路由条目来实现跨可用区的VIP漂移。

AWS VPC路由机制深度解析

路由表核心特性

理解以下VPC路由特性对于设计跨AZ方案至关重要:

  • 每个子网有且仅有一个关联的路由表
  • 路由表预置目标为VPC CIDR的本地路由,不可修改或删除
  • 路由查找遵循最长前缀匹配(LPM)原则
  • 当添加的路由前缀与VPC CIDR重叠时,仅允许添加与子网CIDR完全相同的前缀

路由条目下一跳类型

在本方案中,我们将使用ENI(弹性网络接口)作为路由条目的下一跳。路由条目的下一跳可通过API或控制台修改,修改后立即生效,这是实现快速故障切换的技术基础。

多可用区VIP漂移方案设计

VIP地址选择策略

基于实践经验,我强烈建议选择VPC CIDR以外的RFC 1918私有地址作为VIP。例如,如果VPC CIDR为10.100.0.0/16,可选择192.168.1.100作为VIP。这样做的优势包括:

  • 避免与VPC本地路由产生冲突
  • 路由条目添加无额外限制
  • 便于统一规划和管理VIP地址池

故障切换流程

当Keepalived集群发生主备切换时,需要完成以下两个关键操作:

  1. 新Master节点内部绑定VIP:由Keepalived原生支持
  2. VPC路由表更新:将VIP路由指向新Master节点的ENI

需要特别注意的是,VPC中可能存在多个路由表,在进行更新时必须同步更新所有需要访问VIP的子网路由表

公网访问的EIP方案

对于需要面向互联网提供服务的场景,我们需要在VIP漂移时增加EIP解绑/绑定操作。为避免影响实例原有的公网IP,建议为节点添加专用ENI来承载作为VIP的EIP。

完整配置实战

环境架构概述

本方案采用最小化验证环境:两台位于不同可用区公有子网的EC2实例运行Keepalived和Nginx,另创建客户端实例用于验证VIP访问。

步骤一:安装必要软件

在两台Keepalived节点上执行以下命令(基于Amazon Linux 2023):

sudo dnf install -y keepalived nginx
sudo systemctl enable keepalived nginx

步骤二:配置IAM权限

为EC2实例的Instance Profile配置以下IAM策略,授予路由表和EIP操作权限:

{
    "Version": "2012-10-17",
    "Statement": [
        {
            "Effect": "Allow",
            "Action": [
                "ec2:ReplaceRoute",
                "ec2:CreateRoute",
                "ec2:DeleteRoute",
                "ec2:DescribeRouteTables",
                "ec2:AssociateAddress",
                "ec2:DisassociateAddress",
                "ec2:DescribeAddresses"
            ],
            "Resource": "*"
        }
    ]
}

IAM角色的信任关系需包含EC2服务:

{
    "Version": "2012-10-17",
    "Statement": [
        {
            "Effect": "Allow",
            "Principal": {
                "Service": "ec2.amazonaws.com"
            },
            "Action": "sts:AssumeRole"
        }
    ]
}

步骤三:配置安全组规则

Keepalived节点间使用VRRP协议通信,这是独立于TCP/UDP的IP协议,协议号为112。需添加以下安全组入站规则:

  • 协议:自定义协议,协议号112
  • 来源:Keepalived节点所在的安全组或CIDR
  • 端口:全部(VRRP不使用端口概念)

同时需放行客户端访问Nginx的HTTP流量(TCP 80端口)。

步骤四:关闭源/目的检查

由于Keepalived节点需要接收发往VIP的流量,必须对实例ENI关闭源/目的检查。在EC2控制台选择实例的网络接口,修改Source/dest. check属性为禁用。

架构设计最佳实践

生产环境建议

  • VIP地址规划:预留专用网段用于VIP分配,建立VIP使用台账
  • 路由表管理:使用标签标识需要更新的路由表,简化脚本逻辑
  • 监控告警:配置CloudWatch监控VIP切换事件和切换耗时
  • 切换脚本健壮性:添加重试机制和错误处理,记录详细日志

性能与可靠性权衡

路由表更新通常在秒级完成,但在极端情况下可能存在短暂的流量中断。对于对切换时间敏感的业务,建议评估使用AWS Global AcceleratorNetwork Load Balancer等托管服务作为替代方案。

需要优化您的 AWS 架构? 如果您正在规划跨可用区高可用架构或需要评估Keepalived与AWS托管负载均衡服务的选型,欢迎联系我们获取专业的架构咨询服务。

点击联系客服Telegram
赞(0)
未经允许不得转载:AWS USDT代付 | Payment 解决方案 » AWS VPC多可用区Keepalived高可用配置实战指南

AWS代付、代充值免实名

联系我们阿里云国际免实名