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端测试: