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

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

关于Nginx实现负载均衡

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


Nginx实现负载均衡.png

环境准备

  • Centos6.3
  • JDK1.8
  • Tomcat8

客户端

  • Vmware
  • Xshell
  • Xftp

Xsehll配置

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


xshell.png

Xftp配置

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


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
出现下面信息说明安装成功

<!DOCTYPE html>
<html>
<head>
<title>Welcome to nginx!</title>
<style>
    body {
        width: 35em;
        margin: 0 auto;
        font-family: Tahoma, Verdana, Arial, sans-serif;
    }
</style>
</head>
<body>
<h1>Welcome to nginx!</h1>
<p>If you see this page, the nginx web server is successfully installed and
working. Further configuration is required.</p>

<p>For online documentation and support please refer to
<a href="http://nginx.org/">nginx.org</a>.<br/>
Commercial support is available at
<a href="http://nginx.com/">nginx.com</a>.</p>

<p><em>Thank you for using nginx.</em></p>
</body>
</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如下:
<Server port="8006" shutdown="SHUTDOWN">
  <Listener className="org.apache.catalina.startup.VersionLoggerListener" />

<Connector port="8081" protocol="HTTP/1.1"
         connectionTimeout="20000"
         redirectPort="8443" />

<!-- Define an AJP 1.3 Connector on port 8009 -->
<Connector port="8010" protocol="AJP/1.3" redirectPort="8443" />

tomcat2如下:

<Server port="8007" shutdown="SHUTDOWN">
  <Listener className="org.apache.catalina.startup.VersionLoggerListener" />

<Connector port="8082" protocol="HTTP/1.1"
         connectionTimeout="20000"
         redirectPort="8443" />

<!-- Define an AJP 1.3 Connector on port 8009 -->
<Connector port="8011" protocol="AJP/1.3" redirectPort="8443" />

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

  1. 修改完tomcat端口号之后,为了区分tomcat1和tomcat2,修改tomcat/webapps/ROOT/index.jsptomcat1修改为如下内容
<html>
    <head>
           <title>第一个 JSP 程序</title>
    </head>
    <body>
           <%
                  out.println("111111111");
           %>
    </body>
</html>

tomcat2修改为如下内容

<html>
    <head>
           <title>第一个 JSP 程序</title>
    </head>
    <body>
           <%
                  out.println("22222222");
           %>
    </body>
</html>
  1. 进入/usr/local/,输入chmod 777 -R tomcat1 tomcat2给2个tomcat赋予权限(如果权限不够,把bin也赋予权限),然后进入/usr/local/tomcat/bin,输入service iptables stop先关闭防火墙,然后./startup.sh启动tomcat1和tomcat2,启动成功截图如下:
    tomcat1.png

    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个页面来回跳转,这就实现了负载均衡技术。

tomcat1.png

tomcat2.png

查看Nginx的一些状态信息

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


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,新增以下内容
 <role rolename="tomcat"/>
  <role rolename="role1"/>
  <role rolename="manager-gui"/>
  <role rolename="manager-script"/>
  <role rolename="manager-jmx"/>
  <role rolename="manager-status"/>
  <role rolename="poweruser"/>
  <role rolename="probeuser"/>
  <user username="tomcat" password="tomcat" roles="tomcat"/>
  <user username="both" password="tomcat" roles="tomcat,role1"/>
  <user username="role1" password="tomcat" roles="role1"/>

  <user username="sss" password="sss" roles="manager-gui"/>
  <user username="fbysss" password="sss" roles="manager-script,manager-jmx,manager-status,poweruser,probeuser"/>

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

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


    probe.png

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

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

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

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 216,496评论 6 501
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 92,407评论 3 392
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 162,632评论 0 353
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 58,180评论 1 292
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 67,198评论 6 388
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 51,165评论 1 299
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 40,052评论 3 418
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 38,910评论 0 274
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 45,324评论 1 310
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 37,542评论 2 332
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 39,711评论 1 348
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 35,424评论 5 343
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 41,017评论 3 326
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 31,668评论 0 22
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 32,823评论 1 269
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 47,722评论 2 368
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 44,611评论 2 353

推荐阅读更多精彩内容