美文网首页
keepalived + nginx 实现高可用

keepalived + nginx 实现高可用

作者: Aska小强 | 来源:发表于2022-12-13 05:46 被阅读0次

    keepalived + nginx 实现高可用

    本篇主要介绍一下 keepalived + nginx 来实现 对于nginx的高可用, 还是简单的主备模式

    image-20221209205316080

    1.概述

    前面有了解keepalived 的主备的基本使用, 但是那种是针对宕机等情况 停止了keepalived 的进程实现的 vip的漂移,本篇把keepalived 添加校验nginx存活脚本 实现针对nginx的监控, 实现nginx的高可用

    2.准备工作

    准备2台机器 , 把111定义为 keepalived 的 MASTER 节点

    ip keepalived
    172.16.225.111 MASTER
    172.16.225.110 BACKUP

    分别在2台服务器上配置好nginx 并且修改默认的 index.html 添加上 ip 标识方便区分. 如下:

    image-20221209202220935

    3.配置 keepalived

    在keepalived 的配置文件中的 instance 里面配置 track_script 指定 检查nginx是否存活的脚本

    3.1 master (172.16.225.111)

    ! Configuration File for keepalived
    
    global_defs {
       router_id LB111
    }
    
    vrrp_script chk_nginx {
       # 具体的脚本
       script "/etc/keepalived/nginx_check.sh"
       interval 2 # 2s执行一次 
       weight -20 # 失败一次 则优先级 -20
    }
    
    vrrp_instance VI_1 {
        state MASTER
        interface ens160
        virtual_router_id 51
        priority 100
        advert_int 1
        authentication {
            auth_type PASS
            auth_pass 1111
        }
        virtual_ipaddress {
            172.16.225.200
        }
        # 指定脚本
        track_script {
          chk_nginx
        }
    }
    

    3.2 master (172.16.225.110)

    ! Configuration File for keepalived
    
    global_defs {
       router_id LB111
    }
    
    vrrp_script chk_nginx {
       script "/etc/keepalived/nginx_check.sh"
       interval 2
       weight -20
    }
    
    vrrp_instance VI_1 {
        state BACKUP
        interface ens160
        virtual_router_id 51
        priority 90
        advert_int 1
        authentication {
            auth_type PASS
            auth_pass 1111
        }
        virtual_ipaddress {
           172.16.225.200
        }
    
        track_scrip {
          chk_nginx
        }
    }
    

    4.配置 nginx_check.sh

    主要是这个脚本 这个脚本的内容就是 通过ps命令检查 nginx进程是否存活 ,如果不存活 则尝试启动一次 则检查 ,如果还是启动不起来 则 把keepalived 关闭, 从而让 keepalived 能检测到 并且 vip 能够漂移到其他机器

    #!/bin/bash
    status=$(ps -C nginx --no-heading|wc -l)
    if [ "${status}" = "0" ]; then
                # 尝试启动一次
                systemctl start nginx
            # 再次检查ngixn 进程
            status2=$(ps -C nginx --no-heading|wc -l)
            if [ "${status2}" = "0"  ]; then
                    # 关闭 keepalived 
                    systemctl stop keepalived
            fi
    fi
    

    需要在2台机器上都配置上这个脚本

    # 给脚本一个 可执行的权限
    chmode +x /etc/keepalived/nginx_check.sh 
    
    # 重启或者启动 keepalived 
    systemctl restart keepalived
    

    5.关闭 selinux

    如果重启后或者启动后 查看日志有如下抛错 , 则是 selinux 没有关闭

    image-20221209203117765
    # 临时关闭
    setenforce 0
    
    #永久关闭
    sed -i 's/SELINUX=enforcing/\SELINUX=disabled/' /etc/selinux/config
    

    6.模拟测试

    2台机器 分别启动nginx 和 keepalived 后

    访问 vip 172.16.225.200 这个vip 目前在 111 master机器上

    image-20221209203651153

    在master机器上 把ngixn关闭

    # 关闭 nginx 
    ./nginx -s stop
    
    # 此时查看 keepalived 的状态就是 dead了
    systemctl status keepalived
    
    ● keepalived.service - LVS and VRRP High Availability Monitor
       Loaded: loaded (/usr/lib/systemd/system/keepalived.service; disabled; vendor preset: disabled)
       Active: inactive (dead)
    

    再次访问vip 172.16.225.200 , 可以看到 vip 已经跑到了 backup机器110上了

    image-20221209203940465

    总结

    本篇主要介绍了 keepalived + nginx 的基本的主备配置 实现了 nginx 的高可用,核心点就是配置 nginx_check.sh脚本给keepalived 的执行, 这个nginx_check.sh 脚本内如果发现nginx 不存活 尝试启动 如果还是不存活 则直接关闭 keepalived 进程

    欢迎大家访问 个人博客 Johnny小屋
    欢迎关注个人公众号

    欢迎关注个人公众号

    相关文章

      网友评论

          本文标题:keepalived + nginx 实现高可用

          本文链接:https://www.haomeiwen.com/subject/fxqhqdtx.html