尧图网络 高端网站定制 · 原创设计
免费咨询热线
400-888-6620
免费获取方案
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
RELATED

相关推荐

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

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

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

📅 2026/9/10 1:15:20
为什么你的正射影像总在关键区域“拉花”“重影”?

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

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

📅 2026/8/21 7:38:36
华为云盘古大模型访问指南:从API调用到行业解决方案的完整路径

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

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

📅 2026/8/21 7:39:02
MORE NEWS

更多资讯

📰

2026游戏客服成本高、响应慢、出海合规难?这套一体化方案被多家头部公司验证过了

引言做游戏运营的人,对下面这些场景一定不陌生:玩家半夜充值不到账,客服没人响应,第二天差评已经刷屏;出海游戏玩家用LINE咨询,客服团队却只会用微信后台;每月客服人力成本几十万,但…

📰

Kali Linux渗透测试环境搭建:新手必学工具与基础配置详解

一、引言:装好 Kali ≠ 能干活 几乎所有网安新手的第一个动作都是"装个 Kali"。但真实情况往往是:虚拟机装完了,apt upgrade 一跑,桌面崩了;工具装了一堆,扫描时却连靶机都 ping 不通&#xff1b…

📰

linux-command 项目实战:grub2-set-default 命令详解——设置 GRUB 默认启动内核的完整指南

文档教程 【免费下载链接】linux-command Linux命令大全搜索工具,内容包含Linux命令手册、详解、学习、搜集。https://git.io/linux 项目地址: https://gitcode.com/GitHub_Trending/linux/linux-command 点击查看 免费下载 导读 grub2-set-default 是…

📰

en.javascript.info 逻辑运算符实战:深入解析 `alert( alert(1) alert(2) )` 的输出与短路求值

文档/教程前端 【免费下载链接】en.javascript.info Modern JavaScript Tutorial 项目地址: https://gitcode.com/gh_mirrors/en/en.javascript.info 点击查看 免费下载 导读 本篇文章基于 en.javascript.info(Modern JavaScript Tutorial&#xff09…

📰

Grok 4.7 API升级详解:稳定性优化与开发者适配指南

1. Grok 4.7 不是“新模型”,而是API层的一次精准外科手术 Grok 4.7 这个名字一出来,很多开发者第一反应是:“又出新大模型了?”——其实不是。它既不是参数量翻倍的下一代,也不是架构重构的全新版本,而是…

📰

Agent 开发实战:用 Laya 和 Jev 构建判断器,让智能体从能跑到靠谱

1. 从“能跑”到“靠谱”:为什么你的 Agent 需要一个判断器做 Agent 开发的朋友大概率都经历过这个阶段:Demo 跑通了,工具调用也接上了,看着模型一步步执行任务,感觉一切都很美好。但一旦把它放到真实场景里&#xff0…

TODAY

今日更新

THIS WEEK

本周精选

THIS MONTH

本月热门

读完文章,想聊聊您的网站?

告诉我们您的行业与需求,资深顾问一对一梳理方案与报价,全程免费。

📞 💬