Nginx附-实战之负载均衡时怎么让请求不转发到一台正在启动的tomcat服务器上

问题描述

用nginx做负载均衡的时候,当一台挂掉的时候,请求会转发到另外一台。但挂掉这一台的tomcat服务在启动过程中,Nginx请求可能会转发到这台正在启动的服务器上,就会一直等待直到超时,前端使用者的体验就会很差。如何让Nginx等待tomcat启动完成后才转发请求到服务器呢?

解决方案

共有如下几种方式。

方式1

重启tomcat服务前,关闭tomcat服务端口:

firewall-cmd --zone=public --remove-port=8080/tcp --permanent  # 关闭8080端口
firewall-cmd --reload   # 使配置立刻生效

重启tomcat服务完成,开启tomcat服务端口:

firewall-cmd --zone=public --add-port=8080/tcp --permanent   # 开放8080端口
firewall-cmd --reload   # 使配置立刻生效

以上方式可编写成shell脚本执行,完整脚本如下:

#!/bin/bash
# 关闭端口
firewall-cmd --zone=public --remove-port=8080/tcp --permanent
firewall-cmd --reloadtomcat_dir=/opt/tomcat
# 备份之前日志
mv -f $tomcat_dir/logs/catalina.out $tomcat_dir/logs/catalina.out.old
# 启动tomcat
$tomcat_dir/bin/startup.sh
# 监控是否启动完成
loopCount=0
while [ $loopCount -lt 100 ]
do# 根据启动日志检查 upCheck=`grep 'org.apache.catalina.startup.Catalina.start Server startup in' $tomcat_dir/logs/catalina.out`if [ -n "$upCheck" ]thenbreakfisleep 10loopCount=`expr $loopCount + 1`
done# 开启端口
firewall-cmd --zone=public --add-port=8080/tcp --permanent
firewall-cmd --reload

对于非Nginx plus版本,建议采用该种方式。 

方式2

在重启前,手工修改Nginx配置文件,屏蔽掉这台机,用nginx -s reload在线更新配置。

启动好后,修改配置文件加回这台机,用nginx -s reload在线更新配置。

顺便说以下,通过设置 proxy_connect_timeout 1s;  不能解决问题。

方式3

在Nginx plus中,按如下方式简单设置即可:

upstream {# slow_start略大于服务启动到正常的时间server server1.example.com slow_start=20s; 
}

该种方式缺点是:不能支持hash、ip_hash和random负载均衡策略。

方式4

方式3不行的话,可用Nginx plus的主动健康检查功能。配置如下:

