核心摘要
- 单可用区辅助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集群发生主备切换时,需要完成以下两个关键操作:
- 新Master节点内部绑定VIP:由Keepalived原生支持
- 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 Accelerator或Network Load Balancer等托管服务作为替代方案。
需要优化您的 AWS 架构? 如果您正在规划跨可用区高可用架构或需要评估Keepalived与AWS托管负载均衡服务的选型,欢迎联系我们获取专业的架构咨询服务。
AWS USDT代付 | Payment 解决方案