通过分析nginx的日志来过滤出访问过于频繁的IP地址,然后添加到nginx的blockip.conf,并重启nginx

脚本如下:

#!/bin/sh
nginx_home = /Data/app_1/nginx
log_path = /Data/logs
/usr/bin/tail -n50000 $log_path/access.log /
|awk ‘$8 ~/aspx/{print $2,$13}’ /
|grep -i -v -E “google|yahoo|baidu|msnbot|FeedSky|sogou” /
|awk ‘{print $1}’|sort|uniq -c |sort -rn /
|awk ‘{if($1>150)print “deny “$2″;”}’> $nginx_home/conf/vhosts/blockip.conf
/bin/kill -HUP `cat $nginx_home/nginx.pid`

也可以通过分析nginx日志过滤出频繁访问IP,直接用iptables屏蔽这个IP,就用不着重启nginx了,并且屏蔽效果更好。

单个IP的命令是
iptables -I INPUT -s 124.115.0.199 -j DROP

封IP段的命令是
iptables -I INPUT -s 124.115.0.0/16 -j DROP

封整个段的命令是
iptables -I INPUT -s 194.42.0.0/8 -j DROP

封几个段的命令是
iptables -I INPUT -s 61.37.80.0/24 -j DROP
iptables -I INPUT -s 61.37.81.0/24 -j DROP

刚才不小心搞的自己都连不上了-_-!!!
iptables -I INPUT -p tcp –dport 80 -s 124.115.0.0/24 -j DROP
以后用这种只封80端口就行了,不会出问题!

iptables -I INPUT -p tcp –dport 80 -s 124.115.0.0/24 -j DROP

iptables -I INPUT -s 61.37.81.0/24 -j DROP

解封
iptables -F
清空
iptables -D INPUT 数字

Hadoop 文件上传超时原因分析

hadoop上传数据问题
2011-06-14 22:07
当一个HDFS系统同时处理许多个并行的put操作,往HDFS上传数据时,有时候会出现dfsclient 端发生socket 链接超时的报错,有的时候甚至会由于这种原因导致最终的put操作失败,造成数据上传不完整。
log类似如下:

All datanodes  *** are bad. Aborting...

类似这样的错误,常常会在并行的put操作比较多,比如60-80个,每个put的数据量约100G的时候,产生类似的错误,错误出现以后,比较好一点的情况是DFSClient端会报出一些列的错误log,如:

error Recovery for block  block_-13954o849583405 bad datanode ** "
Bad response  for block block_-254u94545923  from datanode  ***

10/01/18 18:48:00 WARN hdfs.DFSClient: Error Recovery for block blk_6828192944006126093_201296138 bad datanode[0] 172.23.115.79:50010
10/01/18 18:48:00 WARN hdfs.DFSClient: Error Recovery for block blk_6828192944006126093_201296138 in pipeline 172.23.115.79:50010, 172.23.115.68:50010: bad datanode 172.23.115.79:50010
10/01/18 18:48:27 WARN hdfs.DFSClient: DFSOutputStream ResponseProcessor exception  for block blk_-1574627828968965286_201296769java.net.SocketTimeoutException: 63000 millis timeout while waiting for channel to be ready for read. ch : java.nio.channels.SocketChannel[connected local=/172.23.113.2:50391 remote=/172.23.114.41:50010]
    at org.apache.hadoop.net.SocketIOWithTimeout.doIO(SocketIOWithTimeout.java:162)
    at org.apache.hadoop.net.SocketInputStream.read(SocketInputStream.java:150)
    at org.apache.hadoop.net.SocketInputStream.read(SocketInputStream.java:123)
    at java.io.DataInputStream.readFully(DataInputStream.java:178)
    at java.io.DataInputStream.readLong(DataInputStream.java:399)
    at org.apache.hadoop.hdfs.DFSClient$DFSOutputStream$ResponseProcessor.run(DFSClient.java:2318)

