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配置文件路径和资源文件路径的方法
Mar 31 Servers
详解Nginx启动失败的几种错误处理
Apr 01 Servers
阿里云日志过滤器配置日志服务
Apr 09 Servers
Nginx反向代理、重定向
Apr 13 Servers
Tomcat弱口令复现及利用
May 06 Servers
nginx lua 操作 mysql
May 15 Servers
ubuntu下常用apt命令介绍
Jun 05 Servers
CentOS7环境下MySQL8常用命令小结
Jun 10 Servers
Windows Server 修改远程桌面端口的实现
Jun 25 Servers
Python安装及建立虚拟环境的完整步骤
Jun 25 Servers
Nginx报错104:Connection reset by peer问题的解决及分析
Jul 23 Servers
CentOS7设置ssh服务以及端口修改方式
Dec 24 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
非常好的php目录导航文件代码
2006/10/09 PHP
PHP+Redis事务解决高并发下商品超卖问题(推荐)
2020/08/03 PHP
7个Javascript地图脚本整理
2009/10/20 Javascript
浅析Javascript中“==”与“===”的区别
2014/12/23 Javascript
js简单的点击返回顶部效果实现方法
2015/04/10 Javascript
Node.js实现Excel转JSON
2015/04/24 Javascript
使用AngularJS创建单页应用的编程指引
2015/06/19 Javascript
js实现完美兼容各大浏览器的人民币大小写相互转换
2015/10/29 Javascript
JavaScript操作class和style样式代码详解
2016/02/13 Javascript
javascript自执行函数
2017/02/10 Javascript
ES6中class类用法实例浅析
2017/04/06 Javascript
详解webpack + react + react-router 如何实现懒加载
2017/11/20 Javascript
vue中子组件向父组件传递数据的实例代码(实现加减功能)
2018/04/20 Javascript
Vue 进阶之路(三)
2019/04/18 Javascript
微信小程序实现点击效果
2019/06/21 Javascript
使用微信SDK自定义分享的方法
2019/07/03 Javascript
[00:32]2018DOTA2亚洲邀请赛OpTic出场
2018/04/03 DOTA
[01:51]历届DOTA2国际邀请赛举办地回顾 TI9落地上海
2018/08/26 DOTA
python3使用pyqt5制作一个超简单浏览器的实例
2017/10/19 Python
Python 字符串与数字输出方法
2018/07/16 Python
解决pycharm运行出错,代码正确结果不显示的问题
2018/11/30 Python
django认证系统 Authentication使用详解
2019/07/22 Python
sklearn+python:线性回归案例
2020/02/24 Python
如何用Python 加密文件
2020/09/10 Python
Python Charles抓包配置实现流程图解
2020/09/29 Python
使用python-cv2实现视频的分解与合成的示例代码
2020/10/26 Python
python 解决Windows平台上路径有空格的问题
2020/11/10 Python
HTML5的结构和语义(1):前言
2008/10/17 HTML / CSS
波兰在线儿童和婴儿用品零售商:pinkorblue
2019/06/29 全球购物
电子技术专业中专生的自我评价
2013/12/17 职场文书
证券期货行业个人的自我评价
2013/12/26 职场文书
党旗在我心中演讲稿
2014/09/15 职场文书
公司证明怎么写
2014/09/22 职场文书
2014年乡镇安全生产工作总结
2014/12/02 职场文书
Java 超详细讲解十大排序算法面试无忧
2022/04/08 Java/Android
前端使用svg图片改色实现示例
2022/07/23 HTML / CSS