您的位置:首页技术文章

keepalived + nginx 实现高可用方案

【字号: 日期:2023-03-28 17:35:18浏览:2作者:猪猪
目录
  • 1.概述
  • 2.准备工作
  • 3.配置 keepalived
    • 3.1 master (172.16.225.111)
    • 3.2 master (172.16.225.110)
  • 4.配置 nginx_check.sh
    • 5.关闭 selinux
      • 6.模拟测试
        • 总结

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

          1.概述

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

          2.准备工作

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

          ipkeepalived172.16.225.111MASTER172.16.225.110BACKUP

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

          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 没有关闭

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

          6.模拟测试

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

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

          在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上了

          总结

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

          到此这篇关于keepalived + nginx 实现高可用方案的文章就介绍到这了,更多相关keepalived + nginx 实现高可用内容请搜索以前的文章或继续浏览下面的相关文章希望大家以后多多支持!

          标签: Nginx