在性能测试过程中,我们可能会关注很多指标,比如CPU、IO、网络、磁盘等,通过这些指标大致可以判断哪个环节遇到了性能瓶颈,但是当这些指标无法判断出性能瓶颈时,我们可能就需要对一些中间件进行监控,比如Nginx,Tomcat等,当然可能还有很多其他中间件,我们本章主要探讨Nginx+Tomcat的部署及监控,以及使用Jmeter对我们的服务器进行压测,在压测过程中,可能也会遇到Jmeter的一些瓶颈,话不多说,先搞起来。

关于Nginx实现负载均衡

Nginx作为反向代理服务器,实现负载均衡。首先浏览器发起请求,到达Nginx,由Nginx将请求地址转发给相应的tomcat服务器,再由tomcat服务器将结果返回给Nginx,Nginx将结果再转发给浏览器。大致流程如下:

环境准备

  • Centos6.3
  • JDK1.8
  • Tomcat8

客户端

  • Vmware
  • Xshell
  • Xftp

Xsehll配置

我们安装Centos6.3后,使用Xshell进行连接,Xshell安装比较简单,基本都是下一步下一步。建议使用root用户进行登录,密码为虚拟机创建用户时密码,Xshell主要作用是方便我们敲Linux命令。如下图所示:

Xftp配置

我们安装Centos6.3后,使用Xftp进行连接,Xftp安装比较简单,基本都是下一步下一步。建议使用root用户进行登录,密码为虚拟机创建用户时密码。协议选择SFTP,Xftp主要作用是上传和下载文件。如下图所示:

JDK环境配置

我们使用xftp把jdk放到 /usr/local 下,然后输入vi /etc/profile,在文件末尾加入如下内容:

  1. export JAVA_HOME=/usr/local/jdk1.8.0_65
  2. export CLASSPATH=$CLASSPATH:$JAVA_HOME/lib:$JAVA_HOME/jre/lib
  3. export PATH=$JAVA_HOME/bin:$JAVA_HOME/jre/bin:$PATH:$HOME/bin

然后输入source /etc/profile,在命令行输入java -version,出现如下内容下图,说明JDK环境配置成功

  1. root@ubuntu:/usr/local# java -version
  2. java version "1.8.0_65"
  3. Java(TM) SE Runtime Environment (build 1.8.0_65-b17)
  4. Java HotSpot(TM) 64-Bit Server VM (build 25.65-b01, mixed mode)

安装Nginx

下载Nginx

切换到usr/local,然后命令行输入wget http://nginx.org/download/nginx-1.11.6.tar.gz

解压nginx的gz包

tar -zxvf nginx-1.11.6.tar.gz

安装依赖

cd /usr/local/nginx-1.11.6切换到nginx安装目录

yum -y install pcre-devel

yum install -y zlib-devel

./configure --with-http_stub_status_module

编译

make install

启动nginx

cd /usr/local/nginx/sbin

./nginx

验证Nginx是否启动成功

curl http://localhost

出现下面信息说明安装成功

  1. <!DOCTYPE html>
  2. <html>
  3. <head>
  4. <title>Welcome to nginx!</title>
  5. <style>
  6. body {
  7. width: 35em;
  8. margin: 0 auto;
  9. font-family: Tahoma, Verdana, Arial, sans-serif;
  10. }
  11. </style>
  12. </head>
  13. <body>
  14. <h1>Welcome to nginx!</h1>
  15. <p>If you see this page, the nginx web server is successfully installed and
  16. working. Further configuration is required.</p>
  17. <p>For online documentation and support please refer to
  18. <a href="http://nginx.org/">nginx.org</a>.<br/>
  19. Commercial support is available at
  20. <a href="http://nginx.com/">nginx.com</a>.</p>
  21. <p><em>Thank you for using nginx.</em></p>
  22. </body>
  23. </html>

Nginx常用命令

cd /usr/local/nginx/sbin

  • ./nginx 启动
  • ./nginx -s stop 关闭
  • ./nginx -s reopen 重启
  • ./nginx -v 查看版本
  • ./nginx -h 可以看到命令的帮助信息

Tomcat部署

1.把2个Tomcat包放在/usr/local,为了避免端口冲突,我们需要修改tomcat/conf/server.xml三处地方,

tomcat1如下:

  1. <Server port="8006" shutdown="SHUTDOWN">
  2. <Listener className="org.apache.catalina.startup.VersionLoggerListener" />
  3. <Connector port="8081" protocol="HTTP/1.1"
  4. connectionTimeout="20000"
  5. redirectPort="8443" />
  6. <!-- Define an AJP 1.3 Connector on port 8009 -->
  7. <Connector port="8010" protocol="AJP/1.3" redirectPort="8443" />

tomcat2如下:

  1. <Server port="8007" shutdown="SHUTDOWN">
  2. <Listener className="org.apache.catalina.startup.VersionLoggerListener" />
  3. <Connector port="8082" protocol="HTTP/1.1"
  4. connectionTimeout="20000"
  5. redirectPort="8443" />
  6. <!-- Define an AJP 1.3 Connector on port 8009 -->
  7. <Connector port="8011" protocol="AJP/1.3" redirectPort="8443" />

