当前位置: 首页 > news >正文

nginx+keepalived健康检查案例详解(解决nginx出现故障却不能快速切换到备份服务器的问题)

文章目录

    • 简介
    • 配置过程
      • 前置环境请看
      • 创建健康检查脚本
      • 结果测试


简介

在我们通过nginx+keepalived实现高可用后,会发现nginx出现故障的时候keepalived并不会将虚拟ip切换到备份服务器上其原理就是nginx和keepalived是两个独立的服务,Nginx的故障状态不会触发Keepalived本身的故障转移机制。
所以我们可以通过配置健康检查机制来解决这个问题

配置过程

前置环境请看

链接: keepalived+nginx实现高可用的案例详解(主从模式)
lvs和nginx的配置都在前置环境里

主机名ip服务虚拟ip
ngx1192.168.10.11nginx+keepalived192.168.10.111
ngx2192.168.10.12nginx+keepalived192.168.10.111

创建健康检查脚本

vim /etc/keepalived/chk_nginx_port.sh
#!/bin/bash
nginx_count=$(ps -C nginx --no-header | wc -l)
if [ $nginx_count -eq 0 ]; thenecho "Nginx is not running"systemctl start nginxnginx_count=$(ps -C nginx --no-header | wc -l)if [ $nginx_count -eq 0 ]; thensystemctl stop keepalivedfi
fi

简单解释
这个脚本的作用是监测 Nginx 服务的运行状态,并在其未运行时尝试启动它。如果 Nginx 启动失败,脚本会停止 Keepalived 服务。

赋予这个脚本执行权限

chmod +x /etc/keepalived/chk_nginx_port.sh

更改keepalived配置文件

vim /etc/keepalived/keepalived.conf
global_defs {router_id LVS_DEVEL1
}vrrp_script chk_nginx_port {script "/etc/keepalived/chk_nginx_port.sh"
}vrrp_instance VI_1 {state MASTERinterface ens33virtual_router_id 51priority 100advert_int 1authentication {auth_type PASSauth_pass 1111}virtual_ipaddress {192.168.10.111}track_script {chk_nginx_port
}
}

重启keepalived

systemctl restart keepalived

这个是主从的配置,所以从端不需要配置健康检查
如果是双主配置,另一端同理

结果测试

ngx1停止nginx服务

vim /etc/nginx/nginx.conf

随便添几个字母,让nginx起不来就好
在这里插入图片描述
重启nginx

systemctl restart nginx

可以看到会报错
在这里插入图片描述
查看ip

ip add

可以发现虚拟ip已经转移
在这里插入图片描述
到ngx2查看ip

ip add

可以看到转移过来的虚拟ip
在这里插入图片描述

访问虚拟ip
也是ngx2的web页面
在这里插入图片描述

其他服务同理,更改脚本内容即可

相关文章:

  • 北京网站建设多少钱?
  • 辽宁网页制作哪家好_网站建设
  • 高端品牌网站建设_汉中网站制作
  • 也遇到过 PIL Image “image file is truncated“的问题
  • 锤炼核心技能以应对编程革命
  • AndroidLogger插件使用技巧
  • JW01二氧化碳传感器(串行通信 STM32)
  • Linux:八种重定向详解(万字长文警告)
  • 低代码中实现数据映射的必要性与方案
  • 【计网】从零开始掌握序列化 --- 实现网络计算器项目
  • 细说硫酸钙防静电地板的材质结构和优势特点
  • 产品经理面试整理-常见面试问题
  • 开放原子开源基金会OPENATOM
  • 京准电钟:NTP网络校时服务器助力校园体育场馆
  • 论文 | Reframing Instructional Prompts to GPTk’s Language
  • 等保测评与企业内部安全管理体系的融合
  • 虚幻引擎游戏保存/加载存档功能
  • 23个Python在自然语言处理中的应用实例
  • CentOS6 编译安装 redis-3.2.3
  • Computed property XXX was assigned to but it has no setter
  • iOS 颜色设置看我就够了
  • Laravel Telescope:优雅的应用调试工具
  • OpenStack安装流程(juno版)- 添加网络服务(neutron)- controller节点
  • WebSocket使用
  • 阿里云应用高可用服务公测发布
  • 案例分享〡三拾众筹持续交付开发流程支撑创新业务
  • 从0搭建SpringBoot的HelloWorld -- Java版本
  • 聊聊flink的TableFactory
  • 使用API自动生成工具优化前端工作流
  • 为什么要用IPython/Jupyter?
  • 《TCP IP 详解卷1:协议》阅读笔记 - 第六章
  • elasticsearch-head插件安装
  • HanLP分词命名实体提取详解
  • !!java web学习笔记(一到五)
  • # 计算机视觉入门
  • #1014 : Trie树
  • #if等命令的学习
  • #使用清华镜像源 安装/更新 指定版本tensorflow
  • %3cli%3e连接html页面,html+canvas实现屏幕截取
  • (2024,LoRA,全量微调,低秩,强正则化,缓解遗忘,多样性)LoRA 学习更少,遗忘更少
  • (9)STL算法之逆转旋转
  • (CPU/GPU)粒子继承贴图颜色发射
  • (汇总)os模块以及shutil模块对文件的操作
  • (接口封装)
  • (牛客腾讯思维编程题)编码编码分组打印下标题目分析
  • (七)Appdesigner-初步入门及常用组件的使用方法说明
  • (求助)用傲游上csdn博客时标签栏和网址栏一直显示袁萌 的头像
  • (十五)devops持续集成开发——jenkins流水线构建策略配置及触发器的使用
  • (四)linux文件内容查看
  • (万字长文)Spring的核心知识尽揽其中
  • (转)重识new
  • (自适应手机端)行业协会机构网站模板
  • ******之网络***——物理***
  • .NET Core WebAPI中封装Swagger配置
  • .Net OpenCVSharp生成灰度图和二值图
  • .NET 直连SAP HANA数据库
  • .NetCore+vue3上传图片 Multipart body length limit 16384 exceeded.
  • .net打印*三角形