
CentOS 7 搭建 LVS Keepalived 高可用负载均衡1. 服务介绍LVSLinux Virtual Server工作在内核 IPVS 层可以把访问虚拟 IPVIP的请求按调度算法分发到多台真实服务器。Keepalived 使用 VRRP 在主、备调度器之间漂移 VIP并对后端服务执行健康检查。二者结合后可以同时解决单台调度器故障和后端 Web 节点故障问题适合四层高性能负载均衡场景。2. 准备运行环境本实验使用 CentOS 7.x所有节点位于同一二层网络示例拓扑如下| 角色 | 主机名 | IP 地址 || --- | --- | --- || LVS 主调度器 | lvs-master | 10.1.100.101 || LVS 备调度器 | lvs-backup | 10.1.100.102 || 虚拟地址 VIP | - | 10.1.100.100 || Web 节点 1 | web1 | 10.1.100.201 || Web 节点 2 | web2 | 10.1.100.202 || 测试客户端 | client | 10.1.100.50 |先在各节点检查系统、网络和时间同步状态cat /etc/centos-release uname -r ip addr ping -c 3 10.1.100.101 timedatectl status实验采用 LVS-DR 模式。放行 VRRP 协议和 Web 服务端口如果是临时实验环境也可以在确认网络边界安全后暂时停用 firewalld。3. 相关知识• **NAT 模式**请求和响应都经过调度器部署简单但调度器容易成为带宽瓶颈。• **DR 模式**调度器只改写二层目标 MAC真实服务器直接向客户端响应性能高但调度器和真实服务器通常要在同一二层网络。• **TUN 模式**通过 IP 隧道转发可跨网段部署但节点必须支持隧道配置。• **VIP 漂移**同一时刻只应由 MASTER 持有 VIPBACKUP 检测到主节点故障后接管 VIP。• **ARP 抑制**DR 模式中真实服务器也配置 VIP但不能对外响应该 VIP 的 ARP否则客户端可能绕过 LVS。• **健康检查**Keepalived 检测到某个 Web 节点异常后会把它从 IPVS 转发表移除服务恢复后再自动加入。•virtual_router_id在同一广播域内必须唯一主备节点配置必须一致priority较大的节点优先成为 MASTER。4. 实验步骤4.1 配置两台 Web 节点在web1和web2上安装并启动 Nginxyum install -y epel-release nginx systemctl enable --now nginx echo web1 10.1.100.201 /usr/share/nginx/html/index.html在web2上把测试页内容改为echo web2 10.1.100.202 /usr/share/nginx/html/index.html两台 Web 节点都把 VIP 配置在回环接口并抑制 ARP 响应cat /etc/sysctl.d/99-lvs-dr.conf EOF net.ipv4.conf.all.arp_ignore 1 net.ipv4.conf.all.arp_announce 2 net.ipv4.conf.lo.arp_ignore 1 net.ipv4.conf.lo.arp_announce 2 EOF sysctl --system ip addr add 10.1.100.100/32 dev lo label lo:0为保证重启后仍然生效创建回环接口配置/etc/sysconfig/network-scripts/ifcfg-lo:0DEVICElo:0 IPADDR10.1.100.100 NETMASK255.255.255.255 ONBOOTyes NAMEloopback-VIP4.2 安装 LVS 和 Keepalived在两台调度器上执行yum install -y ipvsadm keepalived systemctl enable keepalived4.3 配置主调度器备份配置文件cp -a /etc/keepalived/keepalived.conf /etc/keepalived/keepalived.conf.bak编辑/etc/keepalived/keepalived.conf。示例网卡名为ens33应按ip link的实际结果修改global_defs { router_id LVS_MASTER } vrrp_instance VI_1 { state MASTER interface ens33 virtual_router_id 51 priority 120 advert_int 1 authentication { auth_type PASS auth_pass lvs12345 } virtual_ipaddress { 10.1.100.100/24 dev ens33 } } virtual_server 10.1.100.100 80 { delay_loop 3 lb_algo rr lb_kind DR protocol TCP real_server 10.1.100.201 80 { weight 1 TCP_CHECK { connect_timeout 3 retry 3 delay_before_retry 2 connect_port 80 } } real_server 10.1.100.202 80 { weight 1 TCP_CHECK { connect_timeout 3 retry 3 delay_before_retry 2 connect_port 80 } } }4.4 配置备调度器备调度器使用相同的virtual_server配置只修改以下项目global_defs { router_id LVS_BACKUP } vrrp_instance VI_1 { state BACKUP interface ens33 virtual_router_id 51 priority 100 advert_int 1 authentication { auth_type PASS auth_pass lvs12345 } virtual_ipaddress { 10.1.100.100/24 dev ens33 } }virtual_router_id、认证信息、VIP 和后端节点配置必须与主调度器一致。4.5 启动服务先检查配置再分别启动主、备调度器keepalived -t -f /etc/keepalived/keepalived.conf systemctl restart keepalived systemctl status keepalived --no-pager5. 验证结果在主调度器检查 VIP、VRRP 状态和 IPVS 转发表ip addr show dev ens33 ipvsadm -Ln ipvsadm -Ln --stats journalctl -u keepalived -n 50 --no-pager正常情况下VIP10.1.100.100位于 MASTER转发表中有两个真实服务器。在客户端连续访问 VIP观察请求是否轮询到不同后端for i in {1..6}; do curl -s http://10.1.100.100/; done验证后端健康检查时在web1停止 Nginxsystemctl stop nginx随后在主调度器执行ipvsadm -Ln确认10.1.100.201:80被移除同时客户端仍能通过web2访问服务。恢复 Nginx 后该节点应自动重新加入。验证主备切换时在 MASTER 上停止 Keepalivedsystemctl stop keepalived在备调度器执行ip addr show dev ens33 ipvsadm -Ln journalctl -u keepalived -n 50 --no-pager如果 VIP 已漂移到备调度器客户端访问没有长时间中断说明 LVS Keepalived 高可用负载均衡配置成功。