1. 项目背景
在现代 Web 应用中,高可用性和负载均衡是至关重要的需求。本项目旨在通过 LVS(Linux Virtual Server)实现流量分发,通过 Keepalived 实现高可用性,通过 Nginx 提供后端服务。该架构能够确保在单点故障的情况下,系统仍然能够正常运行,并且能够均衡地分配流量到多个后端服务器。
2. 环境准备
2.1 服务器角色及 IP 规划
服务器角色 | 操作系统 | 内网 IP (ens160) | VIP | 安装软件 |
---|---|---|---|---|
LVS 主节点 | CentOS 7 | 192.168.65.131 | 192.168.65.100 (lvs-ens160) 192.168.65.101(keepalived-ens160) | ipvsadm, Keepalived |
LVS 备节点 | CentOS 7 | 192.168.65.132 | 192.168.65.100 (lvs-ens160) 192.168.65.101(keealived-ens160) | ipvsadm, Keepalived |
后端 Web 服务器 1 | CentOS 7 | 192.168.65.133 | 192.168.65.100 (lvs-lo) | Nginx |
后端 Web 服务器 2 | CentOS 7 | 192.168.65.134 | 192.168.65.100 (lvs-lo) | Nginx |
2.2 实验前准备
-
关闭 SELinux,以避免对实验造成干扰。
sudo sed -i 's/^SELINUX=.*/SELINUX=disabled/' /etc/selinux/config sudo reboot
-
开启防火墙并放行必要的端口,确保负载均衡和高可用性功能正常工作。
3. 服务器网络环境配置
3.1 设置静态 IP 地址
为确保服务器在重启后仍能保持固定的网络配置,使用 nmcli
设置静态 IP 地址。
LVS 主节点(192.168.65.131)
-
查看当前网络连接名称
nmcli con show
网络接口名称为
ens160
。 -
修改静态 IP 地址
nmcli con mod ens160 ipv4.addresses 192.168.65.131/24 ipv4.gateway 192.168.65.2 ipv4.dns 8.8.8.8 ipv4.method manual
-
重新加载网络配置并重启网络服务
nmcli con up ens160
LVS 备节点(192.168.65.132)
-
查看当前网络连接名称
nmcli con show
网络接口名称为
ens160
。 -
修改静态 IP 地址
nmcli con mod ens160 ipv4.addresses 192.168.65.132/24 ipv4.gateway 192.168.65.2 ipv4.dns 8.8.8.8 ipv4.method manual
-
重新加载网络配置并重启网络服务
nmcli con up ens160
后端 Web 服务器 1(192.168.65.133)
-
查看当前网络连接名称
nmcli con show
假设网络接口名称为
ens160
。 -
修改静态 IP 地址
nmcli con mod ens160 ipv4.addresses 192.168.65.133/24 ipv4.gateway 192.168.65.2 ipv4.dns 8.8.8.8 ipv4.method manual
-
重新加载网络配置并重启网络服务
nmcli con up ens160
后端 Web 服务器 2(192.168.65.134)
-
查看当前网络连接名称
nmcli con show
网络接口名称为
ens160
。 -
修改静态 IP 地址
nmcli con mod ens160 ipv4.addresses 192.168.65.134/24 ipv4.gateway 192.168.65.2 ipv4.dns 8.8.8.8 ipv4.method manual
-
重新加载网络配置并重启网络服务
nmcli con up ens160
3.2 配置主机名和主机映射
为便于在集群环境中快速识别和管理各服务器,需要为每台服务器配置主机名。
LVS 主节点(192.168.65.131)
-
设置主机名
sudo hostnamectl set-hostname lvs-master
-
更新
/etc/hosts
文件sudo vi /etc/hosts
添加以下内容:
127.0.0.1 lvs-master 192.168.65.131 lvs-master 192.168.65.132 lvs-backup 192.168.65.133 webserver1 192.168.65.134 webserver2
LVS 备节点(192.168.65.132)
-
设置主机名
sudo hostnamectl set-hostname lvs-backup
-
更新
/etc/hosts
文件sudo vi /etc/hosts
添加以下内容:
127.0.0.1 lvs-backup 192.168.65.131 lvs-master 192.168.65.132 lvs-backup 192.168.65.133 webserver1 192.168.65.134 webserver2
后端 Web 服务器 1(192.168.65.133)
-
设置主机名
sudo hostnamectl set-hostname webserver1
-
更新
/etc/hosts
文件sudo vi /etc/hosts
添加以下内容:
127.0.0.1 webserver1 192.168.65.131 lvs-master 192.168.65.132 lvs-backup 192.168.65.133 webserver1 192.168.65.134 webserver2
后端 Web 服务器 2(192.168.65.134)
-
设置主机名
sudo hostnamectl set-hostname webserver2
-
更新
/etc/hosts
文件sudo vi /etc/hosts
添加以下内容:
127.0.0.1 webserver2 192.168.65.131 lvs-master 192.168.65.132 lvs-backup 192.168.65.133 webserver1 192.168.65.134 webserver2

