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启动失败的几种错误处理
Apr 01 Servers
nginx配置文件使用环境变量的操作方法
Jun 02 Servers
Nginx配置https的实现
Nov 27 Servers
为Centos安装指定版本的Docker
Apr 01 Servers
nginx容器方式反向代理实战
Apr 18 Servers
Apache Hudi 加速传统的批处理模式
Apr 24 Servers
利用nginx搭建RTMP视频点播、直播、HLS服务器
May 25 Servers
教你如何用cmd快速登录服务器
Jun 10 Servers
WinServer2012搭建DNS服务器的方法步骤
Jun 10 Servers
Windows server 2022创建创建林、域树、子域的步骤
Jun 25 Servers
centos环境下nginx高可用集群的搭建指南
Jul 23 Servers
CentOS7 minimal 最小化安装网络设置过程
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的变量总结 新手推荐
2011/04/18 PHP
PHP和Mysqlweb应用开发核心技术 第1部分 Php基础-1 开始了解php
2011/07/03 PHP
php数据结构 算法(PHP描述) 简单选择排序 simple selection sort
2011/08/09 PHP
php 团购折扣计算公式
2011/11/24 PHP
PHP中鲜为人知的10个函数
2014/02/28 PHP
PHP简单处理表单输入的特殊字符的方法
2016/02/03 PHP
Laravel中如何轻松容易的输出完整的SQL语句
2020/07/26 PHP
JavaScript中使用正则匹配多条,且获取每条中的分组数据
2010/11/30 Javascript
js 判断控件获得焦点的示例代码
2014/03/04 Javascript
JQuery中的html()、text()、val()区别示例介绍
2014/09/01 Javascript
Javascript 数组排序详解
2014/10/22 Javascript
基于jQuery通过jQuery.form.js插件实现异步上传
2015/12/13 Javascript
AngularJS整合Springmvc、Spring、Mybatis搭建开发环境
2016/02/25 Javascript
JS与jQuery实现子窗口获取父窗口元素值的方法
2017/04/17 jQuery
vue.js父组件使用外部对象的方法示例
2017/04/25 Javascript
深入理解Node.js中通用基础设计模式
2017/09/19 Javascript
微信小程序收藏功能的实现代码
2018/06/12 Javascript
vue v-model实现自定义样式多选与单选功能
2018/07/05 Javascript
vue动态绘制四分之三圆环图效果
2019/09/03 Javascript
node 标准输入流和输出流代码实例
2019/09/19 Javascript
springboot+vue+对接支付宝接口+二维码扫描支付功能(沙箱环境)
2020/10/15 Javascript
[47:43]Alliance vs KG 2019国际邀请赛小组赛 BO2 第一场 8.16
2019/08/18 DOTA
Python实现FTP上传文件或文件夹实例(递归)
2017/01/16 Python
详解Django+Uwsgi+Nginx 实现生产环境部署
2018/11/06 Python
Python 给定的经纬度标注在地图上的实现方法
2019/07/05 Python
matplotlib subplot绘制多个子图的方法示例
2020/07/28 Python
基于HTML5 的人脸识别活体认证的实现方法
2016/06/22 HTML / CSS
数据库什么时候应该被重组
2012/11/02 面试题
本科应届生自荐信
2014/06/29 职场文书
政风行风建设责任书
2014/07/23 职场文书
食品委托检验协议书范本
2014/09/12 职场文书
幼儿园大班见习报告
2014/10/31 职场文书
股份转让协议书范本
2015/01/27 职场文书
办公室主任岗位竞聘书
2015/09/15 职场文书
MySQL update set 和 and的区别
2021/05/08 MySQL
Java Spring读取和存储详细操作
2022/08/05 Java/Android