修改完成之后,tomcat1的端口位8081,tomcat2的端口为8082

2.修改完tomcat端口号之后,为了区分tomcat1和tomcat2,修改tomcat/webapps/ROOT/index.jsptomcat1修改为如下内容

  1. <html>
  2. <head>
  3. <title>第一个 JSP 程序</title>
  4. </head>
  5. <body>
  6. <%
  7. out.println("111111111");
  8. %>
  9. </body>
  10. </html>

tomcat2修改为如下内容

  1. <html>
  2. <head>
  3. <title>第一个 JSP 程序</title>
  4. </head>
  5. <body>
  6. <%
  7. out.println("22222222");
  8. %>
  9. </body>
  10. </html>

3.进入/usr/local/,输入chmod 777 -R tomcat1 tomcat2给2个tomcat赋予权限(如果权限不够,把bin也赋予权限),然后进入/usr/local/tomcat/bin,输入service iptables stop先关闭防火墙,然后./startup.sh启动tomcat1和tomcat2,启动成功截图如下:



修改nginx.conf

首先我们使用find / -name nginx.conf找到nginx.conf的位置,我们使用/usr/local/nginx/conf/nginx.conf 这个路径的nginx.conf文件,使用vim nginx.conf打开,找到http,在#gzip on;下面作如下修改:

  1. upstream tomcat {
  2. server 127.0.0.1:8081 weight=1;
  3. server 127.0.0.1:8082 weight=1;
  4. }
  5. server {
  6. listen 80 default_server;
  7. server_name localhost;
  8. location / {
  9. root html;
  10. proxy_pass http://tomcat; #配置集群指向
  11. index index.html index.htm;
  12. }
  13. location /status {
  14. stub_status on;
  15. access_log off;
  16. }
  17. }

做了如上配置后,在/usr/local/nginx/sbin重启nginx./nginx -s reopen,启动成功,当我们访问localhost时,会发现不是Nginx的首页了,而是出现/usr/local/tomcat1/webapps/ROOT/index.jsp或者是/usr/local/tomcat2/webapps/ROOT/index.jsp的页面。当我们来回刷新,会发现在下面的2个页面来回跳转,这就实现了负载均衡技术。



查看Nginx的一些状态信息

访问虚拟机ip/status,出现如下内容,说明stub_status模块部署成功

各数据项说明:

  • Active connections: 当前nginx正在处理的活动连接数.
  • Server accepts handled requests : nginx总共处理了414 个连接,成功创建414 握手(证明中间没有失败的),总共处理了491个请求
  • Reading: nginx读取到客户端的Header信息数
  • Writing: nginx返回给客户端的Header信息数
  • Waiting: 开启keep-alive的情况下,这个值等于 active – (reading + writing),意思就是nginx已经处理完成,正在等候下一次请求指令的驻留连接。

    所以,在访问效率高,请求很快被处理完毕的情况下,Waiting数比较多是正常的.如果reading +writing数较多,则说明并发访问量非常大,正在处理过程中。

为什么是访问ip/status

为什么是访问ip/status?还记得我们在编译的时候使用./configure --with-http_stub_status_module吗?编译的时候安装了stub_status模块,然后我们对nginx.conf进行了一些配置,除了加负载集群,还新增了一个路径 location /status 。

ngxtop

centos6 暂时没有解决ngxtop启动失败问题,大家可以访问我的阿里云,命令行输入ngxtop,对照官方文档进行操作,ngxtop地址

Tomcat监控Probe

Probe github地址

1.首先把probe.war放入tomcat下面的webapps文件夹

2.修改CATALINA_HOME/conf/tomcat-users.xml,新增以下内容

  1. <role rolename="tomcat"/>
  2.   <role rolename="role1"/>
  3.   <role rolename="manager-gui"/>
  4.   <role rolename="manager-script"/>
  5.   <role rolename="manager-jmx"/>
  6.   <role rolename="manager-status"/>
  7.   <role rolename="poweruser"/>
  8.   <role rolename="probeuser"/>
  9.   <user username="tomcat" password="tomcat" roles="tomcat"/>
  10.   <user username="both" password="tomcat" roles="tomcat,role1"/>
  11.   <user username="role1" password="tomcat" roles="role1"/>
  12.   <user username="sss" password="sss" roles="manager-gui"/>
  13.   <user username="fbysss" password="sss" roles="manager-script,manager-jmx,manager-status,poweruser,probeuser"/>

3.修改CATALINA_HOME/bin/catalina.sh,新增JAVA_OPTS="$JAVA_OPTS -Dcom.sun.management.jmxremote",开启jvm远程监控

4.重启tomcat,访问ip:端口号/probe,出现如下截图说明搭建成功

欢迎关注微信公众号:软件测试汪。软件测试交流群:809111560

