场景之一:

基本架构:
网站是由多台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这个资源,我们可以这样做。

  1. [root@squid01 ~]# curl -s -H "Host:www.gyyx.cn" -I \
  2. 'http://x.x.x.x/stage/News/NewsContent.aspx?NewsID=310'             HTTP/1.0 200 OK
  3. Server: nginx/x.x.x
  4. Date: Sun, 13 Mar 2011 13:00:12 GMT
  5. Content-Type: text/html; charset=utf-8
  6. X-Powered-By: ASP.NET
  7. X-AspNet-Version: x.x.x.x
  8. Cache-Control: private
  9. Content-Length: 13622
  10. X-Cache: MISS from webcache
  11. X-Cache-Lookup: MISS from webcache:80
  12. Via: 1.0 webcache:80 (squid/2.6.STABLE10)
  13. Connection: close

不过这样一台一台的测试未免还是有些太慢。

写个脚本来实现同样的功能,您可以通过后面的链接下载到最新的脚本:

  1. #!/bin/bash
  2. # Custer Web Servers Live Test
  3. # 可以用来测试网站集群的前端服务器
  4. # Based host and curl
  5. # 2011-03-12 23:35:11
  6. # 2011-03-13 17:01:56 Version 0.2 需要修正
  7. # wangxiaoyu#live.com
  8. # dig +nocomments -t A www.gyyx.cn |grep -v "^;"|grep -v '^$'|grep -v 'CNAME' |awk '{print $NF}'
  9. function Usage(){
  10. echo -e "Usage:\t$0 DomainName [URL]"
  11. echo -e "eg:\t$0 www.gyyx.cn '/stage/News/NewsContent.aspx?NewsID=310'"
  12. echo -e "\t$0 www.gyyx.cn"
  13. echo -e '实现功能:
  14. \t支持域名访问及URL地址的检测
  15. \t支持显示机房信息
  16. \t支持显示测试点机房信息
  17. \t支持显示网站连接延时,但不包括域名解析的时间
  18. \t支持友好的帮助信息
  19. \t暂不支持批量测试和记日志功能
  20. \t需要测试点为Linux,且正确安装了 host elinks curl 软件
  21. \t暂时只能检查监听在80端口网站的检测:
  22. '
  23. echo -e "友情提示:"
  24. RETVAL=$1
  25. case $RETVAL in
  26. 1)
  27. echo -e "\t请输入使用网站服务器实际访问的域名\n\t如: www.gyyx.cn"
  28. ;;
  29. 2)
  30. echo -e "\t所给定的域名:$HOST,无法被正常解析\n\t请确认是否拼写错误,或解析就有误"
  31. ;;
  32. 3)
  33. echo -e "\t所给定的域名:$HOST,通过host命令未解析到IP\n\t请确认该域名是不是正常访问网站的域名"
  34. ;;
  35. 4)
  36. echo -e "\t请确认您的主机上安装了 $2 软件,因为脚本某些功能会用到"
  37. ;;
  38. *)
  39. ;;
  40. esac
  41. exit $RETVAL
  42. }
  43. ## 容错
  44. [ $# -lt 1 ] && Usage 1
  45. ## HOST
  46. HOST=$1
  47. ## 容错
  48. host $HOST >/dev/null || Usage 2
  49. ## 容错
  50. which host >/dev/null || Usage 4 'host'
  51. which elinks >/dev/null || Usage 4 'elinks'
  52. which curl >/dev/null || Usage 4 'curl'
  53. ## 获取Squid服务器的地址
  54. typeset -a IPs
  55. IPs=($(host $HOST |grep -v '\.$'|sort -n |awk 'BEGIN{ORS=" "}{print $NF}'))
  56. ## 默认curl访问返回HTTP 状态码为200,则认为服务器存活
  57. ## 如果是其它代码则认为是访问失败,并记录日志
  58. ## 容错
  59. [ ${#IPs[*]} -eq 0 ] && Usage 3
  60. ## URL
  61. URL=$2
  62. ## LOGFILE=$0.log
  63. ## 测试点信息
  64. MyIP=$(elinks --dump http://checkip.dyndns.org/ |awk -F: '{print $NF}'|sed 's/^[ ]//g')
  65. echo -e "本地出口地址: $MyIP"
  66. ## 国外的ISP信息代码
  67. ##MyISP="$(elinks --dump "http://www.ip-adress.com/" |awk -F: '/ISP of my IP:/{print $NF}'|sed 's/^[ ]//g')"
  68. ## 另一个版本的ISP信息代码
  69. MyISP=$(elinks --dump "http://tool.chinaz.com/IP/?IP=$MyIP" |sed -ne '/查询结果/{n;p}'|sed -n 's/^[ ]*//gp')
  70. echo -e "归属ISP 信息: $MyISP"
  71. ## 测试,并打印过程
  72. echo -e "Web 网站域名: $HOST"
  73. echo -e "解析得到的IP: ${#IPs[*]} 个IP地址\n"
  74. echo -e "开始测试 ......\n"
  75. printf "%-25s%-20s%-20s%-30s\n" 'IP Address' 'HTTP Code' 'Time Connect(ms)' 'ISP Information'
  76. ## 测试代码
  77. typeset -a RESPONSE
  78. for IP in ${IPs[*]}
  79. do
  80. RESPONSE=($(curl -s -connect-timeout 5 --max-time 10 -H "Host:$HOST" -o /dev/null -I -w '%{http_code} %{time_connect}' $IP$URL))
  81. ISP=$(elinks --dump "http://tool.chinaz.com/IP/?IP=$IP" |sed -ne '/查询结果/{n;p}'|sed -n 's/^[ ]*//gp')
  82. if [ ${RESPONSE[0]} -nq 0 ] ;then ##这部分需要修正
  83. printf "%-25s%-20s%-20s%-30s\n" $IP ${RESPONSE[*]}ms "$ISP"
  84. else
  85. printf "%s-25%s-20s%-20%-30s\n" $IP '超时' "$ISP" ##这部分也需要改
  86. fi
  87. done
  88. echo -e "\n测试结束!\n"

这样我们就可认,把这些脚本上传到测试点,需要测试的时候,我们可以执行一遍,简单查看一下Squid的访问是否正常。需要注意的是我们需要小心地查看返回的HTTP响应码,并且比较保守的办法,是多次curl测试。姑且就抛砖引玉一下了,大家有更好的建议欢迎提出来。

下面是我对一个网站测试的结果:

  1. # ./Web-Cluster-Nodes-Test.sh www.sina.com.cn
  2. 本地出口地址: 123.117.X.X
  3. 归属ISP 信息: 北京市昌平区
  4. Web 网站域名: www.sina.com.cn
  5. 解析得到的IP: 16 个IP地址
  6. 开始测试 ......
  7. IP Address               HTTP Code           Time Connect(ms)    ISP Information
  8. 202.108.33.XX            200                 0.028ms             北京市 中搜公司
  9. 202.108.33.XX            200                 0.026ms             北京市 中搜公司
  10. 202.108.33.XX           200                 0.027ms             北京市 中搜公司
  11. 202.108.33.XX           200                 0.025ms             北京市 中搜公司
  12. 202.108.33.XX           200                 0.026ms             北京市 中搜公司
  13. 202.108.33.XX           200                 0.027ms             北京市 中搜公司
  14. 202.108.33.XX            200                 0.028ms             北京市 中搜公司
  15. 202.108.33.XX            200                 0.047ms             北京市 中搜公司
  16. 202.108.33.XX            200                 0.025ms             北京市 中搜公司
  17. 202.108.33.XX            200                 0.026ms             北京市 中搜公司
  18. 202.108.33.XX           200                 0.026ms             北京市 中搜公司
  19. 202.108.33.XX            200                 0.069ms             北京市 中搜公司
  20. 202.108.33.XX            200                 0.026ms             北京市 中搜公司
  21. 202.108.33.XX            200                 0.176ms             北京市 中搜公司
  22. 202.108.33.XX           200                 0.026ms             北京市 中搜公司
  23. 202.108.33.XX            200                 0.026ms             北京市 中搜公司
  24. 测试结束!

转载于:https://blog.51cto.com/wangxiaoyu/514570

测试网站集群节点的页面访问是否正常相关推荐

  1. hadoop的单机版测试和集群节点的搭建

    Hadoop技术原理: Hdfs主要模块:NameNode.DataNode Yarn主要模块:ResourceManager.NodeManager HDFS主要模块及运行原理: 1)NameNod ...

  2. ceph搭建_如何一键搭建并管理Filecoin集群节点 | Gamma OS新功能上线

    参与filecoin挖矿,对于没有一定技术基础的矿工来说,是一个可触不可及的事情.对于没有任何技术或者技术实力不够的矿工而言,去找别的技术团队合作.或者全权委托其他技术合作方,都存在一些不透明以及信任 ...

  3. redis集群节点宕机 fail状态 redis的投票机制实测

    redis集群节点宕机 fail状态 redis的投票机制实测  redis集群是有很多个redis一起工作,那么就需要这个集群不是那么容易挂掉,所以呢,理论上就应该给集群中的每个节点至少一个备用的r ...

  4. 【RAC】在所有集群节点手动配置SSH无密码访问

    在进行RAC安装时,无密码的SSH配置是一项强制性的安装需求,用来在安装期间配置集群成员节点,并且在安装后,SSH由配置助手.OEM.OPatch和其他特性使用. 自动配置的无密码的SSH在集群的所有 ...

  5. 单台mysql增加节点_如何在一台服务器上安装两个PXC集群节点

    我认为在单个物理服务器上运行2个或多个Percona XtraDB Cluster(PXC)节点这样没有什么意义,除了教育和测试目的,但在这种情况下这样做仍然是有用的.最受欢迎的实现方式似乎是服务器的 ...

  6. 在centos上搭建redis集群并附测试(真集群非伪集群)

    环境:centos6.5 x86 32位 redis3.2.8 ruby-2.2.3 一. redis集群原理 redis是单线程,但是一般的作为缓存使用的话,redis足够了,因为它的读写速度太快了 ...

  7. nacos 本地测试_Nacos集群配置实例(windows下测试)

    1.首先 fork 一份 nacos 的代码到自己的 github 库,然后把代码 clone 到本地. git地址:https://github.com/alibaba/nacos.git 2.然后 ...

  8. 一次对K8S集群service的“非主流”访问方式引发的网络探究

    一次对K8S集群service的"非主流"访问方式引发的网络探究 目录 一次对K8S集群service的"非主流"访问方式引发的网络探究 (一)"颇有 ...

  9. MySQL集群节点参数说明

    1. 定义MySQL集群管理服务器 [NDB_MGMD]部分(或其别名[MGM])用于配置管理服务器的行为.下面列出的所有参数均能被忽略,如果是这样,将使用其默认值.注释:如果ExecuteOnCom ...

最新文章

  1. Events are a bad idea?
  2. C# 获取目录下文件
  3. cmd管道无法接收特定程序返回值_渗透不会反弹shell?来教你写一个cmd的shell
  4. java设置只有一行表格,为什么我的表格插入一行后 样式都变了?是因为没有设置css吗?如果在java函数中插入的td.innerHTML = input type='text'/,可以设置样...
  5. VOIP Codec 三剑客之 ISAC/ILBC -- ISAC (3) High Band Encode 模块
  6. Spark独到见解--Action算子总结
  7. 使用Excel在图片上添加正方形网格线
  8. 回眸2020,展望2021
  9. 初次接触peoplesoft
  10. 服务器系统迁移方案,服务器与应用系统迁移方案.doc
  11. codeforces1146G Zoning Restrictions
  12. 设计模式7.1-管道模式
  13. OpenGLES(一)基础概念
  14. 怎么还原计算机主机名称,电脑怎样系统还原_电脑系统还原详细步骤-系统城...
  15. Pyinstaller打包python文件太大?教你三个小技巧有效减小文件体积
  16. python的面向对象编程项目案例_python面向对象编程实例ants vs bees
  17. JavaScript实现发送短信验证码
  18. 中龍鸿业安全稳定必学的盘口言语有哪些?什么是盘口言语?
  19. eclipse-2021.12-winx64安装卸载配置使用教程
  20. Tableau 十、人口金字塔、漏斗图、箱线图

热门文章

  1. PyTorch入坑(一)~(三): Tensor的概念,基本操作和线性回归
  2. 【C++笔记】运算符重载
  3. 怎么查看php是否安装了symfony_为什么开发人员讨厌PHP???
  4. unix linux 安装mono,关于mono在linux连接unixodbc的问题
  5. docker的php教程https,Docker搭建php环境教程详解
  6. java linux ping ip,java linux ping命令
  7. vue的路由怎么换端口_vue.js如何更改默认端口号8080为指定端口的方法
  8. centos光盘修复引导_CentOS 6.5 修复grub引导
  9. java 结果用长整数型表示_java 编程 输入正整数n,计算n!结果用长整型数表示
  10. go调用python脚本_谁能取代Python?我使用Go来部署机器学习模型的原因