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+Tomcat实现负载均衡、动静分离的原理解析
Mar 31 Servers
uwsgi+nginx代理Django无法访问静态资源的解决
May 10 Servers
Linux中Nginx的防盗链和优化的实现代码
Jun 20 Servers
使用nginx配置访问wgcloud的方法
Jun 26 Servers
Windows下用Nginx配置https服务器及反向代理的问题
Sep 25 Servers
Kubernetes部署实例并配置Deployment、网络映射、副本集
Apr 01 Servers
Mac电脑OS系统下安装Nginx的详细教程
Apr 14 Servers
阿里云ECS云服务器快照的概念以及如何使用
Apr 21 Servers
使用 Docker Compose 构建复杂的多容器App
Apr 30 Servers
Vscode中SSH插件如何远程连接Linux
May 02 Servers
解决Vmware虚拟机安装centos8报错“Section %Packages Does Not End With %End. Pane Is Dead”
Jun 01 Servers
winserver2019安装软件一直卡在应用程序正在为首次使用做准备
Jun 10 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
Flash空降上海 化身大魔王接受挑战
2020/03/02 星际争霸
15个小时----从修改程序到自己些程序
2006/10/09 PHP
php解析json数据实例
2014/08/19 PHP
Javascript String对象扩展HTML编码和解码的方法
2009/06/02 Javascript
简单的代码实现jquery定时器
2013/11/17 Javascript
js判断浏览器类型为ie6时不执行
2014/06/15 Javascript
Bootstrap树形控件使用方法详解
2016/01/27 Javascript
网页中JS函数自动执行常用三种方法
2016/03/30 Javascript
JS简单实现点击复制链接的方法
2016/08/03 Javascript
jQuery表格的维护和删除操作
2017/02/03 Javascript
Webpack 4.x搭建react开发环境的方法步骤
2018/08/15 Javascript
js实现前面自动补全位数的方法
2018/10/10 Javascript
详解ES6 Symbol 的用途
2018/10/14 Javascript
antd Upload 文件上传的示例代码
2018/12/14 Javascript
js 根据对象数组中的属性进行排序实现代码
2019/09/12 Javascript
javascript跳转与返回和刷新页面的实例代码
2019/11/20 Javascript
基于vue-draggable 实现三级拖动排序效果
2020/01/10 Javascript
微信小程序swiper组件实现抖音翻页切换视频功能的实例代码
2020/06/24 Javascript
Python实现的桶排序算法示例
2017/11/29 Python
python3.6数独问题的解决
2019/01/21 Python
python钉钉机器人运维脚本监控实例
2019/02/20 Python
Python中字符串与编码示例代码
2019/05/20 Python
详解Matplotlib绘图之属性设置
2019/08/23 Python
在win64上使用bypy进行百度网盘文件上传功能
2020/01/02 Python
最新2019Pycharm安装教程 亲测
2020/02/28 Python
python实现在内存中读写str和二进制数据代码
2020/04/24 Python
python中Ansible模块的Playbook的具体使用
2020/05/28 Python
python利用xlsxwriter模块 操作 Excel
2020/10/14 Python
纯CSS3实现图片无间断轮播效果
2016/08/25 HTML / CSS
自定义html标记替换html5新增元素
2008/10/17 HTML / CSS
俄罗斯护发和专业化妆品购物网站:Hihair
2019/09/28 全球购物
餐饮业会计岗位职责
2013/12/19 职场文书
采购部经理岗位职责
2014/02/10 职场文书
学校国庆节活动总结
2015/03/23 职场文书
小鞋子观后感
2015/06/05 职场文书
Go使用协程交替打印字符
2021/04/29 Golang