Keepalive+LVS+Nginx+NFS 高可用集群搭建保姆级教程(全命令解析版)
一、项目架构解析
本方案通过整合多款主流技术构建高可用Web服务集群:
-
LVS:实现四层负载均衡,调度请求到后端Nginx服务器
-
Keepalived:为LVS提供高可用保障,防止单点故障
-
Nginx:作为Web服务器处理静态请求
-
NFS:统一存储网站文件,保证多节点数据一致性
二、主机规划清单
角色 | 系统 | 安装软件 | IP地址 | 特殊说明 |
---|---|---|---|---|
Client | RedHat 9.5 | 无 | 192.168.220.115 | 测试客户端 |
LVS-Master | RedHat 9.5 | ipvsadm + keepalived | 192.168.220.116 | VIP:192.168.220.100 |
LVS-Backup | RedHat 9.5 | ipvsadm + keepalived | 192.168.220.117 | VIP:192.168.220.100 |
RS1 | RedHat 9.5 | nginx + nfs-utils | 192.168.220.118 | 挂载NFS存储 |
RS2 | RedHat 9.5 | nginx + nfs-utils | 192.168.220.119 | 挂载NFS存储 |
NFS-Server | RedHat 9.5 | nfs-utils | 192.168.220.120 | 共享存储服务器 |
三、基础环境准备(所有节点)
1. 关闭防火墙与SELinux
# 停止防火墙服务
systemctl stop firewalld
# 禁用防火墙开机启动
systemctl disable firewalld
# 临时关闭SELinux(立即生效)
setenforce 0
# 永久关闭SELinux(需重启生效)
sed -i 's/SELINUX=enforcing/SELINUX=disabled/g' /etc/selinux/config
命令解析:
-
systemctl stop firewalld
:立即停止防火墙服务 -
systemctl disable firewalld
:禁止防火墙开机自启 -
setenforce 0
:将SELinux设置为宽松模式(临时生效) -
sed
命令:修改配置文件永久禁用SELinux
2. 配置本地YUM仓库(RedHat系统)
# 创建仓库配置文件
vim /etc/yum.repos.d/dnf.repo
# 输入以下内容(注意修改前备份原仓库):
[BaseOS]
name=BaseOS
baseurl=file:///mnt/BaseOS # 本地路径需要三个斜杠
gpgcheck=0 # 关闭签名验证(仅限实验环境)
[AppStream]
name=AppStream
baseurl=file:///mnt/AppStream
gpgcheck=0
# 挂载系统ISO镜像(需提前加载ISO文件)
mkdir -p /mnt
mount /dev/sr0 /mnt
# 设置开机自动挂载
echo "/dev/sr0 /mnt iso9660 defaults 0 0" >> /etc/fstab
mount -a
# 验证仓库可用性
dnf clean all
dnf makecache
dnf repolist
关键步骤说明:
-
/dev/sr0
:光驱设备文件路径(虚拟机环境) -
iso9660
:光盘文件系统类型 -
mount -a
:重新加载所有挂载配置 -
gpgcheck=0
:关闭安全验证(生产环境不建议)
四、NFS服务器配置
1. 基础配置
# 设置主机名(立即生效)
hostnamectl hostname nfs-server
# 配置静态IP地址(示例为NAT网络)
nmcli c m ens160 ipv4.method manual ipv4.addresses 192.168.220.120/24 ipv4.gateway 192.168.220.2 ipv4.dns 223.5.5.5 connection.autoconnect yes
# 应用网络配置
nmcli con up ens160
参数说明:
-
hostnamectl hostname
:永久修改主机名 -
nmcli c m
:修改网络连接配置-
ipv4.addresses
:设置IPv4地址和掩码 -
ipv4.gateway
:设置默认网关 -
ipv4.dns
:设置DNS服务器
-
-
nmcli c up
:激活网络连接
2. 安装NFS服务
# 通过本地仓库安装
dnf install -y nfs-utils
# 查看安装结果
rpm -qa | grep nfs-utils
命令解析:
-
dnf
:RedHat系列的包管理工具 -
-y
:自动确认安装
3. 创建共享目录
# 创建共享目录
mkdir -p /nfs/share
# 进入目录创建测试文件
cd /nfs/share
echo "RS1 Default Page" > index1.html
echo "RS2 Default Page" > index2.html
参数说明:
-
mkdir -p
:递归创建目录,自动创建父目录 -
>
:输出重定向,创建文件并写入内容
4. 配置共享权限
vim /etc/exports
添加以下内容:
/nfs/share 192.168.220.118(rw,sync,no_root_squash) 192.168.220.119(rw,sync,no_root_squash)
配置项说明:
-
/nfs/share
:共享目录路径 -
192.168.220.118
:允许访问的客户端IP -
rw
:读写权限 -
sync
:同步写入模式 -
no_root_squash
:允许root用户保持权限
5. 启动NFS服务
# 设置开机自启并立即启动
systemctl enable --now nfs-server
# 查看共享配置
exportfs -v
firewall-cmd --add-service=nfs --permanent # 若开启防火墙需执行
firewall-cmd --reload
输出示例:
/nfs/share 192.168.220.118(sync,wdelay,hide,no_subtree_check,sec=sys,rw,secure,no_root_squash,no_all_squash)
/nfs/share 192.168.220.119(sync,wdelay,hide,no_subtree_check,sec=sys,rw,secure,no_root_squash,no_all_squash)
五、RS服务器配置(RS1/RS2相同操作)
1. 基础配置(以RS1为例)
# 设置主机名
hostnamectl hostname rs1
# 配置静态IP
nmcli c m ens160 ipv4.method manual ipv4.addresses 192.168.220.118/24 ipv4.gateway 192.168.220.2 ipv4.dns 223.5.5.5 connection.autoconnect yes
# 应用网络配置
nmcli con up ens160
2. 安装必要软件
dnf install -y nginx nfs-utils
软件说明:
-
nginx
:Web服务器 -
nfs-utils
:NFS客户端工具
3. 配置NFS挂载
# 创建挂载点目录
mkdir -p /usr/share/nginx/html
# 临时挂载NFS共享
mount -t nfs 192.168.220.120:/nfs/share /usr/share/nginx/html
# 永久挂载配置
echo "192.168.220.120:/nfs/share /usr/share/nginx/html nfs defaults 0 0" >> /etc/fstab
# 验证挂载配置
mount -a
命令解析:
-
mount -t nfs
:指定挂载NFS类型 -
/etc/fstab
配置格式:设备路径 挂载点 文件系统类型 挂载选项 dump备份标记 fsck检查顺序
-
mount -a
:重新挂载所有fstab配置
4. Nginx配置(RS1)
vim /etc/nginx/conf.d/rs.conf
添加以下内容:
server {
listen 80;
server_name _;
location / {
root /usr/share/nginx/html;
index index1.html; # RS2此处改为index2.html
}
}
# 验证配置
nginx -t && systemctl restart nginx
配置说明:
-
listen 80
:监听80端口 -
server_name _
:匹配所有域名 -
root
:网站根目录路径 -
index
:默认访问文件
验证并重启服务:
nginx -t # 检查配置语法
systemctl restart nginx # 重启服务
六、LVS服务器配置(双机热备)
1. 基础配置(Master/Backup相同)
# 设置主机名(Master节点)
hostnamectl hostname lvs-master # Backup节点设为lvs-backup
# 安装必要软件
dnf install -y ipvsadm keepalived
软件说明:
-
ipvsadm
:LVS管理工具 -
keepalived
:高可用解决方案
2. Keepalived配置(Master节点)
vim /etc/keepalived/keepalived.conf
完整配置:
global_defs {
router_id LVS_MASTER # 唯一标识符,Backup节点改为LVS_BACKUP
}
vrrp_instance VI_1 {
state MASTER # 主节点标识,Backup节点改为BACKUP
interface ens160 # 监听网卡
virtual_router_id 51 # 虚拟路由ID(集群内必须一致)
priority 100 # 优先级(数值越大优先级越高),Backup节点设为90
advert_int 1 # 心跳间隔(秒)
authentication {
auth_type PASS # 认证类型
auth_pass 1111 # 认证密码
}
virtual_ipaddress {
192.168.220.100/24 dev ens160 # 虚拟IP配置
}
}
virtual_server 192.168.220.100 80 {
delay_loop 6 # 健康检查间隔
lb_algo wrr # 加权轮询算法
lb_kind DR # 直接路由模式
persistence_timeout 50 # 会话保持时间
protocol TCP # 使用TCP协议
real_server 192.168.220.118 80 {
weight 1 # 权重值
TCP_CHECK {
connect_timeout 3 # 连接超时时间
nb_get_retry 3 # 重试次数
delay_before_retry 3 # 重试间隔
}
}
real_server 192.168.220.119 80 {
weight 1
TCP_CHECK {
connect_timeout 3
nb_get_retry 3
delay_before_retry 3
}
}
}
3. Backup节点配置
# 修改以下参数:
state BACKUP # 备份节点标识
priority 90 # 优先级低于主节点
router_id LVS_BACKUP # 唯一标识符
4. 启动服务
systemctl enable --now keepalived
# 查看负载规则
ipvsadm -Ln
输出示例:
IP Virtual Server version 1.2.1 (size=4096)
Prot LocalAddress:Port Scheduler Flags
-> RemoteAddress:Port Forward Weight ActiveConn InActConn
TCP 192.168.220.100:80 wrr persistent 50
-> 192.168.220.118:80 Route 1 0 0
-> 192.168.220.119:80 Route 1 0 0
七、全链路测试与排错
1. 客户端访问测试
# 连续访问测试负载均衡
while true; do curl 192.168.220.100; sleep 1; done
预期结果:
RS1 Default Page
RS2 Default Page
RS1 Default Page
RS2 Default Page
...
2. 故障转移测试
# 在主节点停止keepalived
systemctl stop keepalived
# 在备节点查看VIP(应自动接管)
ip addr show ens160 | grep '192.168.220.100'
3. NFS挂载验证
# 在RS节点查看挂载
df -hT | grep nfs
# 测试文件写入
touch /usr/share/nginx/html/test_file
ls -l /nfs/share # 在NFS服务器查看
八、深度技术解析
1. LVS工作模式DR原理
-
数据流向:
-
客户端请求到达LVS
-
LVS修改目标MAC地址转发到RS
-
RS直接响应客户端(不经过LVS)
-
-
ARP抑制:
# RS节点需要配置ARP隐藏 echo 1 > /proc/sys/net/ipv4/conf/lo/arp_ignore echo 2 > /proc/sys/net/ipv4/conf/lo/arp_announce echo 1 > /proc/sys/net/ipv4/conf/all/arp_ignore echo 2 > /proc/sys/net/ipv4/conf/all/arp_announce
2. Keepalived健康检查机制
-
检查类型:
-
TCP_CHECK:端口连通性检查
-
HTTP_GET:发送HTTP请求检查
-
SSL_GET:HTTPS健康检查
-
-
故障切换流程:
-
Master节点停止发送VRRP通告
-
Backup节点等待
advert_int*3
时间 -
抢占模式切换为Master
-
九、排错指南
场景一:YUM仓库不可用
# 检查项:
ls /mnt/BaseOS/Packages # 确认有RPM文件
cat /etc/yum.repos.d/dnf.repo # 检查baseurl路径
df -hT | grep sr0 # 验证挂载状态
# 常见修复:
umount /mnt && mount /dev/sr0 /mnt # 重新挂载
dnf clean all && dnf makecache # 重建缓存
场景二:NFS挂载失败
# 检查项:
showmount -e 192.168.220.120 # 查看共享列表
rpcinfo -p 192.168.220.120 # 验证RPC服务
telnet 192.168.220.120 2049 # 测试端口连通性
# 修复步骤:
systemctl restart nfs-server # NFS服务端
exportfs -arv # 重载共享配置
umount -lf /usr/share/nginx/html # 强制卸载后重试
场景三:VIP无法访问
# 诊断命令:
ip addr show ens160 | grep 192.168.220.100 # 检查VIP存在
journalctl -u keepalived -f # 查看实时日志
tcpdump -i ens160 vrrp # 抓包分析VRRP通信
# 处理方案:
systemctl restart keepalived # 重启服务
firewall-cmd --list-all # 检查防火墙规则
场景四:负载不均衡
# 分析工具:
ipvsadm -Ln --stats # 查看连接分布
watch -n 1 ipvsadm -lnc # 实时监控连接状态
# 调整策略:
# 修改keepalived配置中的lb_algo参数
# 可选算法:rr(轮询), wrr(加权轮询), lc(最少连接)等
通过本教程的详细解析,您可以深入理解每个配置步骤的技术原理,快速搭建稳定可靠的高可用集群。建议在生产环境中结合监控系统(如Prometheus)实现自动化运维管理。