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)实现自动化运维管理。
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-