当前位置: 首页 > news >正文

Nginx+Keepalived:Linux高可用负载均衡配置实战

Nginx+Keepalived:Linux高可用负载均衡配置实战

在高流量、高可用的 Web 应用环境中,单台Nginx服务器易成为性能瓶颈,并存在单点故障风险。为保障 Web 服务的连续性和可用性,通常采用负载均衡技术。Keepalived结合 Nginx,可在Linux平台上构建高可用负载均衡集群,实现故障自动切换,提升系统健壮性。本文以实战为导向,提供详细的配置步骤,阐述如何在 Linux 环境下配置 Nginx 和 Keepalived,打造具备自动容错能力的高可用负载均衡系统,并提供关键配置步骤和问题排查方案,助力读者掌握 Nginx Keepalived Linux 配置技巧。

为何采用 Nginx+Keepalived 构建 Linux 高可用负载均衡

在现代 Web 应用架构中,服务可用性至关重要。服务器宕机导致的服务中断会严重影响用户体验,甚至造成经济损失。传统的单点 Nginx 部署存在固有风险,无法满足高可用需求。Nginx+Keepalived方案旨在解决这一问题,通过 Keepalived 监控 Nginx 服务状态,并在检测到故障时自动将虚拟 IP 漂移到备用服务器,实现流量的无缝切换,确保服务高可用。这种架构尤其适合对服务连续性有严格要求的在线服务,如电商平台、在线支付系统等。Nginx 负责反向代理和负载均衡,Keepalived 负责监控 Nginx 状态和进行故障转移,二者协同保障服务稳定运行。

Nginx+Keepalived 是构建高可用 Web 服务的有效方案,能够显著提升系统的稳定性和容错能力。

Linux 环境下 Nginx+Keepalived 高可用负载均衡的实战配置步骤

本节详细介绍如何在 Linux 环境下配置 Nginx 和 Keepalived,搭建高可用负载均衡系统。目标是提供一份可操作的指南,确保读者能够按照步骤搭建高可用负载均衡系统。假设有两台 Linux 服务器,分别命名为node1node2,IP 地址分别为192.168.1.101192.168.1.102。配置一个虚拟 IP 地址192.168.1.100,作为客户端访问的统一入口,实现 Nginx 的高可用。

1. 在 Linux 系统上安装与配置 Nginx

首先,在node1node2上安装 Nginx。推荐使用系统自带的包管理器进行安装,例如yum(CentOS) 或apt(Ubuntu/Debian)。使用包管理器可以简化安装过程,并自动处理依赖关系。

以 CentOS 为例,执行以下命令:

sudo yum install nginx -y sudo systemctl start nginx sudo systemctl enable nginx

这些命令依次完成 Nginx 的安装、启动和设置开机自启。安装完成后,Nginx 默认监听 80 端口。

2. 将 Nginx 配置为 Linux 反向代理服务器

配置 Nginx 作为反向代理服务器,将客户端请求转发到后端服务器集群。编辑 Nginx 配置文件 (通常位于/etc/nginx/nginx.conf/etc/nginx/conf.d/default.conf),添加upstream模块,定义后端服务器列表。upstream模块定义了一组后端服务器,Nginx 可以根据轮询或其他策略选择其中一台来处理请求。通过反向代理,Nginx 可以隐藏后端服务器的真实 IP 地址,提高安全性。

示例配置:

