测试网站集群节点的页面访问是否正常
场景之一:
基本架构:
网站是由多台Squid服务器做集群组成,客户端口访问网站的过程是:
客户端向Web站点发出请求,请求某一URL资源;
本地解析服务器域名的IP地址,由于DNS做了视图和对IP的轮循负载,会根据所在地域,获得一组,离自己比较近的Squid服务器地址;
如果Squid自己没有缓存该资源,会向后端的源服务器询问,并返回给客户端。
问题:
某一时间段,有网站的用户向公司客服反映反映网站不能正常打开,但是客服测试是正常的。
定位:
常规的方法是本地修改hosts文件,然后通过浏览器去访问站点,检查是否能正常访问,如果不能正常访问返回的错误页面是什么。
由于不同地域的用户,来源IP是不同的,如果按常规做法,我们需要登录,各个地域的测试机,而后,修改所有的配置文件,一个IP,一个IP的测试。好像挺费力。
我的思路:
使用curl 测试Squid服务器,只要通过curl向Squid集群中的指定IP发送HTTP请求,指定正确的Host,就会准确地测试出URL资源访问是否正常。
例如:
我们需要测试www.gyyx.cn网站的/stage/News/NewsContent.aspx?NewsID=310这个资源,我们可以这样做。
- [root@squid01 ~]# curl -s -H "Host:www.gyyx.cn" -I \
- 'http://x.x.x.x/stage/News/NewsContent.aspx?NewsID=310' HTTP/1.0 200 OK
- Server: nginx/x.x.x
- Date: Sun, 13 Mar 2011 13:00:12 GMT
- Content-Type: text/html; charset=utf-8
- X-Powered-By: ASP.NET
- X-AspNet-Version: x.x.x.x
- Cache-Control: private
- Content-Length: 13622
- X-Cache: MISS from webcache
- X-Cache-Lookup: MISS from webcache:80
- Via: 1.0 webcache:80 (squid/2.6.STABLE10)
- Connection: close
不过这样一台一台的测试未免还是有些太慢。
写个脚本来实现同样的功能,您可以通过后面的链接下载到最新的脚本:
- #!/bin/bash
- # Custer Web Servers Live Test
- # 可以用来测试网站集群的前端服务器
- # Based host and curl
- # 2011-03-12 23:35:11
- # 2011-03-13 17:01:56 Version 0.2 需要修正
- # wangxiaoyu#live.com
- # dig +nocomments -t A www.gyyx.cn |grep -v "^;"|grep -v '^$'|grep -v 'CNAME' |awk '{print $NF}'
- function Usage(){
- echo -e "Usage:\t$0 DomainName [URL]"
- echo -e "eg:\t$0 www.gyyx.cn '/stage/News/NewsContent.aspx?NewsID=310'"
- echo -e "\t$0 www.gyyx.cn"
- echo -e '实现功能:
- \t支持域名访问及URL地址的检测
- \t支持显示机房信息
- \t支持显示测试点机房信息
- \t支持显示网站连接延时,但不包括域名解析的时间
- \t支持友好的帮助信息
- \t暂不支持批量测试和记日志功能
- \t需要测试点为Linux,且正确安装了 host elinks curl 软件
- \t暂时只能检查监听在80端口网站的检测:
- '
- echo -e "友情提示:"
- RETVAL=$1
- case $RETVAL in
- 1)
- echo -e "\t请输入使用网站服务器实际访问的域名\n\t如: www.gyyx.cn"
- ;;
- 2)
- echo -e "\t所给定的域名:$HOST,无法被正常解析\n\t请确认是否拼写错误,或解析就有误"
- ;;
- 3)
- echo -e "\t所给定的域名:$HOST,通过host命令未解析到IP\n\t请确认该域名是不是正常访问网站的域名"
- ;;
- 4)
- echo -e "\t请确认您的主机上安装了 $2 软件,因为脚本某些功能会用到"
- ;;
- *)
- ;;
- esac
- exit $RETVAL
- }
- ## 容错
- [ $# -lt 1 ] && Usage 1
- ## HOST
- HOST=$1
- ## 容错
- host $HOST >/dev/null || Usage 2
- ## 容错
- which host >/dev/null || Usage 4 'host'
- which elinks >/dev/null || Usage 4 'elinks'
- which curl >/dev/null || Usage 4 'curl'
- ## 获取Squid服务器的地址
- typeset -a IPs
- IPs=($(host $HOST |grep -v '\.$'|sort -n |awk 'BEGIN{ORS=" "}{print $NF}'))
- ## 默认curl访问返回HTTP 状态码为200,则认为服务器存活
- ## 如果是其它代码则认为是访问失败,并记录日志
- ## 容错
- [ ${#IPs[*]} -eq 0 ] && Usage 3
- ## URL
- URL=$2
- ## LOGFILE=$0.log
- ## 测试点信息
- MyIP=$(elinks --dump http://checkip.dyndns.org/ |awk -F: '{print $NF}'|sed 's/^[ ]//g')
- echo -e "本地出口地址: $MyIP"
- ## 国外的ISP信息代码
- ##MyISP="$(elinks --dump "http://www.ip-adress.com/" |awk -F: '/ISP of my IP:/{print $NF}'|sed 's/^[ ]//g')"
- ## 另一个版本的ISP信息代码
- MyISP=$(elinks --dump "http://tool.chinaz.com/IP/?IP=$MyIP" |sed -ne '/查询结果/{n;p}'|sed -n 's/^[ ]*//gp')
- echo -e "归属ISP 信息: $MyISP"
- ## 测试,并打印过程
- echo -e "Web 网站域名: $HOST"
- echo -e "解析得到的IP: ${#IPs[*]} 个IP地址\n"
- echo -e "开始测试 ......\n"
- printf "%-25s%-20s%-20s%-30s\n" 'IP Address' 'HTTP Code' 'Time Connect(ms)' 'ISP Information'
- ## 测试代码
- typeset -a RESPONSE
- for IP in ${IPs[*]}
- do
- RESPONSE=($(curl -s -connect-timeout 5 --max-time 10 -H "Host:$HOST" -o /dev/null -I -w '%{http_code} %{time_connect}' $IP$URL))
- ISP=$(elinks --dump "http://tool.chinaz.com/IP/?IP=$IP" |sed -ne '/查询结果/{n;p}'|sed -n 's/^[ ]*//gp')
- if [ ${RESPONSE[0]} -nq 0 ] ;then ##这部分需要修正
- printf "%-25s%-20s%-20s%-30s\n" $IP ${RESPONSE[*]}ms "$ISP"
- else
- printf "%s-25%s-20s%-20%-30s\n" $IP '超时' "$ISP" ##这部分也需要改
- fi
- done
- echo -e "\n测试结束!\n"
这样我们就可认,把这些脚本上传到测试点,需要测试的时候,我们可以执行一遍,简单查看一下Squid的访问是否正常。需要注意的是我们需要小心地查看返回的HTTP响应码,并且比较保守的办法,是多次curl测试。姑且就抛砖引玉一下了,大家有更好的建议欢迎提出来。
下面是我对一个网站测试的结果:
- # ./Web-Cluster-Nodes-Test.sh www.sina.com.cn
- 本地出口地址: 123.117.X.X
- 归属ISP 信息: 北京市昌平区
- Web 网站域名: www.sina.com.cn
- 解析得到的IP: 16 个IP地址
- 开始测试 ......
- IP Address HTTP Code Time Connect(ms) ISP Information
- 202.108.33.XX 200 0.028ms 北京市 中搜公司
- 202.108.33.XX 200 0.026ms 北京市 中搜公司
- 202.108.33.XX 200 0.027ms 北京市 中搜公司
- 202.108.33.XX 200 0.025ms 北京市 中搜公司
- 202.108.33.XX 200 0.026ms 北京市 中搜公司
- 202.108.33.XX 200 0.027ms 北京市 中搜公司
- 202.108.33.XX 200 0.028ms 北京市 中搜公司
- 202.108.33.XX 200 0.047ms 北京市 中搜公司
- 202.108.33.XX 200 0.025ms 北京市 中搜公司
- 202.108.33.XX 200 0.026ms 北京市 中搜公司
- 202.108.33.XX 200 0.026ms 北京市 中搜公司
- 202.108.33.XX 200 0.069ms 北京市 中搜公司
- 202.108.33.XX 200 0.026ms 北京市 中搜公司
- 202.108.33.XX 200 0.176ms 北京市 中搜公司
- 202.108.33.XX 200 0.026ms 北京市 中搜公司
- 202.108.33.XX 200 0.026ms 北京市 中搜公司
- 测试结束!
转载于:https://blog.51cto.com/wangxiaoyu/514570
测试网站集群节点的页面访问是否正常相关推荐
- hadoop的单机版测试和集群节点的搭建
Hadoop技术原理: Hdfs主要模块:NameNode.DataNode Yarn主要模块:ResourceManager.NodeManager HDFS主要模块及运行原理: 1)NameNod ...
- ceph搭建_如何一键搭建并管理Filecoin集群节点 | Gamma OS新功能上线
参与filecoin挖矿,对于没有一定技术基础的矿工来说,是一个可触不可及的事情.对于没有任何技术或者技术实力不够的矿工而言,去找别的技术团队合作.或者全权委托其他技术合作方,都存在一些不透明以及信任 ...
- redis集群节点宕机 fail状态 redis的投票机制实测
redis集群节点宕机 fail状态 redis的投票机制实测 redis集群是有很多个redis一起工作,那么就需要这个集群不是那么容易挂掉,所以呢,理论上就应该给集群中的每个节点至少一个备用的r ...
- 【RAC】在所有集群节点手动配置SSH无密码访问
在进行RAC安装时,无密码的SSH配置是一项强制性的安装需求,用来在安装期间配置集群成员节点,并且在安装后,SSH由配置助手.OEM.OPatch和其他特性使用. 自动配置的无密码的SSH在集群的所有 ...
- 单台mysql增加节点_如何在一台服务器上安装两个PXC集群节点
我认为在单个物理服务器上运行2个或多个Percona XtraDB Cluster(PXC)节点这样没有什么意义,除了教育和测试目的,但在这种情况下这样做仍然是有用的.最受欢迎的实现方式似乎是服务器的 ...
- 在centos上搭建redis集群并附测试(真集群非伪集群)
环境:centos6.5 x86 32位 redis3.2.8 ruby-2.2.3 一. redis集群原理 redis是单线程,但是一般的作为缓存使用的话,redis足够了,因为它的读写速度太快了 ...
- nacos 本地测试_Nacos集群配置实例(windows下测试)
1.首先 fork 一份 nacos 的代码到自己的 github 库,然后把代码 clone 到本地. git地址:https://github.com/alibaba/nacos.git 2.然后 ...
- 一次对K8S集群service的“非主流”访问方式引发的网络探究
一次对K8S集群service的"非主流"访问方式引发的网络探究 目录 一次对K8S集群service的"非主流"访问方式引发的网络探究 (一)"颇有 ...
- MySQL集群节点参数说明
1. 定义MySQL集群管理服务器 [NDB_MGMD]部分(或其别名[MGM])用于配置管理服务器的行为.下面列出的所有参数均能被忽略,如果是这样,将使用其默认值.注释:如果ExecuteOnCom ...
最新文章
- Events are a bad idea?
- C# 获取目录下文件
- cmd管道无法接收特定程序返回值_渗透不会反弹shell?来教你写一个cmd的shell
- java设置只有一行表格,为什么我的表格插入一行后 样式都变了?是因为没有设置css吗?如果在java函数中插入的td.innerHTML = input type='text'/,可以设置样...
- VOIP Codec 三剑客之 ISAC/ILBC -- ISAC (3) High Band Encode 模块
- Spark独到见解--Action算子总结
- 使用Excel在图片上添加正方形网格线
- 回眸2020,展望2021
- 初次接触peoplesoft
- 服务器系统迁移方案,服务器与应用系统迁移方案.doc
- codeforces1146G Zoning Restrictions
- 设计模式7.1-管道模式
- OpenGLES(一)基础概念
- 怎么还原计算机主机名称,电脑怎样系统还原_电脑系统还原详细步骤-系统城...
- Pyinstaller打包python文件太大?教你三个小技巧有效减小文件体积
- python的面向对象编程项目案例_python面向对象编程实例ants vs bees
- JavaScript实现发送短信验证码
- 中龍鸿业安全稳定必学的盘口言语有哪些?什么是盘口言语?
- eclipse-2021.12-winx64安装卸载配置使用教程
- Tableau 十、人口金字塔、漏斗图、箱线图
热门文章
- PyTorch入坑(一)~(三): Tensor的概念,基本操作和线性回归
- 【C++笔记】运算符重载
- 怎么查看php是否安装了symfony_为什么开发人员讨厌PHP???
- unix linux 安装mono,关于mono在linux连接unixodbc的问题
- docker的php教程https,Docker搭建php环境教程详解
- java linux ping ip,java linux ping命令
- vue的路由怎么换端口_vue.js如何更改默认端口号8080为指定端口的方法
- centos光盘修复引导_CentOS 6.5 修复grub引导
- java 结果用长整数型表示_java 编程 输入正整数n,计算n!结果用长整型数表示
- go调用python脚本_谁能取代Python?我使用Go来部署机器学习模型的原因