Centos6下實(shí)現(xiàn)Nginx+Tomcat實(shí)現(xiàn)負(fù)載均衡及監(jiān)控

在性能測試過程中,我們可能會關(guān)注很多指標(biāo),比如CPU、IO、網(wǎng)絡(luò)、磁盤等,通過這些指標(biāo)大致可以判斷哪個(gè)環(huán)節(jié)遇到了性能瓶頸,但是當(dāng)這些指標(biāo)無法判斷出性能瓶頸時(shí),我們可能就需要對一些中間件進(jìn)行監(jiān)控,比如Nginx,Tomcat等,當(dāng)然可能還有很多其他中間件,我們本章主要探討Nginx+Tomcat的部署及監(jiān)控,以及使用Jmeter對我們的服務(wù)器進(jìn)行壓測,在壓測過程中,可能也會遇到Jmeter的一些瓶頸,話不多說,先搞起來。

關(guān)于Nginx實(shí)現(xiàn)負(fù)載均衡

Nginx作為反向代理服務(wù)器,實(shí)現(xiàn)負(fù)載均衡。首先瀏覽器發(fā)起請求,到達(dá)Nginx,由Nginx將請求地址轉(zhuǎn)發(fā)給相應(yīng)的tomcat服務(wù)器,再由tomcat服務(wù)器將結(jié)果返回給Nginx,Nginx將結(jié)果再轉(zhuǎn)發(fā)給瀏覽器。大致流程如下:


Nginx實(shí)現(xiàn)負(fù)載均衡.png

環(huán)境準(zhǔn)備

  • Centos6.3
  • JDK1.8
  • Tomcat8

客戶端

  • Vmware
  • Xshell
  • Xftp

Xsehll配置

我們安裝Centos6.3后,使用Xshell進(jìn)行連接,Xshell安裝比較簡單,基本都是下一步下一步。建議使用root用戶進(jìn)行登錄,密碼為虛擬機(jī)創(chuàng)建用戶時(shí)密碼,Xshell主要作用是方便我們敲Linux命令。如下圖所示:


xshell.png

Xftp配置

我們安裝Centos6.3后,使用Xftp進(jìn)行連接,Xftp安裝比較簡單,基本都是下一步下一步。建議使用root用戶進(jìn)行登錄,密碼為虛擬機(jī)創(chuàng)建用戶時(shí)密碼。協(xié)議選擇SFTP,Xftp主要作用是上傳和下載文件。如下圖所示:


xftp.png

JDK環(huán)境配置

我們使用xftp把jdk放到/usr/local 下,然后輸入vi /etc/profile,在文件末尾加入如下內(nèi)容:

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,出現(xiàn)如下內(nèi)容下圖,說明JDK環(huán)境配置成功

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

驗(yàn)證Nginx是否啟動成功

curl http://localhost
出現(xiàn)下面信息說明安裝成功

<!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 >nginx.org</a>.<br/>
Commercial support is available at
<a >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 關(guān)閉
  • ./nginx -s reopen 重啟
  • ./nginx -v 查看版本
  • ./nginx -h 可以看到命令的幫助信息

Tomcat部署

  1. 把2個(gè)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端口號之后,為了區(qū)分tomcat1和tomcat2,修改tomcat/webapps/ROOT/index.jsp,tomcat1修改為如下內(nèi)容
<html>
    <head>
           <title>第一個(gè) JSP 程序</title>
    </head>
    <body>
           <%
                  out.println("111111111");
           %>
    </body>
</html>

tomcat2修改為如下內(nèi)容

<html>
    <head>
           <title>第一個(gè) JSP 程序</title>
    </head>
    <body>
           <%
                  out.println("22222222");
           %>
    </body>
</html>
  1. 進(jìn)入/usr/local/,輸入chmod 777 -R tomcat1 tomcat2給2個(gè)tomcat賦予權(quán)限(如果權(quán)限不夠,把bin也賦予權(quán)限),然后進(jìn)入/usr/local/tomcat/bin,輸入service iptables stop先關(guān)閉防火墻,然后./startup.sh啟動tomcat1和tomcat2,啟動成功截圖如下:
    tomcat1.png

    tomcat2.png

修改nginx.conf

首先我們使用find / -name nginx.conf找到nginx.conf的位置,我們使用/usr/local/nginx/conf/nginx.conf這個(gè)路徑的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,啟動成功,當(dāng)我們訪問localhost時(shí),會發(fā)現(xiàn)不是Nginx的首頁了,而是出現(xiàn)/usr/local/tomcat1/webapps/ROOT/index.jsp或者是/usr/local/tomcat2/webapps/ROOT/index.jsp的頁面。當(dāng)我們來回刷新,會發(fā)現(xiàn)在下面的2個(gè)頁面來回跳轉(zhuǎn),這就實(shí)現(xiàn)了負(fù)載均衡技術(shù)。

tomcat1.png

tomcat2.png

查看Nginx的一些狀態(tài)信息

訪問虛擬機(jī)ip/status,出現(xiàn)如下內(nèi)容,說明stub_status模塊部署成功


nginx狀態(tài).png

各數(shù)據(jù)項(xiàng)說明:

  • Active connections: 當(dāng)前nginx正在處理的活動連接數(shù).
  • Server accepts handled requests : nginx總共處理了414 個(gè)連接,成功創(chuàng)建414 握手(證明中間沒有失敗的),總共處理了491個(gè)請求
  • Reading: nginx讀取到客戶端的Header信息數(shù)
  • Writing: nginx返回給客戶端的Header信息數(shù)
  • Waiting: 開啟keep-alive的情況下,這個(gè)值等于 active – (reading + writing),意思就是nginx已經(jīng)處理完成,正在等候下一次請求指令的駐留連接。
    所以,在訪問效率高,請求很快被處理完畢的情況下,Waiting數(shù)比較多是正常的.如果reading +writing數(shù)較多,則說明并發(fā)訪問量非常大,正在處理過程中。

為什么是訪問ip/status

為什么是訪問ip/status?還記得我們在編譯的時(shí)候使用./configure --with-http_stub_status_module嗎?編譯的時(shí)候安裝了stub_status模塊,然后我們對nginx.conf進(jìn)行了一些配置,除了加負(fù)載集群,還新增了一個(gè)路徑 location /status 。

ngxtop

centos6 暫時(shí)沒有解決ngxtop啟動失敗問題,大家可以訪問我的阿里云,命令行輸入ngxtop,對照官方文檔進(jìn)行操作,ngxtop地址

Tomcat監(jiān)控Probe

Probe github地址

  1. 首先把probe.war放入tomcat下面的webapps文件夾
  2. 修改CATALINA_HOME/conf/tomcat-users.xml,新增以下內(nèi)容
 <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遠(yuǎn)程監(jiān)控

  2. 重啟tomcat,訪問ip:端口號/probe,出現(xiàn)如下截圖說明搭建成功


    probe.png

軟件測試汪簡書地址
軟件測試汪博客地址

歡迎關(guān)注微信公眾號:軟件測試汪。軟件測試交流群:809111560

轉(zhuǎn)載請注意出處,謝謝合作

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時(shí)請結(jié)合常識與多方信息審慎甄別。
平臺聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點(diǎn),簡書系信息發(fā)布平臺,僅提供信息存儲服務(wù)。

相關(guān)閱讀更多精彩內(nèi)容

友情鏈接更多精彩內(nèi)容