反馈已提交

网络繁忙

Keepalived+Nginx部署方案

  • 文档创建者:朵拉
  • 历史版本:11
  • 最近更新:Carly 于 2025-12-09
  • icon提示:
    运维平台部署的帆软项目,其中包含帆软内网关组件。其对帆软业务进行了定制调整,以均衡的分发用户请求,提升性能,因此不支持用户自备,不支持进行自定义修改。请勿参照本文对内网关组件进行任何修改!


    1. 概述

    软件简介:

    Keepalived和Nginx是两个常见的开源软件,可以用于在多个服务器上实现高可用性负载均衡。

    • Keepalived是一个基于VRRP协议的Linux守护进程,用于实现高可用、负载均衡和故障切换。

    • Nginx是一个高性能的Web服务器和反向代理服务器,可以处理静态和动态内容,以及HTTP和HTTPS请求,支持负载均衡和反向代理。

    工作原理:

    通过Keepalived在多台服务器上共享虚拟IP地址(VIP),将所有流量转发到Nginx代理服务器

    然后该Nginx服务器将负载均衡请求分配到一组Web服务器,这些Web服务器可以是具有相同或不同IP地址的多台服务器。

    方案特点:

    使用Keepalived+Nginx集群可以帮助提高Web应用程序的可用性和性能,也可以减小服务器的单点故障风险。

    实现高可用性和负载均衡需要综合考虑网络架构、硬件配置、软件版本和实际环境,需要更复杂的架构和软件配置。

    概念简介:

    • Virtual Router Redundancy Protocol(VRRP):用于在多个路由器之间共享互联网连接的协议。

    • Virtual IP(VIP):是一个虚拟地址,可以被多个服务器共享。当主节点故障时,VIP可以自动转移到备用节点上。

    • Health Check:检查服务器的可用性并根据策略自动切换故障节点到备用节点。

    2. 准备服务器

    如需部署Keepalived+Nginx,需要准备两个服务器。

    服务器
    服务器IP


    主服务器192.168.5.249


    从服务器192.168.5.103


    注:VIP 为虚拟 IP ,不被占用前提下可自定义。


    VIP服务器 IP主机名nginx 端口默认主从

    192.168.5.200192.168.5.249
    ethan380MASTER

    192.168.5.200192.168.5.103
    localhost.localdomain80BACKUP

    3. 外网用户方案

    3.1 安装 Nginx

    两个服务器上安装配置 Nginx 。具体步骤请参见:Linux系统安装配置Nginx 

    3.2 安装 Keepalived

    两个服务器上安装 Keepalived 。

    执行命令:

    yum -y install keepalived

    3.3 设置 keepalived 服务开机启动

    两个服务器都需要执行下面语句。语句如下所示:

    chkconfig keepalived on

    4.png

    3.4 修改 Keepalived 的配置文件

    路径为/etc/keepalived/keepalived.conf

    3.4.1 MASTER 节点配置文件

    ! Configuration File for keepalived
    global_defs {
    ## keepalived 自带的邮件提醒需要开启 sendmail 服务。 建议用独立的监控或第三方 SMTP
     router_id ethan3 ## 标识本节点的字条串,通常为 hostname

    ## keepalived 会定时执行脚本并对脚本执行的结果进行分析,动态调整 vrrp_instance 的优先级。如果脚本执行结果为 0,并且 weight 配置的值大于 0,则优先级相应的增加。如果脚本执行结果非 0,并且 weight配置的值小于 0,则优先级相应的减少。其他情况,维持原本配置的优先级,即配置文件中 priority 对应的值。
    vrrp_script chk_nginx {
     script "/etc/keepalived/nginx_check.sh" ## 检测 nginx 状态的脚本路径
     interval 2 ## 检测时间间隔
     weight -20 ## 如果条件成立,权重-20
    }
    ## 定义虚拟路由, VI_1 为虚拟路由的标示符,自己定义名称
    vrrp_instance VI_1 {
     state MASTER ## 主节点为 MASTER, 对应的备份节点为 BACKUP
     interface eno16777736 ## 绑定虚拟 IP 的网络接口,与本机 IP 地址所在的网络接口相同。
     virtual_router_id 33 ## 虚拟路由的 ID 号, 两个节点设置必须一样, 可选 IP 最后一段使用, 相同的 VRID 为一个组,他将决定多播的 MAC 地址
     mcast_src_ip 192.168.5.249 ## 本机 IP 地址
     priority 200 ## 节点优先级, 值范围 0-254, MASTER 要比 BACKUP 高
     advert_int 1 ## 组播信息发送间隔,两个节点设置必须一样, 默认 1s
     ## 设置验证信息,两个节点必须一致
     authentication {
      auth_type PASS
      auth_pass 1111 ## 真实生产,按需求对应该过来
     }
     ## 将 track_script 块加入 instance 配置块
     track_script {
      chk_nginx ## 执行 Nginx 监控的服务
     } #
     # 虚拟 IP 池, 两个节点设置必须一样
     virtual_ipaddress {
      192.168.5.200 ## 虚拟 ip,可以定义多个
     }
    }

    3.4.2 BACKUP 节点配置文件

    ! Configuration File for keepalived
    global_defs {
     router_id localhost.localdomain
    }
    vrrp_script chk_nginx {
     script "/etc/keepalived/nginx_check.sh"
     interval 2
     weight -20
    }
    vrrp_instance VI_1 {
     state BACKUP
     interface ens192
     virtual_router_id 33
     mcast_src_ip 192.168.5.103
     priority 90
     advert_int 1
     authentication {
      auth_type PASS
      auth_pass 1111
     }
     track_script {
      chk_nginx
     }
     virtual_ipaddress {
      192.168.5.200
     }
    }

    需要注意的配置说明:

    1)router_id ethan3 ## 标识本节点的字条串,通常为 hostname 。

    在服务器中使用语句hostname可得出。如下图所示:

    1641974851329444.png

    2)script "/etc/keepalived/nginx_check.sh" ## 检测 nginx 状态的脚本路径,无需修改,参考本文 3.5 节。

    3)state MASTER/BACKUP ##说明主备。

    4)interface eno16777736 ## 绑定虚拟 IP 的网络接口,与本机 IP 地址所在的网络接口相同。

    使用ip a可得出。如下图所示:

    注:主节点配置文件中该值为主节点网卡号;备节点配置文件中该值为备节点网卡号。

    1641974942332551.png

    5)mcast_src_ip 192.168.5.249 ## 本机 IP 地址。

    6)priority 200 ## 节点优先级, 值范围 0-254, MASTER 要比 BACKUP 高。

    7)virtual_ipaddress ##虚拟 ip,即VIP,可自定义,可定义多个。

    3.5 编写 Nginx 状态启动脚本

    两个服务器上都需要编写下面文件,根据实际情况修改 nginx 路径。

    编写 Nginx 状态检测脚本 /etc/keepalived/nginx_check.sh (已在 Keepalived.conf 中配置)脚本要求。

    #!/bin/bash
    A=`ps -C nginx --no-header |wc -l`
    if [ $A -eq 0 ];then
    /usr/nginx/sbin/nginx
    sleep 2
    if [ `ps -C nginx --no-header |wc -l` -eq 0 ];then
     killall keepalived
    fi
    fi

    赋予文件权限:chmod +x /etc/keepalived/nginx_check.sh 

    3.6 启动 Keepalived

    两个服务器都执行下面语句:

    systemctl start keepalived

    3.7 效果查看

    注:节点上有虚拟 IP 时,可通过虚拟 IP 访问相应的 nginx 及下面相应的文件。

    1)使用ip addr语句,可以看到虚拟 IP 192.168.5.200 绑定在了 MASTER 服务器上面。如下图所示:

    1641973992565967.png

    而 BACKUP 节点上没有虚拟 IP 。如下图所示:

    1641974146900091.png

    2)使用systemctl stop keepalived停掉主节点的 keepalived 服务,备节点上有虚拟 IP 。如下图所示:

    1641974581124305.png

    4. 内网用户方案

    4.1 步骤说明

    内网用户无法在线安装 Keepalived ,与外网用户方案不同点在于 3.2 节,其他步骤相同。

    4.2 离线安装 Keepalived

    两个服务器都需要做下面步骤。

    4.2.1 安装步骤

    1)下载安装包。访问网址:https://www.keepalived.org/download.html 并下载 Keepalived 的安装包。

    2)解压安装。

    将安装包上传到服务器某个文件夹下(文档示例为:/wendy),进入安装包所在文件夹后,进行下面操作:

    cd /wendy
    tar -zxvf keepalived-2.0.18.tar.gz   # 解压
    cd /wendy/keepalived-2.0.18  # 路径根据实际情况修改
    ./configure --prefix=/usr/local/keepalived   # 编译
    make && make install   # 安装

    4.2.2 将 Keepalived 安装成 Linux 系统服务

    1)复制keepalived.conf文件到/etc/keepalived/下。

    mkdir /etc/keepalived
    cp /wendy/keepalived-2.0.18/keepalived/etc/keepalived/keepalived.conf /etc/keepalived/

    2)复制 keepalived 服务脚本到默认的地址:

    cp /wendy/keepalived-2.0.18/keepalived/etc/init.d/keepalived /etc/init.d/
    cp /wendy/keepalived-2.0.18/keepalived/etc/sysconfig/keepalived /etc/sysconfig/



    附件列表


    主题: 部署集成
    • 有帮助
    • 没帮助
    • 只是浏览
    中文(简体)

    鼠标选中内容,快速反馈问题

    鼠标选中存在疑惑的内容,即可快速反馈问题,我们将会跟进处理。

    不再提示

    10s后关闭



    AI

    联系我们
    在线支持
    获取专业技术支持,快速帮助您解决问题
    工作日9:00-12:00,13:30-17:30在线
    页面反馈
    针对当前网页的建议、问题反馈
    售前咨询
    采购需求/获取报价/预约演示
    或拨打: 400-811-8890 转1
    qr
    热线电话
    咨询/故障救援热线:400-811-8890转2
    总裁办24H投诉:17312781526
    提交页面反馈
    仅适用于当前网页的意见收集,帆软产品问题请在 问答板块提问前往服务平台 获取技术支持