http {server {...location / {proxy_pass http://backend; # 启动健康检查health_check interval=2s fails=1 passes=2 uri=/chk_start.html match=welcome;}}# 状态码是 200,内容类型是 "text/html",# 正文包含 "I am ok!" match welcome {status 200;header Content-Type = text/html; body ~ "I am ok!";}
}

应用服务器根目录下chk_start.html内容如下:

I am ok!

详细参数说明见 Nginx Plus增强功能之负载均衡

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/581247.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

Apache Flink连载(十八):Flink On Yarn运行原理及环境准备

🏡 个人主页:IT贫道_大数据OLAP体系技术栈,Apache Doris,Clickhouse 技术-CSDN博客 🚩 私聊博主:加入大数据技术讨论群聊,获取更多大数据资料。 🔔 博主个人B栈地址:豹哥教你大数据的个人空间-豹哥教你大数据个人主页-哔哩哔哩视频 目录 1. Flink On Yarn运行原理…

【Pytorch】学习记录分享8——PyTorch自然语言处理基础-词向量模型Word2Vec

【Pytorch】学习记录分享7——PyTorch自然语言处理基础-词向量模型Word2Vec 1. 词向量模型Word2Vec)1. 如何度量这个单词的?2.词向量是什么样子?3.词向量对应的热力图:4.词向量模型的输入与输出![在这里插入图片描述](https://img-blog.csdni…

IT安全:实时网络安全监控

了解庞大而复杂的网络环境并非易事,它需要持续观察、深入分析,并对任何违规行为做出快速反应。这就是为什么实时网络安全监控工具是任何组织 IT 安全战略的一个重要方面。 网络攻击和合规性法规是 IT 安全的两个主要驱动因素。同时,数据泄露…

卷积神经网络 反向传播

误差的计算 softmax 经过softmax处理后所有输出节点概率和为1 损失(激活函数) 多分类问题:输出只可能归于某一个类别,不可能同时归于多个类别。 误差的反向传播 求w的误差梯度 权值的更新 首先是更新输出层和隐藏层之间的权重…

QT+OSG/osgEarth编译之六十一:bmp+Qt编译(一套代码、一套框架,跨平台编译,版本:OSG-3.6.5插件库osgdb_bmp)

目录 1、BMP介绍 2、文件分析 3、pro文件 4、编译实践 1、BMP介绍 BMP取自位图Bitmap的缩写,是以微软开发的位图(Bitmap)图像格式保存的图片,也称为DIB(与设备无关的位图)。 BMP是一种独立于显示器的位图数字图像文件格式,支持可变颜色位深度和图像元数据的单…

Oracle数据updater如何回滚

1.查询update语句执行的时间节点 ; select t.FIRST_LOAD_TIME, t.SQL_TEXT from v$sqlarea t where to_char(t.FIRST_LOAD_TIME) > 2023-03-19/17:00:00 order by t.FIRST_LOAD_TIME desc;开启表的行迁移 alter table test enable row movement;3.回滚表数据到…

[Android] 如何在Android中执行自己编译的可执行文件

1.push文件到 /data/local adb push file /data/local 2.增加可执行权限 adb shell chmod x /data/local/file 3.运行 adb shell ./data/local/file

【架构】企业信息安全体系架构详解

企业信息安全体系架构来说,是包含技术、运维、管理3个层面。本文说的安全架构,主要集中讨论偏研发技术层面的安全架构。 安全性是软件研发技术体系,系统架构设计阶段的一个关键DFX能力,与可靠性、可服务性、性能等架构属性并列。由于安全性设计自身的特点,涉及到系统架构…

数据分析之词云图绘制

试验任务概述:如下为所给CSDN博客信息表,分别汇总了ai, algo, big-data, blockchain, hardware, math, miniprog等7个标签的博客。对CSDN不同领域标签类别的博客内容进行词频统计,绘制词频统计图,并根据词频统计的结果绘制词云图。…

PyQt 打包成exe文件

参考链接 Python程序打包成.exe(史上最全面讲解)-CSDN博客 手把手教你将pyqt程序打包成exe(1)_pyqt exe-CSDN博客 PyInstaller 将DLL文件打包进exe_怎么把dll文件加到exe里-CSDN博客 自己的问题 按照教程走的话,会出现找不到“mmdeploy_ort_net.dll”文件的报错…

CentOS 5/6/7 基于开源项目制作openssh 9.6p1 rpm包—— 筑梦之路

背景介绍 开源项目地址:https://github.com/boypt/openssh-rpms.git 该项目主要支持了centos 5 、6、7版本,针对使用了比较老的操作系统进行openssh安全加固,还是不错的项目,使用简单、一件制作,欢迎大家去支持作者。…

go语言10进制与16进制转换

野旷天低树,江清月近人 目录 16进制字符串转16进制int64 16进制字符串转10进制字符串 10进制字符串转16进制字符串 10进制字符串转换10进制int64 16进制字符串转16进制int64 strconv.ParseInt(str, 16, 64) 16进制字符串转10进制字符串 ​dist16Int64, err : …

c语言-打印某种图案练习题

目录 前言一、题目一二、题目二总结 前言 本篇文章叙述c语言中打印某种图案的练习题,以便加深对c语言的运用和理解。 一、题目一 题目分析: 行与行之间的关系:第一行不进行空格,从第二行开始空一个空格,后面的空格式逐…

羊大师教你如何选择,适合老人饮用的羊奶?

羊大师教你如何选择,适合老人饮用的羊奶? 羊奶作为一种营养丰富的天然健康饮品,备受人们的青睐。而对于老年人来说,选择适合的羊奶品牌和产品并非易事。那么,如何选择适合老人饮用的羊奶呢?下面为您介绍几…

音视频编码基础知识

视频编码指的是通过特定的压缩技术将一种视频格式文件转换成另一种视频格式文件的过程。 常见的视频编码: MPEG类 MPEG1(VCD等使用),MPEG2(DVD等使用),MPEG4(DivX,XviD…

基于Python的城市热门美食数据可视化分析系统

温馨提示:文末有 CSDN 平台官方提供的学长 QQ 名片 :) 1. 项目简介 本项目利用网络爬虫技术从XX点评APP采集北京市的餐饮商铺数据,利用数据挖掘技术对北京美食的分布、受欢迎程度、评价、评论、位置等情况进行了深入分析,方便了解城市美食店…

C# 操作非持久化内存映射文件

目录 写在前面 代码实现 进程A 进程B 进程C 调用示例 总结 写在前面 多个进程之间,通过操作未映射到磁盘上现有文件的内存映射文件,可以实现数据共享和类似进程间通讯的功能。以下示例展示了使用三个独立进程,先各自将布尔值写入内存…

cpp_07_类型转换构造_析构函数_深拷贝_静态成员

1 类型转换构造函数 1.1 why? 基本类型之间的转换,编译器内置转换规则:int -> double 类类型之间的转换,编译器不知道转换规则,需要用户提供:Cat -> Dog // consconv_why.cpp 为什么需要自定义转换 #includ…

记一次修复外网无法访问vmware里面的虚拟机的网络端口的问题

发现一个奇怪的网络问题,vmware里一个程序的端口通过vmnat穿透出来,然后这个端口就能够通过局域网被其他机器访问,但是另一个网段就没法访问这个端口。使用主机上的其他程序使用开启同样的端口,另一个网段的机器却可以访问。我想不…

HarmonyOS栅格布局---GridRow

题外话:栅格布局最初是在web 端应用的,为了解决一个系统在不同的屏幕,和不同的设备上可以不进行多次开发的问题,希望一次开发可以最大化的适配用户的不同类型设备,解决方案:将屏幕采用断点的方式进行布局分…