LVS高可靠
概述
以下是基于 CentOS 7 搭建 LVS(Linux Virtual Server)高可靠 集群的完整指南。LVS 是一个高性能的负载均衡解决方案,常用于构建高可用的 Web、数据库等服务。
快速开始
一、LVS 高可用架构
我们将采用 LVS + Keepalived 的经典组合
客户端
↓
[虚拟 IP (VIP): 192.168.1.100]
↓
[主 LVS 调度器] (LVS + Keepalived) ←→ VRRP 通信
[备 LVS 调度器] (LVS + Keepalived)
↓ (负载均衡)
[真实服务器 1] (Web1: 192.168.1.20)
[真实服务器 2] (Web2: 192.168.1.21)
- LVS:负责将客户端请求分发到后端真实服务器。
- Keepalived:实现 LVS 调度器的高可用,通过 VRRP 协议管理虚拟 IP(VIP)。
二、环境准备
服务器 | IP 地址 | 角色 | |
---|---|---|---|
LVS-1 | 192.168.1.10 | 主 LVS 调度器 | |
LVS-2 | 192.168.1.11 | 备 LVS 调度器 | |
Web1 | 192.168.1.20 | 真实服务器(Real Server) | |
Web2 | 192.168.1.21 | 真实服务器(Real Server) | |
VIP | 192.168.1.100 | 虚拟 IP(对外服务地址) |
三、部署步骤
步骤 1:在所有服务器上安装 Nginx(作为 Web 服务)
# 安装 Nginx
sudo yum install -y nginx# 创建测试页面
echo "Hello from Web Server $(hostname)" | sudo tee /usr/share/nginx/html/index.html# 启动 Nginx
sudo systemctl enable nginx --now
步骤 2:在 Web 服务器上配置 ARP 抑制(DR 模式必需)
LVS 有多种工作模式,我们使用性能最高的 DR(Direct Routing)模式。
在 Web1 和 Web2 上执行:
# 创建 ARP 配置脚本
cat > /etc/sysconfig/network-scripts/ifcfg-lo:0 << 'EOF'
DEVICE=lo:0
IPADDR=192.168.1.100
NETMASK=255.255.255.255
ONBOOT=yes
ARPCHECK=no
EOF# 应用配置
sudo ifup lo:0# 抑制 ARP 响应
echo "net.ipv4.conf.all.arp_ignore = 1" | sudo tee -a /etc/sysctl.conf
echo "net.ipv4.conf.all.arp_announce = 2" | sudo tee -a /etc/sysctl.conf
echo "net.ipv4.conf.lo.arp_ignore = 1" | sudo tee -a /etc/sysctl.conf
echo "net.ipv4.conf.lo.arp_announce = 2" | sudo tee -a /etc/sysctl.conf# 生效配置
sudo sysctl -p
步骤 3:在 LVS 调度器上安装 LVS 和 Keepalived
在 LVS-1 和 LVS-2 上执行:
# 安装 ipvsadm (LVS 管理工具) 和 keepalived
sudo yum install -y ipvsadm keepalived# 启用并启动 keepalived
sudo systemctl enable keepalived --now
步骤 4:配置 Keepalived(主调度器 LVS-1)
编辑 /etc/keepalived/keepalived.conf
:
sudo tee /etc/keepalived/keepalived.conf > /dev/null << 'EOF'
global_defs {router_id LVS_MASTER
}vrrp_instance VI_1 {state MASTERinterface eth0virtual_router_id 51priority 100advert_int 1authentication {auth_type PASSauth_pass 1111}virtual_ipaddress {192.168.1.100/24}
}virtual_server 192.168.1.100 80 {delay_loop 6lb_algo rrlb_kind DRnat_mask 255.255.255.0persistence_timeout 50protocol TCPreal_server 192.168.1.20 80 {weight 1TCP_CHECK {connect_timeout 3nb_get_retry 3delay_before_retry 3}}real_server 192.168.1.21 80 {weight 1TCP_CHECK {connect_timeout 3nb_get_retry 3delay_before_retry 3}}
}
EOF
步骤 5:配置 Keepalived(备调度器 LVS-2)
在 LVS-2 上,配置几乎相同,仅修改以下部分:
vrrp_instance VI_1 {state BACKUPpriority 90 # 低于主节点...
}
其余配置与 LVS-1 一致。
步骤 6:启动服务
在 LVS-1 和 LVS-2 上执行:
sudo systemctl restart keepalived
四、验证高可用性
1. 检查 VIP 是否生效
在 LVS-1 上执行:
ip addr show eth0
你应该看到 192.168.1.100
出现在主节点上。
2. 查看 LVS 转发规则
ipvsadm -Ln
输出应显示两个 Real Server:
Prot LocalAddress:Port Scheduler Flags-> RemoteAddress:Port Forward Weight ActiveConn InActConn
TCP 192.168.1.100:80 rr-> 192.168.1.20:80 Route 1 0 0-> 192.168.1.21:80 Route 1 0 0
3. 测试访问
在浏览器或命令行中访问:
curl http://192.168.1.100
你应该看到来自 Web1
或 Web2
的响应,且每次请求可能轮询到不同服务器。
4. 测试故障转移
- 关闭 LVS-1:
sudo shutdown -h now
- 观察 LVS-2 是否自动接管 VIP(
ip addr show
) - 访问
http://192.168.1.100
,服务应不受影响