3.3 配置防火墙规则
为保障网络安全,需要优化防火墙规则,开启必要的服务端口,同时关闭不必要的端口。使用 firewalld
配置防火墙:
-
开启 HTTP(80 端口)和 VRRP(112 端口)
firewall-cmd --zone=public --add-port=80/tcp --permanent firewall-cmd --zone=public --add-port=112/udp --permanent firewall-cmd --reload
-
验证防火墙规则
firewall-cmd --list-all
确保
80/tcp
和112/udp
端口已正确放行。

3.4 实现 SSH 免密登录
为提高运维效率并减少人为错误,需要实现 SSH 免密登录。生成 SSH 密钥对,并将公钥复制到所有服务器:
ssh-keygen -t rsa
ssh-copy-id lvs-backup
ssh-copy-id webserver1
ssh-copy-id webserver2
4. 软件安装与配置
4.1 LVS 主节点和备节点配置
4.1.1 安装 IPVS 和 Keepalived
在 LVS 主节点和备节点上安装必要的软件:
yum install -y ipvsadm keepalived
4.1.2 加载 IPVS 模块
modprobe ip_vs
modprobe ip_vs_rr
modprobe ip_vs_wrr
modprobe ip_vs_sh
确保模块加载成功:
lsmod | grep ip_vs

4.1.3 配置 IP 转发
编辑 /etc/sysctl.conf
文件,添加或修改以下内容:
net.ipv4.ip_forward = 0
net.ipv4.conf.all.send_redirects = 0
net.ipv4.conf.default.send_redirects = 0
net.ipv4.conf.ens160.send_redirects = 0
使配置生效:
sysctl -p

4.1.4 配置 VIP
在主节点上配置 VIP:
sudo nmcli con mod ens160 +ipv4.addresses 192.168.65.100/32
sudo nmcli con up ens160

4.1.5 配置 LVS 规则
-
清除原有 LVS 规则
ipvsadm -C
-
添加虚拟服务器
ipvsadm -A -t 192.168.65.100:80 -s rr
-
添加真实服务器
ipvsadm -a -t 192.168.65.100:80 -r 192.168.65.133:80 -g -w 1 ipvsadm -a -t 192.168.65.100:80 -r 192.168.65.134:80 -g -w 1
-
查看lvs规则
ipvsadm -Ln
-
保存 LVS 规则
ipvsadm -S > /etc/sysconfig/ipvsadm
4.1.6 配置 Keepalived
编辑 /etc/keepalived/keepalived.conf
文件,配置 Keepalived 以实现主备切换,确保高可用性:
主节点(192.168.65.131):
global_defs {
router_id LVS_MASTER
}
vrrp_instance VI_1 {
state MASTER
interface ens160
virtual_router_id 51
priority 100
advert_int 1
authentication {
auth_type PASS
auth_pass 1234
}
virtual_ipaddress {
192.168.65.101
}
}
备节点(192.168.65.132):
global_defs {
router_id LVS_BACKUP
}
vrrp_instance VI_1 {
state BACKUP
interface ens160
virtual_router_id 51
priority 90
advert_int 1
authentication {
auth_type PASS
auth_pass 1234
}
virtual_ipaddress {
192.168.65.101
}
}
4.1.7 启动服务
启动并启用 IPVS 和 Keepalived 服务,确保配置生效:
sudo systemctl enable keepalived
sudo systemctl start keepalived

主节点获取keepalived-vip(192.168.65.101),备用节点未争取到

4.2 后端 Web 服务器配置
4.2.1 安装 Nginx
在后端 Web 服务器上安装 Nginx,为用户提供 Web 服务:
sudo yum install -y nginx
4.2.2 启动 Nginx 并设置开机自启
sudo systemctl start nginx
sudo systemctl enable nginx
4.2.3 修改 Nginx 默认页面(用于区分不同服务器)
Web 服务器 1(192.168.65.133):
echo "<h1>This is Real Server 1</h1>" > /usr/share/nginx/html/index.html
Web 服务器 2(192.168.65.134):
echo "<h1>This is Real Server 2</h1>" > /usr/share/nginx/html/index.html
4.2.4 配置 VIP
在真实服务器上配置 VIP:
sudo nmcli con add type loopback con-name lo ifname lo +ip4 192.168.65.100/32
sudo nmcli con up lo

4.2.5 调整 ARP 参数
编辑 /etc/sysctl.conf
文件,添加以下内容:
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

使配置生效:
sysctl -p

5. 测试与验证
5.1 验证 LVS 和 Keepalived
5.1.1 正常访问测试
验证客户端是否能够通过虚拟 IP 正常访问后端服务器:
curl 192.168.65.100
预期结果 :返回 This is Real Server 1
或 This is Real Server 2
。

5.1.2 主节点故障模拟
验证在主节点故障时,备节点是否能够正常接管虚拟 IP:
在主节点(192.168.65.131)上停止 Keepalived 服
systemctl stop keepalived

主节点失去vip

备用节点获取vip

5.2 验证 Nginx
验证后端服务器的 Nginx 服务是否正常运行:
curl http://192.168.65.133
curl http://192.168.65.134
预期结果 :分别返回 This is Real Server 1
和 This is Real Server 2
。

用客户机和windows端测试:

