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 相关文章推荐
Apache压力测试工具的安装使用
Mar 31 Servers
Nginx反向代理多个服务器的实现方法
Mar 31 Servers
如何在centos上使用yum安装rabbitmq-server
Mar 31 Servers
CentOS7安装GlusterFS集群以及相关配置
Apr 12 Servers
Windows server 2022创建创建林、域树、子域的步骤
Jun 25 Servers
windows系统安装配置nginx环境
Jun 28 Servers
TaiShan 200服务器安装Ubuntu 18.04的图文教程
Jun 28 Servers
Nginx文件已经存在全局反向代理问题排查记录
Jul 15 Servers
Apache Kafka 分区重分配的实现原理解析
Jul 15 Servers
Nginx报错104:Connection reset by peer问题的解决及分析
Jul 23 Servers
Nginx 502 bad gateway错误解决的九种方案及原因
Aug 14 Servers
nginx sticky实现基于cookie负载均衡示例详解
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对MongoDB[NoSQL]数据库的操作
2013/03/01 PHP
php实现parent调用父类的构造方法与被覆写的方法
2015/02/11 PHP
PHP中使用array函数新建一个数组
2015/11/19 PHP
Zend Framework动作助手Json用法实例分析
2016/03/05 PHP
laravel利用中间件防止未登录用户直接访问后台的方法
2019/09/30 PHP
javascript实现的鼠标链接提示效果生成器代码
2007/06/28 Javascript
jquery UI 1.72 之datepicker
2009/12/29 Javascript
基于jQuery的消息提示插件 DivAlert之旅(二)
2010/04/01 Javascript
JQuery的ajax获取数据后的处理总结(html,xml,json)
2010/07/14 Javascript
Jquery 的扩展方法总结
2011/10/01 Javascript
js实现上一页下一页的效果【附代码】
2016/03/10 Javascript
Jquery修改image的src属性,图片不加载问题的解决方法
2016/05/17 Javascript
jquery 判断div show的状态实例
2016/12/03 Javascript
js实现手机拍照上传功能
2017/01/17 Javascript
jQuery插件jqGrid动态获取列和列字段的方法
2017/03/03 Javascript
基于jstree使用AJAX请求获取数据形成树
2017/08/29 Javascript
vue 2.0 购物车小球抛物线的示例代码
2018/02/01 Javascript
vue click.stop阻止点击事件继续传播的方法
2018/09/04 Javascript
node.js使用redis储存session的方法
2018/09/26 Javascript
Vue项目引进ElementUI组件的方法
2018/11/11 Javascript
Vue入门之数量加减运算操作示例
2018/12/11 Javascript
Element Notification通知的实现示例
2020/07/27 Javascript
[36:20]完美世界DOTA2联赛PWL S3 access vs Rebirth 第一场 12.17
2020/12/18 DOTA
Django 创建新App及其常用命令的实现方法
2019/08/04 Python
django创建超级用户时指定添加其它字段方式
2020/05/14 Python
英国文具、办公用品和科技商店:Ryman
2018/09/27 全球购物
播音主持专业个人自我评价
2014/01/09 职场文书
《云房子》教学反思
2014/04/20 职场文书
学习张丽丽心得体会
2014/09/03 职场文书
大专毕业生自我鉴定范文(2篇)
2014/09/27 职场文书
法院干警四风问题个人对照检查材料思想汇报
2014/10/07 职场文书
工作收入证明模板
2014/10/10 职场文书
天气温馨提示语
2015/07/14 职场文书
2016国庆节活动宣传语
2015/11/25 职场文书
Python还能这么玩之用Python修改了班花的开机密码
2021/06/04 Python
Redis 报错 error:NOAUTH Authentication required
2022/05/15 Redis