keepalived + nginx 实现高可用方案


Posted in Servers onDecember 24, 2022

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

keepalived + nginx 实现高可用方案

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 标识方便区分. 如下:

keepalived + nginx 实现高可用方案

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

keepalived + nginx 实现高可用方案

# 临时关闭
setenforce 0

#永久关闭
sed -i 's/SELINUX=enforcing/\SELINUX=disabled/' /etc/selinux/config

6.模拟测试

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

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

keepalived + nginx 实现高可用方案

在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 实现高可用方案

总结

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

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

Servers 相关文章推荐
nginx对http请求处理的各个阶段详析
Mar 31 Servers
nginx 多个location转发任意请求或访问静态资源文件的实现
Mar 31 Servers
如何利用map实现Nginx允许多个域名跨域
Mar 31 Servers
win10安装配置nginx的过程
Mar 31 Servers
详解nginx安装过程并代理下载服务器文件
Feb 12 Servers
nginx刷新页面出现404解决方案(亲测有效)
Mar 18 Servers
Tomcat用户管理的优化配置详解
Mar 31 Servers
Kubernetes部署实例并配置Deployment、网络映射、副本集
Apr 01 Servers
Nginx+Tomcat负载均衡多实例详解
Apr 11 Servers
Nginx 安装SSL证书完成HTTPS部署
Apr 28 Servers
Windows Server 2012 R2 磁盘分区教程
Apr 29 Servers
Tomcat安装使用及部署Web项目的3种方法汇总
Aug 14 Servers
ubuntu20.04虚拟机无法上网的问题及解决
Dec 24 #Servers
ubuntu如何搭建vsftpd服务器
Dec 24 #Servers
CentOS7设置ssh服务以及端口修改方式
Dec 24 #Servers
CentOS7 minimal 最小化安装网络设置过程
Dec 24 #Servers
Elasticsearch6.2服务器升配后的bug(避坑指南)
Sep 23 #Servers
Zabbix6通过ODBC方式监控Oracle 19C的详细过程
Sep 23 #Servers
源码安装apache脚本部署过程详解
Sep 23 #Servers
You might like
收听短波不可能有声音清晰的品质吗
2021/03/01 无线电
可以在线执行PHP代码包装修正版
2008/03/15 PHP
使用PHP的日期与时间函数技巧
2008/04/24 PHP
怎样去阅读一份php源代码
2009/08/21 PHP
适用于php-5.2 的 php.ini 中文版[金步国翻译]
2011/04/17 PHP
php漏洞之跨网站请求伪造与防止伪造方法
2013/08/15 PHP
PHP imagegrabscreen和imagegrabwindow(截取网站缩略图)的实例代码
2013/11/07 PHP
PHP实现图片压缩的两则实例
2014/07/19 PHP
PHP的Yii框架中行为的定义与绑定方法讲解
2016/03/18 PHP
php文件上传、下载和删除示例
2020/08/28 PHP
Yii框架学习笔记之应用组件操作示例
2019/11/13 PHP
一个对于Array的简单扩展
2006/10/03 Javascript
JavaScript 学习小结(适合新手参考)
2009/07/30 Javascript
jQuery之浮动窗口实现代码(两种方法)
2010/09/08 Javascript
Windows系统下使用Sublime搭建nodejs环境
2015/04/13 NodeJs
小程序自定义单页面、全局导航栏的实现代码
2019/03/15 Javascript
Vue自定义全局弹窗组件操作
2020/08/11 Javascript
python使用reportlab画图示例(含中文汉字)
2013/12/03 Python
python杀死一个线程的方法
2015/09/06 Python
Python处理文本文件中控制字符的方法
2017/02/07 Python
Python3实现简单可学习的手写体识别(实例讲解)
2017/10/21 Python
python的常见矩阵运算(小结)
2019/08/07 Python
Django CBV与FBV原理及实例详解
2019/08/12 Python
python 解决cv2绘制中文乱码问题
2019/12/23 Python
如何通过python实现全排列
2020/02/11 Python
keras 两种训练模型方式详解fit和fit_generator(节省内存)
2020/07/03 Python
python链表类中获取元素实例方法
2021/02/23 Python
美国运动鞋类和服装零售连锁店:Shoe Palace
2019/08/13 全球购物
大学生毕业求职简历的自我评价
2013/10/24 职场文书
酒鬼酒广告词
2014/03/21 职场文书
宣传部部长竞选演讲稿
2014/04/26 职场文书
ktv好的活动方案
2014/08/17 职场文书
2015年医院工作总结范文
2015/04/09 职场文书
歌剧魅影观后感
2015/06/05 职场文书
2016教师学习教育法心得体会
2016/01/19 职场文书
react中props 的使用及进行限制的方法
2021/04/28 Javascript