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站点配置SSL强制跳转443
Mar 09 Servers
apache基于端口创建虚拟主机的示例
Apr 22 Servers
Nginx四层负载均衡的配置指南
Jun 11 Servers
Nginx缓存设置案例详解
Sep 15 Servers
教你利用Nginx 服务搭建子域环境提升二维地图加载性能的步骤
Sep 25 Servers
tomcat的catalina.out日志按自定义时间格式进行分割的操作方法
Apr 02 Servers
阿里云日志过滤器配置日志服务
Apr 09 Servers
CentOS7安装GlusterFS集群以及相关配置
Apr 12 Servers
winserver2019安装软件一直卡在应用程序正在为首次使用做准备
Jun 10 Servers
使用 DataAnt 监控 Apache APISIX的原理解析
Jul 07 Servers
nginx访问报403错误的几种情况详解
Jul 23 Servers
源码安装apache脚本部署过程详解
Sep 23 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实现的随机广告显示代码
2007/06/14 PHP
PHP生成短网址的思路以及实现方法的详解
2019/03/25 PHP
WordPress 照片lightbox效果的运用几点
2009/06/22 Javascript
IE6/7/8中Option元素未设value时Select将获取空字符串
2011/04/07 Javascript
随鼠标上下滚动的jquery代码
2013/12/05 Javascript
AngularJS入门教程之ng-checked 指令详解
2016/08/01 Javascript
jQuery的ajax中使用FormData实现页面无刷新上传功能
2017/01/16 Javascript
Easyui Tree获取当前选择节点的所有顶级父节点
2017/02/14 Javascript
AngularJS ng-repeat指令及Ajax的应用实例分析
2017/07/06 Javascript
深入浅析Node.js单线程模型
2017/07/10 Javascript
详解react使用react-bootstrap当轮子造车
2017/08/15 Javascript
Javascript中将变量转换为字符串的三种方法
2017/09/19 Javascript
浅谈vue自定义全局组件并通过全局方法 Vue.use() 使用该组件
2017/12/07 Javascript
使用ng-packagr打包Angular的方法示例
2018/09/21 Javascript
axios使用拦截器统一处理所有的http请求的方法
2018/11/02 Javascript
详解async/await 异步应用的常用场景
2019/05/13 Javascript
jquery实现的分页显示功能示例
2019/08/23 jQuery
[48:20]OpTic vs Serenity 2018国际邀请赛小组赛BO2 第二场 8.18
2018/08/19 DOTA
PYTHON正则表达式 re模块使用说明
2011/05/19 Python
python处理csv数据的方法
2015/03/11 Python
解决Python requests 报错方法集锦
2017/03/19 Python
Python实现时钟显示效果思路详解
2018/04/11 Python
python scatter散点图用循环分类法加图例
2019/03/19 Python
Python如何实现爬取B站视频
2020/05/20 Python
TripAdvisor斯洛伐克:阅读评论、比较价格和酒店预订
2018/04/25 全球购物
《威尼斯的小艇》教学反思
2014/02/17 职场文书
党的生日活动方案
2014/08/15 职场文书
门面房租房协议书
2014/08/20 职场文书
六一儿童节活动总结
2014/08/27 职场文书
田径运动会通讯稿
2014/09/13 职场文书
村委会贫困证明范文
2014/09/21 职场文书
学校党风廉政建设调研报告
2015/01/01 职场文书
公司团队口号霸气押韵
2015/12/24 职场文书
导游词之襄阳古城
2019/09/27 职场文书
python tkinter模块的简单使用
2021/04/07 Python
Go调用Rust方法及外部函数接口前置
2022/06/14 Golang