upstream backend { server 192.168.1.11:80; # 后端服务器 1 server 192.168.1.12:80; # 后端服务器 2 } server { listen 80; server_name example.com; location / { proxy_pass http://backend; proxy_set_header Host $host; proxy_set_header X-Real-IP $remote_addr; } }

这段配置定义了一个名为 `backend` 的 upstream,其中包含两台后端服务器。`proxy_pass` 指令将所有请求转发到 `backend` 定义的服务器组。

修改完成后,重启 Nginx 服务使配置生效:

sudo systemctl restart nginx

3. 在 Linux 系统上安装 Keepalived

node1node2上安装 Keepalived。同样,推荐使用包管理器进行安装。

以 CentOS 为例:

sudo yum install keepalived -y

4. 配置 Keepalived 实现 Linux 平台 Nginx 服务的故障转移

配置 Keepalived,使其监控 Nginx 的运行状态。当 Keepalived 检测到 Nginx 发生故障时,自动将虚拟 IP 地址切换到备用服务器,实现故障转移。Keepalived 的主配置文件通常位于/etc/keepalived/keepalived.conf。以下分别是主节点和备节点的配置示例。

node1(Master) 配置:

! Configuration File for keepalived global_defs { router_id LVS_DEVEL } vrrp_script chk_nginx { script "/etc/keepalived/check_nginx.sh" interval 2 weight 2 fall 2 rise 1 } vrrp_instance VI_1 { state MASTER interface eth0 # 根据实际网卡名称修改 virtual_router_id 51 priority 100 advert_int 1 authentication { auth_type PASS auth_pass 1111 } virtual_ipaddress { 192.168.1.100 # 虚拟 IP 地址 } track_script { chk_nginx } }

这段配置定义了 Keepalived 的全局参数和一个 VRRP 实例。`router_id` 用于标识路由器,`vrrp_script` 定义了健康检查脚本,`vrrp_instance` 定义了 VRRP 实例的参数,包括状态、接口、虚拟路由器 ID、优先级、虚拟 IP 地址和跟踪脚本。

node2(Backup) 配置:

! Configuration File for keepalived global_defs { router_id LVS_DEVEL } vrrp_script chk_nginx { script "/etc/keepalived/check_nginx.sh" interval 2 weight 2 fall 2 rise 1 } vrrp_instance VI_1 { state BACKUP interface eth0 # 根据实际网卡名称修改 virtual_router_id 51 priority 90 advert_int 1 authentication { auth_type PASS auth_pass 1111 } virtual_ipaddress { 192.168.1.100 # 虚拟 IP 地址 } track_script { chk_nginx } }

备节点的配置与主节点类似,主要区别在于 `state` 设置为 `BACKUP`,`priority` 设置为低于主节点的值。这确保了主节点优先成为 Master,当主节点故障时,备节点自动接管。

5. 创建 Nginx 健康检查脚本(Linux 平台)

创建 Nginx 健康检查脚本 (例如/etc/keepalived/check_nginx.sh),用于定期检查 Nginx 是否正常运行。如果 Nginx 停止运行,该脚本应返回非零错误代码,触发 Keepalived 的故障切换机制。该脚本是 Keepalived 判断 Nginx 服务是否健康的关键,务必保证其准确性。

脚本内容示例:

#!/bin/bash nginx_pid=`pidof nginx` if [ -z "$nginx_pid" ]; then exit 1 else exit 0 fi

这个脚本通过 `pidof nginx` 命令查找 Nginx 进程,如果找不到进程,则返回 1,表示 Nginx 故障。

赋予脚本执行权限:

sudo chmod +x /etc/keepalived/check_nginx.sh

6. 启动 Linux 上的 Keepalived 服务

node1node2上启动 Keepalived 服务:

sudo systemctl start keepalived sudo systemctl enable keepalived

启动服务后,可以使用ip addr命令验证虚拟 IP 地址是否已分配到node1上。如果node1发生故障,虚拟 IP 地址将自动切换到node2上,从而实现高可用性。

下表总结了配置 Nginx+Keepalived 高可用负载均衡的关键参数:

参数描述node1 (Master)node2 (Backup)
stateKeepalived 实例的角色MASTERBACKUP
interface监听的网络接口名称eth0(根据实际情况修改)eth0(根据实际情况修改)
virtual_router_id虚拟路由器的唯一 ID,Master 和 Backup 必须一致5151
priority优先级,Master 必须高于 Backup10090
virtual_ipaddress虚拟 IP 地址,客户端访问的统一入口192.168.1.100192.168.1.100

Nginx+Keepalived 常见问题与 Linux 环境下的排查思路

配置 Nginx+Keepalived 高可用负载均衡系统时,可能会遇到各种问题。以下是一些常见问题及相应的排查思路,侧重于 Linux 环境下的诊断方法,帮助读者快速定位并解决问题:

  • 虚拟 IP 地址无法正常切换:检查 Keepalived 配置文件是否正确,重点关注virtual_router_idpriorityinterface等参数是否配置一致。同时,确认健康检查脚本能够正常执行并返回正确的结果。
  • Nginx 服务无法正常启动:检查 Nginx 配置文件是否存在语法错误。可以使用nginx -t命令进行语法检查。
  • 后端服务器无法正常访问:检查网络连接是否正常。可以使用ping命令测试网络连通性。同时,检查 Nginx 配置文件中的upstream模块是否正确配置,确保后端服务器地址正确。

如果虚拟 IP 地址无法正常切换,首先应检查 Keepalived 的日志文件 (通常位于/var/log/messages/var/log/syslog),查找错误信息。根据错误信息,可以进一步定位问题。此外,使用tcpdump抓包分析 VRRP 协议的通信情况也有助于诊断网络层面的问题,例如网络延迟或丢包。

Nginx+Keepalived 高可用负载均衡配置要点

要点小结:

  • 正确配置 Keepalived 文件,特别是virtual_router_idinterface,确保主备节点配置一致。
  • 健康检查脚本应准确反映 Nginx 运行状态,避免误判。
  • 使用nginx -t检查 Nginx 配置文件,确保配置正确。
  • 使用ping测试服务器网络连通性,排除网络故障。
  • 查看 Keepalived 日志文件定位问题,快速诊断故障原因。
  • 使用tcpdump分析 VRRP 协议通信,排查网络层面的问题。
  • 虚拟 IP 地址是客户端访问的统一入口,确保配置正确。
http://www.jsqmd.com/news/525545/

相关文章:

  • 保姆级教程:用nmcli命令让Nanopi R4S的MT7601U网卡稳定连接WiFi(附固件安装指南)
  • 如何通过OpCore Simplify实现OpenCore EFI自动化构建:5步解决黑苹果配置难题
  • 三维重建中的投影变换:从平行到透视,一文搞懂所有核心概念(附矩阵公式详解)
  • 全压过认证36W碳化硅方案(24V1.5A/12V3A),主芯片LP3798ESM
  • 如何三步快速下载国家中小学智慧教育平台电子课本?
  • 多目标点路径规划——蚁群+A*算法融合算法 解决室内旅行商问题 1 A*算法规划两两之间的路径...
  • Unity AR项目在Android上没声音?手把手教你配置Google TTS解决RT-Voice打包问题
  • DeepSeek-OCR-2新手教程:手把手教你配置Python环境
  • 多模态实践:OpenClaw+Qwen3.5-9B分析产品截图反馈
  • 2026年PLC培训优质机构推荐榜聚焦就业竞争力:PLC好学吗/PLC编程入门/PLC编程培训/plc电气工程师/选择指南 - 优质品牌商家
  • LoRA训练助手应用场景:AI艺术策展人LoRA风格档案库构建工具
  • 除了888端口,宝塔phpmyadmin连接失败?深度解析Nginx与PHP服务协同的‘隐形杀手’
  • 大分辨率屏幕下Cesium倾斜摄影加载报错?手把手教你调优3DTiles参数避免WebGL崩溃
  • 华为虚拟防火墙在云原生环境中的实战配置指南
  • BERT文本分割模型在Python爬虫数据处理中的实战应用
  • 基于Matlab脚本的伯德图坐标纸批量生成与定制化实践
  • 从零部署【书生·浦语】internlm2-chat-1.8b:Ollama镜像免配置实操手册
  • TradingAgents-CN:如何用AI多智能体架构重塑智能投资决策
  • 摒弃传统固定阀值报警,程序让仪器根据环境变化,自适应调整报警阀值,减少误报。
  • 不止于解决乱码:深入TextMeshPro Font Asset Creator,打造你的专属高清中文字体库
  • 告别C盘空间焦虑!保姆级教程:在Win11 D盘/E盘安装带图形界面的WSL2 Ubuntu
  • GESP2026年3月认证C++五级( 第三部分编程题(1)有限不循环小数 )
  • ArcGIS小白必看:5分钟搞定shp文件经纬度坐标导出为txt(附详细步骤截图)
  • Python入门者福音:用MiniCPM-V-2_6作为你的智能编程导师
  • Java异常处理的艺术与最佳实践,iOS26 打开开发者模式。
  • 会议征稿!2026年制造工程与数字仿真国际学术会议(MEDS 2026)
  • PMSM、直流无刷、三相异步电机矢量控制程序及双三闭环c代码(适用于DSP28335与FOC ...
  • SMS VoIP科普:打破通信壁垒的互联网短信新方式
  • ICLR2022技术解析:AV-HuBERT如何通过多模态掩码预测革新语音视觉表征学习
  • Xshell下Ubuntu安装redis