从零开始搭建Aliyun ESC高可用集群 (HaVip+KeepAlived)
架构
架构
本设计方案采用两台阿里云ECS服务器搭建Keepalived
结合LVS的高可用集群。使用LVS的TUN
模式进行负载均衡,同时利用阿里云的弹性IP(EIP)
与高可用虚拟HaVIP
实现跨服务器的高可用性。架构中,一台ECS服务器作为主LVS Director节点,另一台作为备份LVS Director节点,两者通过Keepalived
实现故障自动切换。
环境配置
因为经费原因我这里只够买了2台ECS实例,用于测试HaVip在Keepalived主备切换与lvs TUN模式。
资源 | 功能 | 备注 |
---|---|---|
ECS实例 | 搭载集群 | 2台keepalived主备,2台部署服务(测试用没有购买),必须同一内网 172.19.68.106 172.19.68.110 |
弹性EIP | 公网ip,流量入口 | 购买资源 47.102.148.135 |
高可用虚拟HaVIP | 内网ip。lvs集群vip, keepalived节点ip漂移 | 免费申请 172.19.68.109 |
流程
- 在阿里云控制台创建两台ECS服务器,选择合适的配置以满足性能需求。
- 为两台ECS服务器配置相同的安全组规则,确保网络互通。
- 在两台ECS服务器上安装Linux操作系统并更新系统安全补丁。
- 配置Keepalived,设置
VRRP
(虚拟路由冗余协议),选择Tun
模式,以实现高可用性。 - 配置阿里云
EIP
,通过高可用虚拟HaVIP
将其绑定到主备LVS Director节点的VIP。 - 测试负载均衡和高可用性,确保系统在主节点故障时能够自动切换到备份节点。
各服务功能
- LVS:作为负载均衡器,负责接收外部请求并通过TUN模式分发流量到后端服务。
- Keepalived:监控
LVS Director
节点的状态,实现故障自动切换。 - EIP(弹性IP):阿里云提供的静态IP地址,用于实现跨服务器的高可用性。
部署
部署
- 在两台ECS服务器上安装Linux操作系统并进行基础配置。
- 安装LVS软件,配置TUN模式,设置相同的VIP,并确保网络规则允许流量通过。
- 安装Keepalived,配置VRRP实例,指定主从角色和优先级。
- 配置阿里云EIP,将其与主LVS Director节点的VIP关联。
- 配置后端服务(如Web服务器),确保它们能够处理来自LVS的请求。
- 进行压力测试和故障模拟,验证负载均衡和高可用性配置。
文件配置
keepalived主节点
root@iZuf64d3yu2ti34bwqerlqZ:/home/w# cat /etc/keepalived/keepalived.conf
# create new
global_defs {
# set hostname
router_id node01
}
vrrp_instance VRRP1 {
# on primary node, specify [MASTER]
# on backup node, specify [BACKUP]
# if specified [BACKUP] + [nopreempt] on all nodes, automatic failback is disabled
state MASTER
# if you like disable automatic failback, set this value with [BACKUP]
# nopreempt
# network interface that virtual IP address is assigned
interface eth0
# set unique ID on each VRRP interface
# on the a VRRP interface, set the same ID on all nodes
virtual_router_id 101
# set priority : [Master] > [BACKUP]
priority 200
# VRRP advertisement interval (sec)
advert_int 1
# virtual IP address
virtual_ipaddress {
172.19.68.109/32 dev eth0 # 必须配置 /32,否则会添加额外路由,导致2个esc节点ping不通内网
}
}
virtual_server 172.19.68.109 80 {
delay_loop 6
lb_algo sh # 负载均衡算法 源ip_hash
lb_kind TUN # tun 模式
persistence_timeout 50
protocol TCP
real_server 172.19.68.110 80 {
weight 1
TCP_CHECK {
nb_get_retry 3 # 重新连接次数
delay_before_retry 3 # 重新连接间隔时间
connect_port 80 # 向当前RS的哪个PORT发起健康状态检测请求
connect_timeout 3 # 客户端请求的超时时长, 等于haproxy的timeout server
}
}
}
keepalived 备用节点
root@iZuf66hj0t5ardtam17vx6Z:/home/wcq# cat /etc/keepalived/keepalived.conf
global_defs {
router_id node02
}
vrrp_instance V