10/01/18 18:48:27 WARN hdfs.DFSClient: Error Recovery for block blk_-1574627828968965286_201296769 bad datanode[0] 172.23.114.41:50010
10/01/18 18:49:04 WARN hdfs.DFSClient: DFSOutputStream ResponseProcessor exception  for block blk_6828192944006126093_201297704java.net.SocketTimeoutException: 63000 millis timeout while waiting for channel to be ready for read. ch : java.nio.channels.SocketChannel[connected local=/172.23.113.2:44177 remote=/172.23.115.68:50010]
    at org.apache.hadoop.net.SocketIOWithTimeout.doIO(SocketIOWithTimeout.java:162)
    at org.apache.hadoop.net.SocketInputStream.read(SocketInputStream.java:150)
    at org.apache.hadoop.net.SocketInputStream.read(SocketInputStream.java:123)
    at java.io.DataInputStream.readFully(DataInputStream.java:178)
    at java.io.DataInputStream.readLong(DataInputStream.java:399)
    at org.apache.hadoop.hdfs.DFSClient$DFSOutputStream$ResponseProcessor.run(DFSClient.java:2318)

10/01/18 18:49:04 WARN hdfs.DFSClient: Error Recovery for block blk_6828192944006126093_201297704 bad datanode[0] 172.23.115.68:50010
put: All datanodes 172.23.115.190:50010 are bad. Aborting...
put: All datanodes 172.23.115.101:50010 are bad. Aborting...

产生这样的报错后,put操作仍然能够进行,并最终数据上传是完整的,只是效率会收到影响。
但是如果碰到不好的情况,就会报出:
All datanodes  *** are bad. Aborting...
这样的错误,这样就会导致put操作中断,导致数据上传不完整。

后来检查发现,所有的datanode虽然负载都比较搞,都在正常服务,而DFS的操作都是客户端直接跟datanode进行通信和数据传输,那么到底是什么原因导致了这样的问题呢?
根 据log查看hadoop的代码发现,出错的地方在 DFSClient 的 processDatanodeError()方法中,进入这个方法就表示DFSClient的操作发生了错误。而进入这个报错的代码逻辑是因为 DFSClient中发现errorIndex > 0,继续跟踪,发现修改了errorIndex变量的方法调用中,只有 createBlockOutputStream,DFSOutputStream的构造方法,以及ResponseProcessor.run()方法 中对该变量进行了修改,而由于DFSOutputStream的构造方法对该变量进行的修改是在append的时 候,ResponseProcessor.run()会直接抛出另外的异常,因此调用定位到createBlockOutputStream() 方法中,最后发现修改errorIndex的原因是由于 某个datanode的link跟dfsclient短发生了失败,根据log中发现失败是由于socket链接超时导致,这说明,put发生异常的时 候,是DFSClient 链接从namenode得来的datanode列表中的datanode时,由于该datanode当时的负载非常的高,导致当时无法服务造成。

 

找到原因以后就好办了,由于DFSClient跟datanode的链接超时控制参数是一个客户端参数,因此,在数据上传的客户端hadoop- site.xml里修改配置参数 dfs.socket.timeout(默认十分钟),之后重新运行大批量的数据上传操作,问题不再重现:)

