keepalive+lvs+web+nfs高可用集群
1 、keepalive+lvs+web+nfs高可用集群概述
1.1 高可用集群项目背景
近年来,随着公司业务规模的迅猛扩张,业务量呈现出爆发式增长的态势。这一增长给现有的服务器系统带来了巨大的压力,使得服务器负载达到了极限。大量用户反馈在访问公司服务时频繁遭遇卡顿现象,甚至出现掉线的情况,严重影响了用户体验和公司业务的正常开展。为了有效缓解服务器压力,确保服务的稳定运行和正常访问,对公司现有的服务器架构进行调整已成为当务之急。
1.2 keepalive+lvs+web+nfs项目功能
keepalive+lvs+web+nfs项目所提供的解决方案,恰好能够精准地满足公司当前面临的这一紧迫需求。该方案具备多项强大且实用的功能,能够从多个层面优化服务器性能和服务质量。其实现原理基于先进的技术架构,通过科学合理的资源分配和负载均衡策略,保障系统的高效运行。
具体而言,本项目采用了 Keepalive+LVS+Nginx+NFS 的高可用集群架构。Keepalive 负责监控服务器的运行状态,确保在出现故障时能够快速切换,实现服务的不间断提供;LVS(Linux Virtual Server)作为负载均衡器,能够根据预设的算法将用户请求均匀地分发到多个服务器节点上,有效分散服务器压力;Nginx 则在应用层进一步处理请求,优化请求响应速度,并具备强大的缓存功能,减少对后端服务器的资源消耗;NFS(Network File System)实现了文件系统的共享,方便各服务器节点之间的数据交互和资源共享。通过这一高可用集群架构,项目能够显著提升公司服务器系统的稳定性、可靠性和性能表现。
2 keepalive+lvs+web+nfs 项目的部署
2.1 部署环境介绍
项目架构解析:
LVS:实现四层负载均衡,调度请求到后端Nginx服务器
Keepalived:为LVS提供高可用保障,防止单点故障
Nginx:作为Web服务器处理静态请求
NFS:统一存储网站文件,保证多节点数据一致性
LVS-master | 192.168.1.130 |
LVS-node01 | 192.168.1.131 |
Web1-RS | 192.168.1.132 |
Web2-RS | 192.168.1.133 |
Nfs | 192.168.1.134 |
VIP | 192.168.1.50 |
2.2 项目的拓扑结构
2.3 项目的部署
准备工作:
配置网络
vi /etc/sysconfig/network-scripts/ifcfg-ens33
systemctl restart network
关闭防火墙和selinux
systemctl stop firewalld
setenforce 0 && sed -i 's/SELINUX=enforcing/SELINUX=disabled/g' /etc/selinux/config
#重启生效
Reboot
修改主机名
hostnamectl set-hostname master-yzf
bash
hostnamectl set-hostname node01-yzf
bash
keepalived与LVS(DR)相关配置:
安装keepalived ipvsadm
yum -y install keepalived ipvsadm
加载内核模块
modprobe ip_vs
备份keepalived配置文件
cp /etc/keepalived/keepalived.conf /etc/keepalived/keepalived.conf.bak
修改配置文件
Vi /etc/keepalived/keepalived.conf
! Configuration File for keepalived global_defs { router_id LVS_MASTER } vrrp_instance VI_1 { state MASTER interface ens33 virtual_router_id 10 priority 100 advert_int 1 authentication { auth_type PASS auth_pass 1111 } virtual_ipaddress { 192.168.1.50 } } virtual_server 192.168.1.50 80 { delay_loop 15 lb_algo rr lb_kind DR ! persistence_timeout 50 protocol TCP real_server 192.168.1.132 80 { weight 1 TCP_CHECK { connect_port 80 connect_timeout 3 nb_get_retry 3 delay_before_retry 4 } } real_server 192.168.1.133 80 { weight 1 TCP_CHECK { connect_port 80 connect_timeout 3 nb_get_retry 3 delay_before_retry 4 } } } |
备机配置:
克隆一台master节点作为node01节点并且修改ip为192.168.1.131,并且修改主机名为node01
修改备机keepalived配置文件
注意1、修改router id
2、修改优先权
(只需要改这两个地方)
! Configuration File for keepalived global_defs { router_id LVS_BACKUP } vrrp_instance VI_1 { state MASTER interface ens33 virtual_router_id 10 priority 50 advert_int 1 authentication { auth_type PASS auth_pass 1111 } virtual_ipaddress { 192.168.1.50 } } virtual_server 192.168.1.50 80 { delay_loop 15 lb_algo rr lb_kind DR ! persistence_timeout 50 protocol TCP real_server 192.168.1.132 80 { weight 1 TCP_CHECK { connect_port 80 connect_timeout 3 nb_get_retry 3 delay_before_retry 4 } } real_server 192.168.1.133 80 { weight 1 TCP_CHECK { connect_port 80 connect_timeout 3 nb_get_retry 3 delay_before_retry 4 } } } |
主备启动keepalived并设置开机自启
systemctl start keepalived systemctl enable keepalived systemctl status keepalived |
ip addr show dev ens33
实际状态为 MASTER 的主服务器将为 ens33 接口自动添加 VIP 地址,通过 ip 命令可以查看。
ip addr show dev ens33
ipvsadm -ln
Nfs(192.168.1.134)
修改主机名
hostnamectl set-hostname NFS-yzf bash |
安装 NFS 工具
yum install -y nfs-utils |
创建共享目录(把文件内容共享给web服务器),设置权限
mkdir -p /nfs/web chmod 777 /nfs/web |
把web服务器ip暴露给nfs,允许 Web 主机 IP 访问
vi /etc/exports /nfs/web 192.168.1.132(rw,sync,no_root_squash,no_subtree_check) /nfs/web 192.168.1.133(rw,sync,no_root_squash,no_subtree_check) |
启动nfs
systemctl start nfs-server systemctl enable nfs-server |
验证共享
exportfs -v
创建测试文件
echo $(hostname -I | awk '{print $1}') > /nfs/web/index.html # 写入本机 IP 到 HTML 文件
暴露共享位置,一定要先启动服务再暴露位置,不然会报错
showmount -e 192.168.1.134
Web01(192.168.1.132)配置,搭建(RS服务器):
修改主机名:
hostnamectl set-hostname web01-yzf
bash
安装 NFS 客户端工具
yum install -y nfs-utils
创建本地挂载点,并且把共享目录挂载到本地挂载点
mkdir -p /var/www/html/shared
mount -t nfs 192.168.1.134:/nfs/web /var/www/html/shared
永久挂载
vi /etc/fstab
mount -a测试挂载,如果无报错,说明修复成功。
查看挂载情况
df -h | grep nfs # 查看挂载信息
cat /var/www/html/shared/index.html # 应显示 NFS 服务端的 IP
安装nginx
yum install -y epel-release # 安装 EPEL 仓库
yum install -y nginx
启动nginx
systemctl start nginx
showmount -e 192.168.1.134
检查nfs中共享目录的内容web01中是否能查看
测试共享是否成功
Nfs服务器
sudo exportfs -a
showmount -e localhost # 显示本地导出的 NFS 共享目录
Web01:
showmount -e 192.168.1.134 # 替换为你的 NFS 服务器 IP
共享成功
nginx网页
rpm -ql nginx |grep html
Web02配置:(同web01一样)
修改主机名
hostnamectl set-hostname web02-yzf bash |
安装nfs工具
yum install -y nfs-utils
创建本地挂载点
查看挂载情况
安装nginx
yum install -y epel-release
yum install -y nginx
启动nginx
并设置开机自启
systemctl start nginx
systemctl staus nginx
systemctl enable nginx
systemctl enable nginx nfs-server
查看共享情况,共享成功
查看nginx的网页文件存储目录
rpm -ql nginx |grep html
配置nginx,是为了区分web01与web02的内容
cd /nfs/web/
ls
mv index.html index1.html
echo "Web01 index.html" > index1.html
echo "Web02 index.html" > index1.html
Web01:
vim /etc/nginx/conf.d/web01.conf
server {
listen 80;
server_name 192.168.1.132;
location / {
root /var/www/html/shared;
index index1.html;
}
}
systemctl restart nginx
添加虚拟IP
ifconfig lo:1 192.168.1.50 netmask 255.255.255.255 broadcast 192.168.1.50 up
配置内核参数 /etc/sysctl.conf
net.ipv4.conf.lo.arp_ignore = 1
net.ipv4.conf.all.arp_announce = 2
net.ipv4.conf.lo.arp_announce = 2
net.ipv4.ip_forward=0
sysctl -p 更新
增加路由
route add -host 192.168.88.50 dev lo:1
Route -n
Web02 同样的配置
vim /etc/nginx/conf.d/web02.conf
server {
listen 80;
server_name 192.168.1.133;
location / {
root /var/www/html/shared;
index index2.html;
}
}
systemctl restart nginx
添加内核参数
增加路由
测试:
关掉web01
可看到web02内容
关掉web02
2.4 项目对应服务使用的日志
keepalive服务日志
keepalived 主要用于实现高可用和负载均衡,其日志记录了 Keepalived 进程的启动、运行状态、VRRP 状态切换(主备切换等)、LVS 规则的管理等信息
Keepalived 的日志默认记录在 /var/log/messages 文件中。你可以使用 tail 命令实时查看最新的日志信息
LVS服务日志
LVS 本身并不直接生成独立的日志文件,它的一些信息会通过 syslog 记录到系统日志中,通常也是在 /var/log/messages 文件中
Nginx服务日志
Nginx 有两种主要的日志文件,即访问日志(access log)和错误日志(error log)
Nginx 的默认访问日志路径通常是 /var/log/nginx/access.log,错误日志路径是 /var/log/nginx/error.log
NFS服务日志
NFS 服务日志记录了 NFS 服务器的文件共享操作,如客户端的挂载请求、文件读写操作、权限验证等。当客户端挂载 NFS 共享目录失败或者访问文件时出现权限问题,会在日志中记录相关的详细信息。
NFS 服务器的日志通常记录在 /var/log/messages文件上
- 项目的注意事项
网络配置问题
问题:LVS 负载均衡器、Nginx 服务器、NFS 服务器以及客户端之间的网络通信异常,如 IP 地址冲突、子网掩码错误、网关配置不正确等,导致无法正常进行负载均衡和文件共享。
解决方案:仔细检查各服务器的网络配置,确保 IP 地址设置正确且在同一子网内。使用 ip addr、route 等命令检查网络接口和路由表。对于跨网段的情况,要确保路由器配置正确,允许相关的网络流量通过。同时,可以使用 ping 命令测试网络连通性,使用 traceroute 命令排查网络路径问题。
负载均衡不均衡
问题:LVS 配置了轮询(Round Robin)等负载均衡算法,但实际请求却集中在某一台或某几台后端 Nginx 服务器上,没有实现均衡负载。
解决方案:首先检查 LVS 的配置,确保算法设置正确且没有启用会话保持(Persistence)功能(如果不需要会话保持)。使用 ipvsadm -Ln --stats 命令查看各后端服务器的连接统计信息,分析请求分配情况。另外,检查后端 Nginx 服务器的性能差异,如 CPU、内存、磁盘 I/O 等,如果某台服务器性能明显优于其他服务器,可能会导致请求集中。可以考虑优化服务器性能或调整负载均衡算法参数。
Nginx 配置错误
问题:Nginx 配置文件(nginx.conf 或虚拟主机配置文件)中存在语法错误、配置项缺失或冲突,导致 Nginx 无法正常启动或提供服务。
解决方案:使用 nginx -t 命令检查 Nginx 配置文件的语法正确性。如果发现错误,根据错误提示信息修改配置文件。对于复杂的配置,可以参考 Nginx 的官方文档,确保配置项的正确使用和顺序。同时,定期备份 Nginx 配置文件,以便在出现问题时能够快速恢复。
NFS 共享权限问题
问题:客户端无法挂载 NFS 共享目录,或者挂载后无法进行文件读写操作,提示权限不足。
解决方案:检查 NFS 服务器上 /etc/exports 文件的配置,确保共享目录的权限设置正确,允许客户端的 IP 地址或网段进行读写操作。例如,/data 10.1.1.0/24(rw,sync,no_root_squash)。同时,检查客户端和服务器上的文件系统权限,确保挂载点目录和共享目录的所有者和权限设置合理。可以使用 chown 和 chmod 命令调整文件和目录的权限。
Keepalived 故障切换异常
问题:当主 Keepalived 服务器出现故障时,备份服务器没有及时接管虚拟 IP(VIP)和服务,或者主服务器恢复后 VIP 没有正确回切。
解决方案:检查 Keepalived 的配置文件(keepalived.conf),确保 VRRP 实例的配置正确,包括虚拟路由器 ID(VRID)、优先级、抢占模式等参数。查看 Keepalived 的日志文件(通常在 /var/log/messages 或 /var/log/syslog),分析故障切换过程中出现的错误信息。另外,要确保两台服务器之间的网络连接稳定,避免因网络延迟或丢包导致的故障切换异常。