在 Linux 下使用 LVS(Linux Virtual Server) 和 Keepalived 来实现高可用的集群方案,通常用于负载均衡和故障转移。LVS 提供强大的负载均衡功能,而 Keepalived 主要负责健康检查和故障切换。
一、LVS+Keepalived 高可用集群架构
架构概述:
- LVS(Linux Virtual Server):用于实现负载均衡,将客户端请求分发到后端的服务器池(Real Server)。
- Keepalived:用于健康检查和高可用性管理。它可以监控 LVS 服务器的状态,并在主 LVS 服务器失效时自动切换到备用 LVS 服务器。
典型的部署方式:
- 主 LVS(Master):负责处理实际的负载分发工作。
- 备 LVS(Backup):作为冗余系统,在主 LVS 出现故障时自动接管流量。
- 后端 Real Server:实际处理业务请求的服务器。
通过 Keepalived,主 LVS 失效时,备 LVS 会接管虚拟 IP(VIP),确保服务的高可用性。
二、LVS 负载均衡模式
LVS 提供多种负载均衡模式,常见的有以下几种:
- LVS-NAT(Network Address Translation):通过网络地址转换将请求转发给后端服务器。
- LVS-DR(Direct Routing):通过直接路由的方式转发请求,LVS 服务器只负责请求的分发,响应则直接返回给客户端。
- LVS-TUN(IP Tunneling):通过 IP 隧道方式转发请求,适用于分布在不同地理位置的服务器。
LVS-DR 是最常用的模式,具有高性能和可扩展性。
三、部署 LVS+Keepalived 高可用集群的步骤
1. 环境准备
- 两台 LVS 服务器:Master 和 Backup。
- 多台后端 Real Server。
- 操作系统:通常选择 CentOS 或 Ubuntu 等 Linux 发行版。
2. 安装 LVS 和 Keepalived
在两台 LVS 服务器上安装 ipvsadm
和 keepalived
:
bash
# CentOS/Red Hat:
yum install ipvsadm keepalived -y
# Ubuntu/Debian:
apt-get install ipvsadm keepalived -y
3. 配置 Keepalived
主 LVS 配置(/etc/keepalived/keepalived.conf)
bash
vrrp_instance VI_1 {
state MASTER # 指定为主节点
interface eth0 # 网卡接口,VIP 将绑定在该网卡上
virtual_router_id 51 # VRID 同一组集群保持一致
priority 100 # 优先级,备节点的优先级要比主节点低
advert_int 1 # 心跳检测间隔时间(秒)
authentication { # 主备节点认证配置
auth_type PASS
auth_pass 1234
}
virtual_ipaddress { # 定义 VIP(虚拟 IP 地址)
192.168.0.100 # 替换为你实际的 VIP
}
}
virtual_server 192.168.0.100 80 { # 监听的 VIP 和端口(HTTP)
delay_loop 6 # 健康检查间隔时间
lb_algo rr # 负载均衡算法:rr(轮询)
lb_kind DR # 负载均衡模式:DR
persistence_timeout 50 # 会话持久化时间(秒)
protocol TCP # 使用的协议
real_server 192.168.0.101 80 { # 定义后端 Real Server
weight 1 # 权重
TCP_CHECK { # 健康检查配置
connect_timeout 3
nb_get_retry 3
delay_before_retry 3
}
}
real_server 192.168.0.102 80 {
weight 1
TCP_CHECK {
connect_timeout 3
nb_get_retry 3
delay_before_retry 3
}
}
}
备 LVS 配置(/etc/keepalived/keepalived.conf)
备 LVS 的配置与主 LVS 类似,只需将 state MASTER
改为 state BACKUP
,并且将 priority
的值设置得比主 LVS 小(例如 90):
bash
vrrp_instance VI_1 {
state BACKUP
interface eth0
virtual_router_id 51
priority 90 # 备节点优先级低于主节点
advert_int 1
authentication {
auth_type PASS
auth_pass 1234
}
virtual_ipaddress {
192.168.0.100
}
}
4. 配置 LVS 负载均衡
LVS 负载均衡通过 ipvsadm
工具进行配置。
查看 LVS 负载均衡规则:
bash
ipvsadm -L -n
添加负载均衡规则(根据 Keepalived 配置可以自动化实现):
bash
ipvsadm -A -t 192.168.0.100:80 -s rr
ipvsadm -a -t 192.168.0.100:80 -r 192.168.0.101:80 -g
ipvsadm -a -t 192.168.0.100:80 -r 192.168.0.102:80 -g
-A
:添加虚拟服务器。-t
:使用 TCP 协议(虚拟 IP 和端口)。-s rr
:使用轮询(Round Robin)算法。-a
:添加后端真实服务器。-r
:指定后端服务器的 IP 地址。-g
:使用 LVS-DR 模式(直接路由)。
5. 后端 Real Server 配置
后端服务器(Real Server)需要对 LVS-DR 模式进行配置。主要步骤是:
- 配置 loopback 网卡,绑定 VIP 地址,但不响应 ARP 请求。
在每台 Real Server 上,创建一个新的 lo
接口,并绑定 VIP:
bash
ip addr add 192.168.0.100 dev lo
为了避免 VIP 响应 ARP 请求,可以在每个后端服务器上添加以下规则:
bash
echo "1" > /proc/sys/net/ipv4/conf/lo/arp_ignore
echo "2" > /proc/sys/net/ipv4/conf/lo/arp_announce
echo "1" > /proc/sys/net/ipv4/conf/all/arp_ignore
echo "2" > /proc/sys/net/ipv4/conf/all/arp_announce
6. 启动 Keepalived
在主备 LVS 节点上分别启动 Keepalived 服务:
bash
systemctl start keepalived
systemctl enable keepalived
通过 ip addr
命令,可以在主 LVS 上看到 VIP(192.168.0.100)已经被绑定到指定的网卡上。
四、验证高可用性
-
通过访问 VIP(如
http://192.168.0.100
),验证负载均衡效果,确认请求能被分发到后端服务器。 -
关闭主 LVS 服务器的 Keepalived 服务:
bashsystemctl stop keepalived
此时,VIP 应该会切换到备用 LVS 服务器,确保高可用性。
总结
通过 LVS 和 Keepalived 配置高可用集群,可以实现负载均衡和主备切换的高可用性架构。这种架构适用于需要高性能和高可用性的网站或应用场景。