Centos6下实现Nginx+Tomcat实现负载均衡及监控

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

关于Nginx实现负载均衡

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


Centos6下实现Nginx+Tomcat实现负载均衡及监控_第1张图片
Nginx实现负载均衡.png

环境准备

  • Centos6.3
  • JDK1.8
  • Tomcat8

客户端

  • Vmware
  • Xshell
  • Xftp

Xsehll配置

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


Centos6下实现Nginx+Tomcat实现负载均衡及监控_第2张图片
xshell.png

Xftp配置

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


Centos6下实现Nginx+Tomcat实现负载均衡及监控_第3张图片
xftp.png

JDK环境配置

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

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

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

root@ubuntu:/usr/local# java -version
java version "1.8.0_65"
Java(TM) SE Runtime Environment (build 1.8.0_65-b17)
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
出现下面信息说明安装成功




Welcome to nginx!



Welcome to nginx!

If you see this page, the nginx web server is successfully installed and working. Further configuration is required.

For online documentation and support please refer to nginx.org.
Commercial support is available at nginx.com.

Thank you for using nginx.

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如下:

  





tomcat2如下:


  





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

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

    
           第一个 JSP 程序
    
    
           <%
                  out.println("111111111");
           %>
    

tomcat2修改为如下内容


    
           第一个 JSP 程序
    
    
           <%
                  out.println("22222222");
           %>
    

  1. 进入/usr/local/,输入chmod 777 -R tomcat1 tomcat2给2个tomcat赋予权限(如果权限不够,把bin也赋予权限),然后进入/usr/local/tomcat/bin,输入service iptables stop先关闭防火墙,然后./startup.sh启动tomcat1和tomcat2,启动成功截图如下:
    Centos6下实现Nginx+Tomcat实现负载均衡及监控_第4张图片
    tomcat1.png

    Centos6下实现Nginx+Tomcat实现负载均衡及监控_第5张图片
    tomcat2.png

修改nginx.conf

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



    upstream tomcat  { 
        server 127.0.0.1:8081 weight=1;
        server 127.0.0.1:8082 weight=1; 
    }  

    server {  
        listen       80 default_server;  
        server_name  localhost; 

        location / {  
                 root   html;
                     proxy_pass http://tomcat;  #配置集群指向
                     index  index.html index.htm;

        }  
                location /status {
                     stub_status on;
                     access_log off;

        }

    }

做了如上配置后,在/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个页面来回跳转,这就实现了负载均衡技术。

Centos6下实现Nginx+Tomcat实现负载均衡及监控_第6张图片
tomcat1.png

Centos6下实现Nginx+Tomcat实现负载均衡及监控_第7张图片
tomcat2.png

查看Nginx的一些状态信息

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


Centos6下实现Nginx+Tomcat实现负载均衡及监控_第8张图片
nginx状态.png

各数据项说明:

  • 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. 修改CATALINA_HOME/bin/catalina.sh,新增JAVA_OPTS="$JAVA_OPTS -Dcom.sun.management.jmxremote",开启jvm远程监控

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


    Centos6下实现Nginx+Tomcat实现负载均衡及监控_第9张图片
    probe.png

软件测试汪地址
软件测试汪博客地址

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

转载请注意出处,谢谢合作

你可能感兴趣的:(Centos6下实现Nginx+Tomcat实现负载均衡及监控)