Nginx+iptables屏蔽访问Web页面过于频繁的IP(防DDOS,恶意访问,采集器)的更多相关文章

  1. 集群重启后启动ambari-server访问Web页面无法启动集群解决

    集群重启后启动ambari-server访问Web页面无法启动集群解决 使用ambari部署的集群重新启动后,必须手动重启ambari-server和所有集群主机上的ambari-agent. amb ...

  2. ios访问web页面<div>点击事件不起效果,以及alert()显示url的解决办法

    ios访问web页面<div>点击不起效果,在其div上添加style=”cursor:pointer:“ jquery web页面动态append()事件调用方法:$(document) ...

  3. nginx实现vue的web页面项目集群负载

    问题描述 项目是使用前后端分离,前端使用的是vue技术. 想实现的功能是:在前端项目部署的过程中(直接删除项目目录的文件,然后上传新的项目文件),在这个短时间内不能影响用户的使用.所以想到的就是使用n ...

  4. Java web 实现 之 Filter分析ip统计网站的访问次数

    统计工作需要在所有资源之前都执行,那么就可以放到Filter中了. 我们这个过滤器不打算做拦截操作!因为我们只是用来做统计的. 用什么东西来装载统计的数据.Map<String,Integer& ...

  5. nginx让用户通过用户名密码认证访问web页面

    在使用nginx转发的时候,要进行一次用户身份的确认. 1)通过htpasswd命令生成用户名及对应密码数据库文件. [root@bgs-5p173-wangwenting ~]# htpasswd ...

  6. hbase60010端口无法访问web页面

    原因:HBASE1.0之后的版本web端访问的接口变更为16010

  7. 使用Nginx后如何在web应用中获取用户ip及原理解释

    当nginx作为反向代理功能时,转发请求到后端服务器 通常需要使用如下命令为转发的请求增加请求头 X-Forwarded-For proxy_set_header X-Forwarded-For &q ...

  8. Web页面解析过程(浅)

    web页面流程 域名解析DNS 域名解析:把域名指向网络空间IP,让人们通过简单的域名访问Web网站的服务. DNS:域名系统 DNS服务器:记录着域名及其对应的IP地址 解析域名: ​ 浏览器中输入 ...

  9. WEB页面采集器编写经验之一:静态页面采集器

    严格意义来说,采集器和爬虫不是一回事:采集器是对特定结构的数据来源进行解析.结构化,将所需的数据从中提取出来:而爬虫的主要目标更多的是页面里的链接和页面的TITLE. 采集器也写过不少了,随便写一点经 ...

随机推荐

  1. React +Redux+ Ant Design + echarts 项目实践

    项目框架 采用React.js作为项目的框架 采用redux作为数据管理的框架 采用antd作为项目的UI组件 采用echarts完成项目中折线图的绘制 个人项目工作流程总结 拿到UI高保真图片之后先 ...

  2. linux ubuntu 本地镜像 软件源 制作方法

    1.配置当前软件源,镜像非常大,所以首先要配置一下载速度快的软件源http://fffo.blog.163.com/blog/static/2119130682014322104136601/2.安装 ...

  3. 全局唯一ID生成器

    分布式环境中,如何保证生成的id是唯一不重复的? twitter,开源出了一个snowflake算法,现在很多企业都按照该算法作为参照,实现了自己的一套id生成器. 该算法的主要思路为: 刚好64位的 ...

  4. 使用SDWebImage淡入淡出的方式加载图片

    使用SDWebImage淡入淡出的方式加载图片 效果: 请通过以下方式下载源码: 找到它修改文件的地方: 以下是使用源码: // // ViewController.m // SDWebImageFa ...

  5. 摄像机内参相关(3ds max)

    一般的原理参考:http://ksimek.github.io/2012/08/13/introduction/ 对于3ds max建模时使用的target camera,如果想得到它的内外参,可以利 ...

  6. YBB.DBUtils用法

    通用数据访问类库,兼容ADO.ADO.NET方式访问. 利用ProviderFactory工厂方法,支持Oracle(不需要安装客户端).SQL Server.OleDb和ODBC等数据库访问. ht ...

  7. SC review 5.2 设计可复用软件

    行为子类型与Liskov替换原则 Java 中编译器执行的规则(静态类型检查): • 子类型可以增加方法,但不可删 • 子类型需要实现抽象类型中的所有未实现方法 • 子类型中重写的方法必须有相同或子类 ...

  8. python的unittest框架中如何删除测试数据,清理环境,可以通过addCleanup函数

    def addCleanup(self, function, *args, **kwargs): """Add a function, with arguments, t ...

  9. UVa 1412 - Fund Management(状压DP + 预处理)

    链接: https://uva.onlinejudge.org/index.php?option=com_onlinejudge&Itemid=8&page=show_problem& ...

  10. 「PKUWC2018」随机算法

    题目 思博状压写不出是不是没救了呀 首先我们直接状压当前最大独立集的大小显然是不对的,因为我们的答案还和我们考虑的顺序有关 我们发现最大独立集的个数好像不是很多,可能是\(O(n)\)级别的,于是我们 ...