Centos6下实现Nginx+Tomcat实现负载均衡及监控的更多相关文章

  1. Ubuntu下实现Nginx+Tomcat实现负载均衡

    先说一下为什么写这个文章,在性能测试过程中,我们可能会关注很多指标,比如CPU.IO.网络.磁盘等,通过这些指标大致可以判断哪个环节遇到了性能瓶颈,但是当这些指标无法判断出性能瓶颈时,我们可能就需要对 ...

  2. Windows下使用Nginx+tomcat配置负载均衡

    Nginx是一款轻量级的Web服务器/反向代理服务器及电子邮件(IMAP/POP3)代理服务器,并在一个BSD-like 协议下发行.由俄罗斯的程序设计师Igor Sysoev所开发,供俄国大型的入口 ...

  3. Nginx+Tomcat+Memcached负载均衡集群服务搭建

    操作系统:CentOS6.5  本文档主要讲解,如何在CentOS6.5下搭建Nginx+Tomcat+Memcached负载均衡集群服务器,Nginx负责负载均衡,Tomcat负责实际服务,Memc ...

  4. Windows下使用Nginx+Tomact做负载均衡

    前言 今天,王子与大家闲谈一下如何在Windows下使用Nginx+Tomcat做负载均衡的完整步骤,小伙伴们可以试着自己动手实践一下哦. 另外说明一点,本篇文章是纯实操文章,不涉及太多原理的解读,后 ...

  5. nginx+tomcat+redis负载均衡及session共享

    概述 本文档是用来详细描述 nginx+tomcat+redis负载均衡实现session共享 所需软件及下载地址 软件名称 下载地址 功能说明 Nginx-v1.6.0 http://nginx.o ...

  6. 使用 Nginx + Tomcat 搭建负载均衡

    负载均衡 建立在现有网络结构之上,它提供了一种廉价有效透明的方法扩展网络设备和服务器的带宽.增加吞吐量.加强网络数据处理能力.提高网络的灵活性和可用性. 负载均衡,英文名称为Load Balance, ...

  7. nginx+tomcat实现负载均衡以及双机热备

    还记得那些年吗? 还记得更新代码之后,服务器起不来被领导训斥吗?还记得更新代码,需要停机过多的时间被渠道部们埋怨吗?还记得更新代码,代码出错时自己吓个半死吗?于是我们聪明勤快的程序员,看着电影待到夜深 ...

  8. 简单的 Nginx+Tomcat 配置负载均衡集群

    简单 Nginx+Tomcat 配置负载均衡集群 前期准备 解压两个tomcat,修改端口号 server1:8081 server:8082 同时启动 nginx官网下载解压版nginx 创建一个简 ...

  9. Nginx+Tomcat 实现负载均衡 ,动静分离集群部署

    Nginx + Tomcat 实现负载均衡,动静分离集群部署 1.Nginx实现负载均衡原理 2.Nginx配置反向代理主要参数 3.实验 1.Nginx实现负载均衡原理: Nginx服务器作为前端, ...

随机推荐

  1. python接口自动化测试三十五:用BeautifulReport生成报告

    GitHub传送门:https://github.com/TesterlifeRaymond/BeautifulReport 配置BeautifulReport 下载.解压并修改名字为Beautifu ...

  2. Nginx的作用详解

    Nginx的产生 没有听过Nginx?那么一定听过它的"同行"Apache吧!Nginx同Apache一样都是一种WEB服务器.基于REST架构风格,以统一资源描述符(Unifor ...

  3. 控制banner内容

    Spring Boot启动的时候默认的banner是spring的字样,看多了觉得挺单调的,Spring Boot为我们提供了自定义banner的功能. 自定义banner只需要在resource下新 ...

  4. selenium,webdriver模仿浏览器访问百度 基础1

    这是一种比较好的反反爬技术 #安装:pip install selenium=2.48.0 #显示:pip show selenium #卸载:pip uninstall selenium #模拟用户 ...

  5. PHP 算式验证码

    这里不多说,直接上代码! /** * 改造的加减法验证类 * 使用示例 VerifyCode::get('xxx', 20); * 验证示例 VerifyCode::check('1', 'xxx') ...

  6. VS进程附加的使用

    一,附加进程(ctrl+alt+p)调试本地服务器接口(WCF,webapi等)的api 1>接口(WCF,webapi等)的api发布到本地IIS服务器,然后使用附加进程,将你发布的IIS添加 ...

  7. spring整合mybatis后,mybatis一级缓存失效的原因

    一般来说,可以在5个方面进行缓存的设计: 最底层可以配置的是数据库自带的query cache, mybatis的一级缓存,默认情况下都处于开启状态,只能使用自带的PerpetualCache,无法配 ...

  8. 2018-8-29-win2d-渐变颜色

    title author date CreateTime categories win2d 渐变颜色 lindexi 2018-08-29 08:58:14 +0800 2018-7-7 20:5:3 ...

  9. 笔记78 HttpStatus

    HttpStatus = { //Informational 1xx 信息 '100' : 'Continue', //继续 '101' : 'Switching Protocols', //交换协议 ...

  10. 自从学会了 Array.reduce() ,再也离不开它

    (转载)原文链接:https://juejin.im/post/5dfd9d27e51d455825129ec3   在所有后 ES6 时代的数组方法中,我觉得最难理解的就是Array.reduce( ...