Linux内核之外的运维宇宙
Linux运维实战笔记:从系统架构到自动化运维

nginx高可用keepalived配置

1.高可用的基本介绍

在使用 Nginx 做反向代理或者负载均衡的时候,都是以 Nginx 为入口,如果 Nginx 宕机了,那么所有的服务都无法正常提供,影响非常严重。所有我们需要保证 nginx 高可用,就是配置备份机,前一个挂了,还有后一个。

为了避免负载均衡服务器宕机造成严重影响,就需要建立一个备份机。主服务器和备份机上都运行高可用(High Availability)监控程序,通过传送诸如“I am alive”这样的信息来监控对方的运行状况。当备份机不能在一定的时间内收到这样的信息时,它就接管主服务器的服务IP并继续提供负载均衡服务;当备份管理器又从主管理器收到“I am alive”这样的信息时,它就释放服务IP地址,这样的主服务器就开始再次提供负载均衡服务。

高可用(High Availability)是分布式系统架构设计中必须考虑的因素之一,它通常是指,通过设计减少系统不能提供服务的时间。如果一个系统能够一直提供服务,那么这个可用性则是百分之百,但是我们不能保证一个系统能永远不出问题,所以我们只能通过设计来尽可能的去减少由于系统的故障所造成的影响。

2.keepalived原理

我们可以通过 keepalived 来实现 Nginx 的高可用,keepalived 是集群管理中保证集群高可用的一个服务软件,用来防止单点故障。Keepalived的作用是检测 web 服务器的状态,如果有一台 web 服务器死机或工作出现故障,Keepalived 将能检测到,并将有故障的 web 服务器从系统中剔除,当web服务器工作正常后 Keepalived 会自动将该 web 服务器加入到服务器群中。这些工作全部都会自动完成,不需要人工干涉,需要人工做的只是修复故障的web服务器。keepalived 可以理解为一个健康检查的软件。

高可用至少需要 2 台服务器,主备都得装上keepalived,当请求访问主服务器时,备份服务器会一直检查主服务器的状态。

keepalived 需要绑定一个虚拟地址 vip ( Virtual IP Address ) ,这个虚拟 ip 地址绑定在哪台服务器上请求就会发送到哪台服务器,一开始会绑定在主服务器上。

img

3.keepalived配置文件/etc/keepalived/keepalived.conf

主服务器 Keepalived 配置 (/etc/keepalived/keepalived.conf)

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 {
        10.138.66.21  # 虚拟 IP
    }
}

vrrp_script chk_http {
    script "/usr/local/src/nginx_check.sh"  # 检测脚本路径
    interval 2  # 检测间隔
    weight 2  # 权重
}

备服务器 Keepalived 配置 (/etc/keepalived/keepalived.conf)

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 {
        10.138.66.21  # 虚拟 IP
    }
}

vrrp_script chk_http {
    script "/usr/local/src/nginx_check.sh"  # 检测脚本路径
    interval 2  # 检测间隔
    weight 2  # 权重
}

4.上面的配置文件中我们配置了检测脚本的名称和位置,即 /usr/local/src/nginx_check.sh,根据配置我们需要往主备服务器的 /usr/local/src 目录下分别创建一个 nginx_check.sh 脚本文件,文件内容如下:

#! /bin/bash
#检测nginx是否启动了
A=`ps -C nginx -no-header | wc - 1`
if [ $A -eq 0];then    #如果nginx没有启动就启动nginx 
    /usr/local/nginx/sbin/nginx    #通过Nginx的启动脚本来重启nginx
    sleep 2
    if [`ps -C nginx --no-header| wc -1` -eq 0 ];then   #如果nginx重启失败,则下面就会停掉keepalived服务,进行VIP转移
        killall keepalived
    fi
fi

上面的检测脚本的作用是,当检测到 nginx 挂掉但如果此时 keepalived 没挂掉,该脚本会主动尝试重启nginx服务,如果实在重启不了nginx,该脚本会主动关闭 keepalived 好让备份服务器的 nginx 替代上来。

最后分别启动主备服务器的 Nginx 和 keepalived
posted on 2025-05-22 15:36  一叶舟-小刀哥  阅读(34)  评论(0)    收藏  举报