LVS+KeepAlived+Nginx实现企业级业务高可靠部署的实战教程
在当今社会我们享受着便捷的IT服务包括政务、通信、银行、交通、网购、旅游等。这些服务背后是健壮安全的IT化架构提供支撑在某个节点故障后自动进行切换保证业务的高可用。当前主流的高可用解决方案为LVSLinux Virtual Server、Nginx、Keepalived的组合。LVS负责实现高效的负载均衡将用户请求合理分发至Nginx服务器Nginx服务器进行七层反向代理、动静态分离、SSL、缓存功能处理更为复杂的业务逻辑KeepAlived则承担LVS故障检测与主备切换、自动检测后端Nginx服务器健康状态(剔除和加入。通过三者的配合让整个服务处于安全稳定的状态。本文则详细介绍LVSKeepAlivedNginx企业级部署实战让我们一步步完成高可用IT架构的搭建。【整体架构】①LVSKeepalived2 台做四层转发 VIP高可用DR模式。②NginxN台做七层反向代理、动静态分离、SSL、缓存本文以2台Nginx为例。③VIP对外统一入口。对于单日百万级别访问量的业务会有N套“LVSKeepAlivedNginx”架构对应N个VIP地址。这些地址配置DNS服务器上实现一个域名对应多个VIP从而均衡业务流量。角色主机名IP虚拟 IPVIP172.16.1.100LVS主lvs-master172.16.1.101LVS备lvs-bcakup172.16.1.102Nginx节点1nginx-01172.16.1.200Nginx节点2nginx-02172.16.1.201【部署推荐】①LVS建议以物理机进行部署避免虚机因为迁移而引发脑裂问题②Nginx服务器建议采用虚机形式部署提升可横向扩展性和资源利用效率【部署流程】一、临时关闭所有服务器防火墙和selinux后续建议开启防火墙并放通策略。# systemctl stop firewalld# systemctl disable firewalld# setenforce 0二、LVS服务器上安装keepalive和LVS执行命令# yum install -y keepalived ipvsadm三、加载IPVS内核模块并永久生效配置modprobe ip_vsmodprobe ip_vs_rrmodprobe ip_vs_wrrmodprobe ip_vs_sh#永久让模块生效需要写到对应配置文件。echo ip_vs /etc/modules-load.d/ipvs.confecho ip_vs_rr /etc/modules-load.d/ipvs.confecho ip_vs_wrr /etc/modules-load.d/ipvs.confecho ip_vs_sh /etc/modules-load.d/ipvs.conf四、本文采用DR模式首先在主LVS服务器上执行。其配置文件路径为/etc/keepalived/keepalived.conf下图为keepalived部分配置文件的截图。五、按照规划要求修改keepalived.conf文件如下所示下面本文详细介绍各个参数含义global_defs {router_id lvs_master #配置其keepalived标识同一集群名称不能重复建议与hostname保持一致。}# 健康Nginx健康状态脚本vrrp_script check_nginx {script /etc/keepalived/check_nginx.sh #执行检查的脚本interval 2 #间隔2sweight -60 #权重调整值关键脚本检测失败时当前节点的优先级会减60fall 2 #失败阈值连续2次检测失败判定为服务真的故障rise 2 #恢复阈值连续2次检测成功判定为服务恢复正常}#VRRP高可用实例段 vrrp_instance VI_1vrrp_instance VI_1 {state MASTER #指定其为主用interface enp4s1 # 实际网卡名virtual_router_id 61 #设置VRRP ID主备LVS的ID必须保持一致。priority 150 #设置优先级数值越大越为主用advert_int 1 #VRRP心跳间隔单位为秒#下面进行VRRP主备关系的鉴权信息主备LVS密码不一致建立不了主备关系。authentication {auth_type PASS #主用备用建立VRRP需要鉴权auth_pass Lvs_server2026! #一定不要用弱口令}#设置VIP地址并绑定到网卡virtual_ipaddress {172.16.1.100/24 dev enp4s1 label enp4s1:0 #绑定到enp4s1并起别名enp4s1:0}track_script {check_nginx}}# LVS转发规则的核心配置virtual_server 172.16.1.100 80 { #设置LVS虚拟服务监听的端口delay_loop 1 #LVS每隔多长时间检查后端真实服务器状态单位为秒lb_algo wrr #负载算法常见为加权wrr,轮询rr,哈希shlb_kind DR #LVS工作模式DR直接路由还有其它NAT、TUNpersistence_timeout 0 #会话保持时间protocol TCP #协议TCP# Nginx 01真实服务配置real_server 172.16.1.200 80 {weight 1 #权重TCP_CHECK {connect_timeout 3 #TCP超时时间单位秒nb_get_retry 3 #重试次数delay_before_retry 3 #重试间隔}}# Nginx 02real_server 172.16.1.201 80 {weight 1TCP_CHECK {connect_timeout 3}}}# 如果需要用 HTTPS 再加 443端口。配置含义与上相同。virtual_server 172.16.1.100 443 {delay_loop 1lb_algo wrrlb_kind DRpersistence_timeout 0protocol TCPreal_server 172.16.1.200 443 {weight 1TCP_CHECK {connect_timeout 3}}real_server 172.16.1.201 443 {weight 1TCP_CHECK {connect_timeout 3}}}六、备用LVS服务器与主用LVS服务器配置只有下面2处不同state BACKUPpriority 100七、两台LVS服务器上都需要放置检测脚本检测脚本路径为/etc/keepalived/check_nginx.sh检测脚本内容为#!/bin/bash# 脚本路径/etc/keepalived/check_nginx.sh# 功能适配Keepalived的vrrp_script检测后端Nginx健康状态# 返回值规范0检测成功有可用Nginx非0检测失败全部Nginx不可用# 配合vrrp_script的fall/rise参数连续2次失败则触发优先级调整# 配置参数根据你的实际环境修改# 后端Nginx服务器IP列表空格分隔填写你的2台Nginx IPNGINX_SERVERS(172.16.1.200 172.16.1.201)# Nginx健康检查端口默认80如有改动请修改如443CHECK_PORT80# 检测超时时间秒建议不超过interval的一半TIMEOUT1# 配置结束 # 初始化可用服务器计数AVAILABLE_COUNT0# 遍历检测每台Nginx服务器端口连通性检测for server in ${NGINX_SERVERS[]}; do# 使用nc检测端口timeout控制超时/dev/null屏蔽无关输出if timeout ${TIMEOUT} nc -z -w1 ${server} ${CHECK_PORT} /dev/null 21; then((AVAILABLE_COUNT))fidone# 根据可用数量返回结果Keepalived核心判断依据if [ ${AVAILABLE_COUNT} -gt 0 ]; then# 至少1台Nginx可用返回0检测成功exit 0else# 全部Nginx不可用返回1检测失败exit 1fi并且赋予这个脚本执行权限chmod x /etc/keepalived/check_nginx.sh七、启动KeepAlived服务并且设置成开机自启systemctl start keepalivedsystemctl enable keepalivedsystemctl status keepalived八、真实服务器的Nginx安装可以参考之前文章《Nginx在企业级生产环境部署与最佳实践》Nginx在企业级生产环境部署与最佳实践九、LVS使用的DR模式需要让Nginx响应VIP的请求但是不ARP广播VIP。因此在2台Nginx服务器上均需要进行配置。本文采用shell脚本实现。新建/usr/local/bin/lvs_nginx.sh文件然后在文件中写入下述内容#!/bin/bash# 检查是否为 root 用户执行if [ $UID -ne 0 ]; thenecho 错误必须以 root 权限执行此脚本exit 1fiVIP172.16.1.100case $1 instart)# 配置 ARP 忽略/通告参数避免 VIP 漂移echo 1 /proc/sys/net/ipv4/conf/all/arp_ignoreecho 2 /proc/sys/net/ipv4/conf/all/arp_announceecho 1 /proc/sys/net/ipv4/conf/lo/arp_ignoreecho 2 /proc/sys/net/ipv4/conf/lo/arp_announce# 配置 lo:0 别名接口兼容 ifconfig/ip 两种命令if command -v ifconfig /dev/null; thenifconfig lo:0 $VIP netmask 255.255.255.255 broadcast $VIP uproute add -host $VIP dev lo:0elseip addr add $VIP/32 dev lo label lo:0ip route add $VIP/32 dev lofiecho LVS-DR 模式已启用;;stop)# 关闭 lo:0 别名接口if command -v ifconfig /dev/null; thenifconfig lo:0 downelseip addr del $VIP/32 dev lo label lo:0ip route del $VIP/32 dev lofi# 恢复 ARP 参数默认值echo 0 /proc/sys/net/ipv4/conf/all/arp_ignoreecho 0 /proc/sys/net/ipv4/conf/all/arp_announceecho 0 /proc/sys/net/ipv4/conf/lo/arp_ignoreecho 0 /proc/sys/net/ipv4/conf/lo/arp_announceecho LVS-DR 模式已关闭;;*)echo Usage: $0 {start|stop}exit 1;;esac十、给脚本设置执行权限并且将启动脚本写到开机自启文件中chmod x /usr/local/bin/lvs_nginx.sh/usr/local/bin/lvs_nginx.sh startecho /usr/local/bin/lvs_nginx.sh start /etc/rc.localchmod x /etc/rc.local十一、给Nginx修改首页界面。这里我们分别给nginx-01和nginx-02修改主界面。echo “nginx-01” /usr/share/nginx/html/index.htmlecho “nginx-02” /usr/share/nginx/html/index.html如果想测试验证Nginx的高级特性动静分离和反向代理可以参考之前的文章《Nginx在企业级生产环境部署与最佳实践》Nginx在企业级生产环境部署与最佳实践十二、这里我们分别测试停止LVS查看业务状态。这时请求VIP业务不受影响。请求界面在nginx-01和nginx-02不断切换。十三、在这个时候我们再停掉其中一个Nginx这时LVS只将请求打给另外一台NginxLVS会自动剔除关掉的那个节点。【LVSNginxKeepAlived常见的运维命令】# 查看 LVS 连接ipvsadm -ln# 查看状态统计ipvsadm -l --stats# 清空规则ipvsadm -C# 日志跟踪journalctl -u keepalived -f# 查看 VIP 所在机器ip addr | grep 172.16.1.100

相关新闻

《Qt从零入门系列(一):Qt框架初识——从发展历史到跨平台开发》

《Qt从零入门系列(一):Qt框架初识——从发展历史到跨平台开发》

在正式开始之前,先给即将入坑Qt的朋友们提个醒:Qt的开发是建立在C之上的,不具备一定的 C基础会走得比较吃力。面向对象、继承多态、信号槽背后的函数指针机制,这些东西如果没有C底子兜着,很容易卡在半路。提前打好基础…

2026/10/10 21:26:14 阅读更多 →
为什么你的正射影像总在关键区域“拉花”“重影”?

为什么你的正射影像总在关键区域“拉花”“重影”?

在很多项目现场,最让人头疼的,往往不是无人机没飞起来。 而是飞完之后,图不能用。 前线团队跑了几趟,测区覆盖了,照片也拿回来了。 可一到拼接阶段,问题就来了——桥梁边缘被“扯花”,厂房屋顶出…

2026/10/12 18:33:39 阅读更多 →
华为云盘古大模型访问指南:从API调用到行业解决方案的完整路径

华为云盘古大模型访问指南:从API调用到行业解决方案的完整路径

1. 项目概述:从“入口”到“生态”的认知跃迁 当大家搜索“华为盘古3.0大模型的访问入口在哪里?”时,我特别能理解这种心情。这背后通常不是单纯地找一个网址或一个登录按钮,而是一个更核心的诉求: “我该如何开始使用…

2026/10/6 1:35:27 阅读更多 →

最新新闻

进销存管理系统数据库设计:从建表SQL到存储过程触发器实战

进销存管理系统数据库设计:从建表SQL到存储过程触发器实战

简介:这是一份数据库课程设计完整参考项目——某商店进销存管理系统,面向计算机类专业学生、数据库初学者及需要完成课设的开发者,用于解决数据库原理课程设计中从系统分析到数据库实现的全流程问题。资源为RAR压缩包,共3个文件&a…

2026/10/13 5:38:34 阅读更多 →
轻量级任务流引擎 rea:把重复操作变成一条命令行流水线

轻量级任务流引擎 rea:把重复操作变成一条命令行流水线

周五下午,我盯着屏幕上那个快要跑完的批处理任务,心里很清楚:今天这已经是第七次重复同样的操作了。从压缩日志、生成报表、按规则归档,到清理临时目录、把结果文件挪到共享目录,每一步单独看都不复杂,合在…

2026/10/13 5:38:34 阅读更多 →
Spring Boot集成AI对话接口:从零搭建HR政策问答机器人

Spring Boot集成AI对话接口:从零搭建HR政策问答机器人

1. 项目定位:为什么是 Spring Boot AI 对话接口1.1 HR 政策问答机器人的核心需求拆解这个项目叫“AI全栈12-02”,名字里已经透露出完整的信息:它属于一条 AI 全栈学习路线的中期实践,前一步多半是把模型 API 跑通,从这…

2026/10/13 5:38:34 阅读更多 →
CS2启动器Overflow闪退根源与显存调度修复指南

CS2启动器Overflow闪退根源与显存调度修复指南

1. 问题本质:这不是“闪退”,而是内存管理机制被触发的保护性中断 “CS2更新后Valve界面闪退、Overflow溢出错误”——这个标题里藏着一个被广泛误读的关键点。很多用户一看到“闪退”就下意识归因于显卡驱动或系统兼容性,甚至反复重装客户端…

2026/10/13 5:38:34 阅读更多 →
x64dbg动态调试实战:环境配置、脚本自动化与避坑指南

x64dbg动态调试实战:环境配置、脚本自动化与避坑指南

简介:x64dbg 2025版逆向调试工具,面向软件安全分析人员、恶意代码逆向工程师以及CTF竞赛爱好者,用于在缺少源码、难以静态阅读的场景下开展动态调试,覆盖断点控制、单步跟踪、内存与寄存器监控、异常处理等核心操作,并…

2026/10/13 5:38:34 阅读更多 →
大厂Python编码规范的核心要点与工程实践

大厂Python编码规范的核心要点与工程实践

1. 为什么大厂如此重视Python编码规范?第一次接触Google的Python代码时,我盯着那些整齐划一的import分组和严格的命名规则发了半天呆。当时很不理解为什么要把时间花在这些"表面功夫"上,直到后来自己维护了三个月前的代码才恍然大悟…

2026/10/13 5:37:33 阅读更多 →

日新闻

物联网系统集成避坑指南:从选型到验收的关键要点

物联网系统集成避坑指南:从选型到验收的关键要点

做了这么多年物联网系统集成的项目,我最大的感受是,大部分坑不是出在技术前沿,而是出在一些看起来很平常的地方。设备选了便宜的、协议没问清楚、现场没摸透、验收标准写得含糊——这些细枝末节,最后都会变成延期、超支和扯皮的大…

2026/10/13 0:00:57 阅读更多 →
ESP32舵机控制全攻略:从PWM原理到高级玩法与常见故障排查

ESP32舵机控制全攻略:从PWM原理到高级玩法与常见故障排查

如果你玩ESP32有一阵子了,很难不碰到舵机控制这道坎。做智能小车要转方向,做机械臂要抬关节,做云台要偏航俯仰,背后都是同一个东西在干活:舵机。而我见过太多人卡在“代码能编译、舵机就是不听话”这个阶段&#xff0c…

2026/10/13 0:00:57 阅读更多 →
CAN总线原理与STM32实战:抗干扰、仲裁、错误处理全解析

CAN总线原理与STM32实战:抗干扰、仲裁、错误处理全解析

1. 为什么CAN总线至今仍是工业现场的“硬通货”?——从汽车底盘到智能温室的真实需求你有没有拆过一辆老款燃油车的中控台?或者调试过某高校实验室里那台跑着Modbus协议却频频丢帧的PLC控制柜?又或者,在某个农业物联网项目里&…

2026/10/13 0:00:57 阅读更多 →

周新闻

流感时间序列预测实战:ARIMA/LSTM全流程拆解与避坑指南

流感时间序列预测实战:ARIMA/LSTM全流程拆解与避坑指南

简介:基于 ARIMA、LSTM、Transformer 等模型的流感时间序列预测 Python 源码,面向计算机相关专业课程设计与期末大作业学生,以及项目实战学习者。内容覆盖预处理、平稳性检验、定阶、残差分析、多模型对比预测的完整时序建模流程,…

2026/10/13 2:54:56 阅读更多 →
影刀RPA新手教程:键盘模拟输入实战——输入文本与模拟按键的区别

影刀RPA新手教程:键盘模拟输入实战——输入文本与模拟按键的区别

影刀RPA新手教程:键盘模拟输入实战——输入文本与模拟按键的区别 做影刀RPA自动化,十个新手有八个栽在"往输入框里填东西"这件事上:要么填不进去,要么填了一半,要么直接把原来内容追加在后面。这背后的根因&…

2026/10/12 0:16:38 阅读更多 →
影刀RPA新手教程:阅文起点小说数据采集实战——书籍信息与章节内容

影刀RPA新手教程:阅文起点小说数据采集实战——书籍信息与章节内容

影刀RPA新手教程:阅文起点小说数据采集实战——书籍信息与章节内容 1. 认识影刀:什么场景该用RPA采小说数据 起点中文网的页面结构相对稳定——分类榜单、书籍详情、章节内容三块独立页面,跳转链路清晰。这种场景非常适合影刀自动化&#x…

2026/10/13 1:58:08 阅读更多 →

月新闻

我发现了一个新思路:用 Remotion + Claude Code 像写代码一样自动化生成短视频

我发现了一个新思路:用 Remotion + Claude Code 像写代码一样自动化生成短视频

/* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views …

2026/10/12 21:05:09 阅读更多 →
Windows下 Codex 中 Chrome 和 Computer Use 插件不可用问题排查及解决参考方式:TaoToken 统一 Key 配置与验证

Windows下 Codex 中 Chrome 和 Computer Use 插件不可用问题排查及解决参考方式:TaoToken 统一 Key 配置与验证

/* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views …

2026/10/12 14:48:49 阅读更多 →
黑夜航拍船只数据集训练YOLOV5模型全流程解析

黑夜航拍船只数据集训练YOLOV5模型全流程解析

/* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views …

2026/10/12 18:11:17 阅读更多 →