0、环境:
我现在有三台rocky linux:192.168.1.199、192.168.1.201、192.168.1.202,我现在需要在192.168.1.199上安装LVS,另外两台安装nginx,LVS对外开放端口30010,代理到两台nginx服务器的30011端口上面,需要怎么安装LVS和配置
为了让大家更好地理解这个架构,我们使用通用的术语来表达各个角色的功能:
Director:调度器,对应你的主机
192.168.1.199。Real Server (RS):真实后端服务器,对应你的主机
192.168.1.201和192.168.1.202。VIP (Virtual IP):集群的虚拟服务IP,是客户端访问的入口地址。为了和现有IP不冲突,我们选择一个当前网段未被使用的IP,例如
192.168.1.100。
DR模式的一个关键限制是前后端端口必须一致。为了使配置能正常工作,你需要修改Nginx的监听端口为 30010,使其与LVS对外开放的端口相同。
1. LVS 调度器 (Director) 配置步骤
步骤1: 关闭防火墙和SELinux
bash
# 停止 firewalld 服务
systemctl stop firewalld
# 关闭 SELinux
setenforce 0步骤2: 安装 ipvsadm
在 Director(192.168.1.199) 上,首先安装 ipvsadm 管理工具。
bash
dnf install -y ipvsadm
modprobe ip_vs # 加载LVS内核模块
echo "ip_vs" | sudo tee /etc/modules-load.d/ip_vs.conf # 设置开机自动加载步骤3: 配置VIP
bash
# 创建一个虚拟网卡绑定VIP,掩码/32,仅用于对外通信
ip addr add 192.168.1.100/32 dev eth0 # 将 eth0 替换为你的网卡名,如ens192
为了使VIP在重启后依然存在,可以创建网卡配置文件:
bash
# 文件名中的eth0:0表示网卡别名,确保网卡名和序号与现有网卡不冲突
vi /etc/sysconfig/network-scripts/ifcfg-eth0:0将以下内容填入配置文件,保存并退出。
ini
NAME=eth0:0
DEVICE=eth0:0
ONBOOT=yes
IPADDR=192.168.1.100
NETMASK=255.255.255.255步骤4: 关闭ICMP重定向
bash
# 临时关闭
echo "0" > /proc/sys/net/ipv4/conf/all/send_redirects
echo "0" > /proc/sys/net/ipv4/conf/default/send_redirects
echo "0" > /proc/sys/net/ipv4/conf/eth0/send_redirects
# 永久生效,将以下内容写入文件 /etc/sysctl.conf
echo "net.ipv4.conf.all.send_redirects = 0" >> /etc/sysctl.conf
echo "net.ipv4.conf.default.send_redirects = 0" >> /etc/sysctl.conf
echo "net.ipv4.conf.eth0.send_redirects = 0" >> /etc/sysctl.conf
sysctl -p步骤5: 配置LVS转发规则
bash
# 清除现有规则
ipvsadm -C
# 添加虚拟服务:VIP为 192.168.1.100,端口 30010,调度算法为 rr (轮询)
ipvsadm -A -t 192.168.1.100:30010 -s rr
# 添加后端真实服务器,-g 表示使用 DR 模式
ipvsadm -a -t 192.168.1.100:30010 -r 192.168.1.201:30010 -g
ipvsadm -a -t 192.168.1.100:30010 -r 192.168.1.202:30010 -g
# 保存规则,以便系统重启后自动恢复
ipvsadm-save > /etc/sysconfig/ipvsadm
systemctl enable ipvsadm
2. Nginx 真实服务器 (Real Server) 配置步骤
步骤1: 配置VIP至本地回环接口 (lo)
bash
# 在本地回环接口上绑定VIP,掩码必须为 /32
ip addr add 192.168.1.100/32 dev lo
步骤2: 抑制ARP响应
bash
# 写入以下内容至文件,直接使用 cat 重定向创建
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 -p /etc/sysctl.d/99-lvs-dr.conf以上配置解决了DR模式下RS的VIP对外的ARP响应问题。
arp_ignore = 1: 让系统只回答目标IP是本地IP的ARP请求。arp_announce = 2: 系统在发送ARP请求时,会使用合适的本地IP地址。

步骤3: 安装Nginx并配置监听端口
bash
# 修改 Nginx 配置,使监听端口与 LVS 虚拟服务端口 30010 一致
dnf install -y nginx
sed -i 's/listen 80;/listen 30010;/' /etc/nginx/nginx.conf
systemctl start nginx && systemctl enable nginx我这里测试,放入了一个首页面板测试页面


3. 验证与测试
1、查看LVS规则
在调度器上执行 ipvsadm -L -n,你会看到类似下面的结果,ActiveConn 和 InActConn 展示了后端的连接数。
text
IP Virtual Server version 1.2.1 (size=4096)
Prot LocalAddress:Port Scheduler Flags
-> RemoteAddress:Port Forward Weight ActiveConn InActConn
TCP 192.168.1.100:30010 rr
-> 192.168.1.201:30010 Route 1 0 0
-> 192.168.1.203:30010 Route 1 0 0
2、从客户端发起访问测试
多次执行 curl http://192.168.1.100:30010,观察是否轮流返回来自 192.168.1.201 和 192.168.1.202 后端服务器的响应。

4. 持久化与故障排查
如何保存配置?
LVS 规则:
ipvsadm-save > /etc/sysconfig/ipvsadm。内核参数 (
sysctl): 已经在/etc/sysctl.d/99-lvs-dr.conf文件中配置,持久化生效。VIP地址: 调度器上的VIP通过创建
/etc/sysconfig/network-scripts/ifcfg-eth0:0网卡配置文件实现持久化;后端服务器上的VIP配置推荐写入一个启动脚本(如/etc/rc.local)来执行ip addr add 192.168.1.100/32 dev lo。
如何排查故障?
检查ARP抑制是否生效: 在Real Server上执行
cat /proc/sys/net/ipv4/conf/all/arp_ignore,返回的结果应为1。检查后端端口: 执行
netstat -tulnp | grep 30010,确认Nginx是否正常监听在30010端口。检查防火墙: 执行
systemctl status firewalld,确保防火墙是关闭 (inactive (dead)) 状态。