目录

使用Keepalived来实现Nginx高可用

公有云不会考虑这些,不过自建机房,使用nginx做入口,keepalived是唯一的选择。

节点 IP
keepalived主 192.168.13.45
keepalived备 192.168.13.44
vip 192.168.13.46

keepalived主节点配置

! Configuration File for keepalived

global_defs {
    router_id 192.168.13.45     # 当前节点主机标识符,全局唯一
    script_user root            # 脚本执行者
    enable_script_security      # 标记脚本安全
}

vrrp_script chk_nginx {
    script "/data/tools/check_nginx.sh"     # 脚本路径
    interval 2                              # 脚本执行间隔,单位s
    weight -20                              # -254-254之间,检测失败权重减少
}

vrrp_instance VI_1 {                        # 实例名
    state MASTER                            # 当前keepalived状态
    interface eth0
    virtual_router_id 251                   # ID主备需一致,同一网络内多个keepalived组合,这个设置成不一样的
    priority 100
    advert_int 1                            # 发送VRRP通告间隔,单位s
    mcast_src_ip 192.168.13.45              # 指定发送组播数据包的源ip地址,默认是绑定VRRP实例的接口的主ip地址,一般就是本机的ip
    # nopreempt                             # 设置非抢占模式,原本高优先级的MASER恢复之后,不会去抢现在是低优先级BACKUP, 配置了这个会有个问题,主节点nginx恢复后,备节点nginx挂掉vip也不会飘到主节点上面

    authentication {
        auth_type PASS                      # 主备验证信息,需一致
        auth_pass 123456 
    }
    track_script {
        chk_nginx                           # 调用脚本,若脚本最后的执行结果是非0的,则判断端口down掉,此时vip会漂移到keepalived-BACKUP上
    }
    virtual_ipaddress {
        192.168.13.46                       # vip
    }
}

keepalived备节点配置

! Configuration File for keepalived

global_defs {
    router_id 192.168.13.44
    script_user root
    enable_script_security
}

vrrp_script chk_nginx {
    script "/data/tools/check_nginx.sh"
    interval 2
    weight -20
}

vrrp_instance VI_1 {
    state BACKUP
    interface eth0
    virtual_router_id 251
    mcast_src_ip 192.168.13.44
    priority 90
    advert_int 1
    authentication {
        auth_type PASS
        auth_pass 123456
    }
    track_script {
        chk_nginx
    }
    virtual_ipaddress {
        192.168.13.46
    }
}

检测脚本

vim /data/tools/check_nginx.sh

#!/bin/bash
/usr/sbin/pidof nginx
exit $?