DNS缓存失效,死循环访问造成连接数瞬间飚高的问题

news2025/1/24 2:26:40

0.背景介绍

       某服务domain.com.cn 之前DNS解析到服务真实地址10.1.1.11,后面需要对用户登录增加黑名单功能,于是在openresty针对服务domain.com.cn的特性完成了黑名单功能。黑名单功能已经上线几个月,但是DNS从服务真实地址10.1.1.11切换到openresty10.1.4.2 一直遇到些问题,直到半个多月前才已经完成DNS切换,openresty lua脚本运行半个多月都没有问题。直到某一天执行了openresty -s reload,发生了一个生产小事故。

1.网络架构

        client------>F5(domain.com.cn DNS解析至F5)------>openresty(宿主机:docker容器,openresty部署在docker容器中)

2.事故描述

        openresty上面部署了黑名单lua脚本,脚本里面有根据cookie解析用户名称的代码,有些老外用户名称比较特殊,解析失败,前期没有记录详细的日志,这次在lua脚本中加了日志,在docker容器中执行bin/openresty -s reload。事故出现了,浏览器访问域名(http://domain.com.cn),显示502bad getway。

3.分析过程

        只是重新reload了一下,服务怎么不可用了,telnet 服务ip 端口是通的,问题很有可能出现在openresty网关上面。查看nginx的error日志,并没有发现lua脚本的错误,全都是下面这些报错。

2023/04/18 15:19:28 [crit] 786#0: *100069488 connect() to 10.1.1.21:8888 failed (99: Cannot assign requested address) while connecting to upstream, client: 10.1.1.29, server: vip.sdns.cn, 
2023/04/18 15:19:30 [crit] 786#0: *100069620 connect() to 10.1.1.21:8888 failed (99: Cannot assign requested address) while connecting to upstream, client: 10.1.1.29, server: vip.sdns.cn, 
2023/04/18 15:19:30 [crit] 788#0: *100069623 connect() to 10.1.1.21:8888 failed (99: Cannot assign requested address) while connecting to upstream, client: 10.1.1.29, server: vip.sdns.cn, 
2023/04/18 15:19:32 [crit] 787#0: *100070474 connect() to 10.1.1.21:8888 failed (99: Cannot assign requested address) while connecting to upstream, client: 10.1.1.29, server: vip.sdns.cn, 
2023/04/18 15:19:32 [crit] 788#0: *100070476 connect() to 10.1.1.21:8888 failed (99: Cannot assign requested address) while connecting to upstream, client: 10.1.1.29, server: vip.sdns.cn, 
2023/04/18 15:19:32 [crit] 789#0: *100070478 connect() to 10.1.1.21:8888 failed (99: Cannot assign requested address) while connecting to upstream, client: 10.1.1.29, server: vip.sdns.cn, 
2023/04/18 15:19:43 [crit] 788#0: *100075175 connect() to 10.1.1.21:8888 failed (99: Cannot assign requested address) while connecting to upstream, client: 10.1.1.29, server: vip.sdns.cn, 
2023/04/18 15:19:43 [crit] 787#0: *100075176 connect() to 10.1.1.21:8888 failed (99: Cannot assign requested address) while connecting to upstream, client: 10.1.1.29, server: vip.sdns.cn, 
2023/04/18 15:19:45 [crit] 788#0: *100076749 connect() to 10.1.1.21:8888 failed (99: Cannot assign requested address) while connecting to upstream, client: 10.1.1.29, server: vip.sdns.cn, 
2023/04/18 15:19:48 [crit] 787#0: *100077950 connect() to 10.1.1.21:8888 failed (99: Cannot assign requested address) while connecting to upstream, client: 10.1.1.29, server: vip.sdns.cn, 
2023/04/18 15:19:48 [crit] 786#0: *100078001 connect() to 10.1.1.21:8888 failed (99: Cannot assign requested address) while connecting to upstream, client: 10.1.1.29, server: vip.sdns.cn, 
2023/04/18 15:19:50 [crit] 789#0: *100078390 connect() to 10.1.1.21:8888 failed (99: Cannot assign requested address) while connecting to upstream, client: 10.1.1.29, server: vip.sdns.cn, 
2023/04/18 15:19:50 [crit] 788#0: *100078392 connect() to 10.1.1.21:8888 failed (99: Cannot assign requested address) while connecting to upstream, client: 10.1.1.29, server: vip.sdns.cn, 

在openresty的宿主机执行命令:netstat -ae | wc -l

发现达到了5w+,此时联系网络同事,他也反馈了同样的问题:连接数暴增,如下图。

出现这么多暴增的连接,首先想到的就是死循环访问的问题。

排查宿主机hosts文件,发现运维同事配置了本地解析地址:10.1.1.11 domain.com.cn

10.1.1.11是服务的真实地址,并且nginx的反向代理配置为:proxy_pass http://domain.com.cn;

如果domain.com.cn没有正确解析到服务真实地址10.1.1.11,而是F5地址10.1.1.21,那就刚好构成死循环访问了。于是立刻在docker容器中ping domain.com.cn发现却是10.1.1.21,于是定位到问题。

问题的原因在于:

①openresty宿主机10.1.4.2 设置了hosts文件:10.1.1.11 domain.com.cn,

domain.com.cn这个域名 dns解析到f5:10.1.1.21 , f5又会转发到10.1.4.2,这是构成死循环的前提条件。

②宿主机的hosts文件设置内容并没有同步到docker容器中,这个是通过在docker容器执行openresty -s reload 命令触发了dns缓存更新,看下图:

③至于说DNS切换F5(F5再转发到openrestry)已经上线半个多月为啥没问题,因为,openresty黑名单代码已经跑了很久了长达几个月,上次openresty容器 里面执行reload命令的时候,dns服务器解析还没有切换f5。

4.后续优化

 ①DNS直接解析到openresty,省去F5这一层,两台ng配置Keepalive。

②proxy_pass 域名;使用动态DNS解析,即

http {
	server {
			listen 80;
			set   $domain  doamin.com.cn;					

			location / {
					resolver 8.8.8.8 valid=600s;
					proxy_pass http://$domain;
			}
	}
}

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

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

相关文章

如何远程自己家里电脑

即使您认真地将数据保存到云中,远程访问家庭或办公室计算机上的计算机文件也可能会改变游戏规则。也许您正坐在旅馆房间里,需要在家用电脑上运行一个程序。 或者您出门在外,想在手机上运行桌面应用程序。 这就是远程桌面工具的用武之地。配置…

【ansj分词,英文被转换为了小写】

ansj分词,英文被转换为了小写 没有识别到词表解决方案jieba分词 没有识别到词表 因为数据是大写,词表是大写,ansj将数据转换成了小写,无法匹配,词表失效。将词表改为小写就可以成功分词。 这里ansj我们的词表就是一列…

rdma IBV_SEND_FENCE标记位理解

参考rxe驱动代码, 在rxe_req.c文件里,取wqe时,会调用req_next_wqe函数, 在函数的最后有个判断, qp->req.wait_fence设置为1,然后返回NULL,所以rxe_requester函数直接退出了,不会…

【Linux】网络编程入门(TCP + UDP)

目录简述: 前言: 一、网络通信概述 二、网络编程主要函数 (1)socket函数 (2)bind函数 (3)bind函数 (4)accept函数 (5)connect…

AttributeError: ‘LTP‘ object has no attribute ‘seg‘解决方案

大家好,我是爱编程的喵喵。双985硕士毕业,现担任全栈工程师一职,热衷于将数据思维应用到工作与生活中。从事机器学习以及相关的前后端开发工作。曾在阿里云、科大讯飞、CCF等比赛获得多次Top名次。现为CSDN博客专家、人工智能领域优质创作者。喜欢通过博客创作的方式对所学的…

【Jenkins 2.x 实践指南】2.7 pipeline -- 章节小结

目录 一、 pipeline入门 1. pipeline 是什么 2. Jenkinsfile 又是什么 3. pipeline语法 的选择 4. 创建第一个pipeline - helloworld Stage 1: 创建任务 Stage 2: 创建流水线 - Hello World Stage 3: 编写 pipeline 声明 Stage 4: 执行 Stage 5: 点击 #1 查看日志 …

2023年 中国制造业这三大趋势不可忽视

政府要掏1个亿奖励制造企业搞发展,我国制造业大翻身的时代来了吗? 4月12日成都日报电,为支持制造业创新发展,支持制造业数字化、智能化和绿色化转型升级,培育高精尖特企业,政府给扶持政策不说,…

2.5亿行文本数据,导入到SqlServer需要多久?

今天测试了一下SqlServer的导入性能,数据库版本是SqlServer2008r2。 数据源是大概5000个文件,总共12.7G的大小的文本文件, 自己做的导入工具,利用多线程导入,总共耗费了大概1个小时。 导入后的总行数达到2.5亿多行&am…

Linux 安装tomcat教程

前言 PS:安装tomcat需要先配置jdk 1.Tomcat下载 1.1.Tomcat安装包下载 1. 可以选择直接在omcat官网Apache Tomcat - Apache Tomcat 9 Software Downloads下载,上传至linux服务器 1.2. 主机wget源下载 也可以通过直接在linux直接下载 #执行命令 wge…

Spring AOP: 多切面的顺序,性能及异常监控

目录标题 一、Sprig的AOP操作JDK动态代理CGLib动态代理基于xml开发Spring AOP基于注解开发Spring AOP 二、多切面的顺序基于注解的配置基于Ordered接口配置基于XML配置 三、性能及异常监控性能监控异常监控 四、工程目录及运行结果图 一、Sprig的AOP操作 JDK动态代理 //接口 …

港科夜闻|国务院港澳办主任夏宝龙在香港科大考察期间,表示对学校开展创科工作的鼓励及希望...

关注并星标 每周阅读港科夜闻 建立新视野 开启新思维 1、国务院港澳办主任夏宝龙在香港科大考察期间,表示对学校开展创科工作的鼓励及希望。考察期间,夏宝龙主任参观了香港科大的空气动力学和声学实验中心,以及香港科大先进显示与光电子技术国…

【花雕学AI】找出合适的提示词—让ChatGPT发挥出最大的潜力与价值

ChatGPT 是一种基于人工智能技术的自然语言处理系统,它可以回答各种问题,提供有用的信息和建议。然而,要让 ChatGPT 发挥出最大的潜力和价值,我们需要使用一些提示词来帮助它更好地理解我们的问题和需求。这些提示词包括明确、详细…

WPF 看板组件:Kanban Library for WPF 4.2 Crack

WPF 的看板组件。 适用于 WPF 的 DlhSoft 看板库可帮助您在 WPF 应用程序中创建交互式看板。它包括可自定义的状态、可扩展的组、可拖动的项目、可选菜单等等。 用于 WPF 功能的 DlhSoft 看板库 交互式板- 可定制的状态、可扩展的组、可拖动的项目、可选菜单。根据需要注入您自…

D. Restore Permutation(树状数组 + 二分)

Problem - D - Codeforces 一个由整数p1,p2,...,pn组成的数组,如果它包含1到n中的每一个数字恰好一次,则称为一个排列组合。例如,下面的数组就是排列组合: [3,1,2], [1], [1,2,3,4,5] 和 [4,3,1,2]. 下列数组不是排列组合&#x…

「线性DP」合唱队形

合唱队形 https://ac.nowcoder.com/acm/contest/24213/1011 题目描述 合唱队形是指这样的一种队形:设K位同学从左到右依次编号为1,2…,K,他们的身高分别为T1,T2,…,TK, 则他们的身高…

搭建静态网页

day3作业 请给openlab搭建web网站​ 网站需求:​ 1.基于域名[www.openlab.com](http://www.openlab.com)可以访问网站内容为 welcome to openlab!!!​ 2.给该公司创建三个子界面分别显示学生信息,教学资料和缴费网站,基于[www.openlab.com…

第三章(4):自然语言处理入门

第三章(4):自然语言处理入门 在本节中,我们将在简单文本数据上(例如一个句子上),执行一系列基本操作,来帮助你熟悉NLP的工作原理,其中一些技术在第三章(2&…

DDoS攻击手段发生重大转变 网络空间面临未知威胁

2023年第一季度,DDoS攻击手段出现重大转变。攻击开始攻陷破坏的虚拟专用服务器(VPS),而非传统的受感染物联网设备。这标志着DDoS攻击力度出现质的飞跃,网络空间安全迎来新的挑战。 网络空间测绘技术可以探测、采集、分析和处理网络空间数据&…

JeTSON Xavier NX TX2_NX 暗转yolov5 v6.2使用Tensorrt加速实现USB摄像头和CSI摄像头的目标识别及采坑记录

本文是参考各位博客朋友的笔记做了实操整理勿喷。 硬件设备nvidia JETSON NX TX2_NX 软件版本BSP3273(Jetpack4.6.3)再次分享一下刷机指导 Jetson Linux R32.7.3 NVIDIA Jetson Linux 驱动程序包是 Jetson™ 的主板支持包。它包括Linux内核,UEFI引导加载程序&am…

「SAP ABAP」OPEN SQL(十)【SQL性能优化(一)】

💂作者简介: THUNDER王,一名热爱财税和SAP ABAP编程以及热爱分享的博主。目前于江西师范大学本科在读,同时任汉硕云(广东)科技有限公司ABAP开发顾问。在学习工作中,我通常使用偏后端的开发语言A…