Nginx反向代理實現Tomcat負載均衡


這篇短文主要介紹Tomcat的集群和用Nginx反向代理實現Tomcat負載均衡。

1、首先需要對一些知識點進行掃盲(對自己進行掃盲,囧):
  • 集群(Cluster)
    簡單來說就是用N台服務器構成一個松耦合的多處理器系統(對外是一個服務器),內部通過網絡實現通信。讓N台服務器之間相互協作,共同承載一個網站的請求壓力。用知乎上一個作者的話來說就是“同一個業務,部署在多個服務器上”,這就是集群。 集群中比較重要的是任務調度。
  • 負載均衡(Load Balance)
    簡單來說就是根據某種負載策略把請求分發到集群中的每一台服務器上,讓整個服務器群來處理網站的請求,從而共同完成工作任務。
2、安裝環境如下:
  • 騰訊雲主機,安裝的是Centos7.3 64bits
  • Nginx 1.7.4
  • JDK8Tomcat8
3、具體安裝步驟:
  • JDK安裝請參照 點我試試

  • Nginx安裝請參照 點我試試

  • 配置Nginx web反向代理, 實現兩個Tomcat負載均衡:

      --安裝及配置Tomcat
      tar -zxvf apache-tomcat-8.5.28.tar.gz
      cp -rf apache-tomcat-8.5.28 /usr/local/tomcat1
      mv apache-tomcat-8.5.28 /usr/local/tomcat2
    
      --修改tomcat1端口號
      $ cd /usr/local/tomcat1/conf/
      $ cp server.xml server.xml.bak
      $ cp web.xml web.xml.bak
      $ vi server.xml
     <Server port="8005" shutdown="SHUTDOWN">
     <Connector port="8080" protocol="HTTP/1.1"
      connectionTimeout="20000"
      redirectPort="8443"
      URIEncoding="UTF-8" />
      <Connector port="8009" protocol="AJP/1.3" redirectPort="8443" />
      <Engine name="Catalina" defaultHost="localhost" jvmRoute="tomcat1" >
    
      ##修改Tomcat2端口號
      $ cd /usr/local/tomcat2/conf/
      $ cp server.xml server.xml.bak
      $ cp web.xml web.xml.bak
      $ vi server.xml
     <Server port="8006" shutdown="SHUTDOWN">
     <Connector port="8081" protocol="HTTP/1.1"
       connectionTimeout="20000"
       redirectPort="8443"
      URIEncoding="UTF-8" />
      <Connector port="8010" protocol="AJP/1.3" redirectPort="8443" />
     <Engine name="Catalina" defaultHost="localhost" jvmRoute="tomcat2" >
    
      --添加Tomcat1開機自動啟動
      --將/usr/local/tomcat1/bin/catalina.sh文件復制到/etc/init.d目錄下並改名為tomcat1
      # cp /usr/local/tomcat1/bin/catalina.sh /etc/init.d/tomcat1
      --修改/etc/init.d/tomcat1文件,在文件中添加:
      # vi /etc/init.d/tomcat1
      --在第一行下面輸入如下內容(否則出現錯誤:tomcat 服務不支持 chkconfig):
    
      #!/bin/sh
      # chkconfig: 2345 10 90
      # description:Tomcat1 service
    
      # Licensed to the Apache Software Foundation (ASF) under one or more
      # contributor license agreements. See the NOTICE file distributed with
       .....................................................................
      # $Id: catalina.sh 1498485 2013-07-01 14:37:43Z markt $
      # -----------------------------------------------------------------------------
    
      CATALINA_HOME=/usr/local/tomcat1
      JAVA_HOME=/usr/local/jdk8
    
      # OS specific support. $var _must_ be set to either true or false.
    
       --添加tomcat服務:
      # chkconfig --add tomcat1
      --設置tomcat為開機自啟動:
      # chkconfig tomcat1 on 
      --將tomcat2設置開機自啟動
      --將/usr/local/tomcat2/bin/catalina.sh文件復制到/etc/init.d目錄下並改名為tomcat2
      # cp /usr/local/tomcat2/bin/catalina.sh /etc/init.d/tomcat2
      --修改/etc/init.d/tomcat2文件,在文件中:
      # vi /etc/init.d/tomcat2
      --在第一行下面輸入如下內容(否則出現錯誤:tomcat 服務不支持 chkconfig):
      #!/bin/sh
      # chkconfig: 2345 10 90
      # description:Tomcat2 service
    
      # Licensed to the Apache Software Foundation (ASF) under one or more
      # contributor license agreements. See the NOTICE file distributed with
      .....................................................................
      # -----------------------------------------------------------------------------
    
      CATALINA_HOME=/usr/local/tomcat2
      JAVA_HOME=/usr/local/jdk8
    
      # OS specific support. $var _must_ be set to either true or false.
    
    
      --添加tomcat服務:
      # chkconfig --add tomcat2
      --設置tomcat為開機自啟動:
      # chkconfig tomcat2 on
    

到這里,tomcat已經安裝好了,分別啟用它們,打印出來引用的環境分別對應兩個tomcat就是對的:

    [root@VM_177_101_centos src]# service tomcat1 start
    Using CATALINA_BASE:   /usr/local/tomcat1
    Using CATALINA_HOME:   /usr/local/tomcat1
    Using CATALINA_TMPDIR: /usr/local/tomcat1/temp
    Using JRE_HOME:        /usr/local/jdk8
    Using CLASSPATH:       /usr/local/tomcat1/bin/bootstrap.jar:/usr/local/tomcat1/bin/tomcat-juli.jar
    Tomcat started.
    
    [root@VM_177_101_centos src]# service tomcat2 start
    Using CATALINA_BASE:   /usr/local/tomcat2
    Using CATALINA_HOME:   /usr/local/tomcat2
    Using CATALINA_TMPDIR: /usr/local/tomcat2/temp
    Using JRE_HOME:        /usr/local/jdk8
    Using CLASSPATH:       /usr/local/tomcat2/bin/bootstrap.jar:/usr/local/tomcat2/bin/tomcat-juli.jar
    Tomcat started.

最后配置配置一下Nginx:

--切換到目錄
cd /usr/local/nginx/conf
--修改配置文件
vi nginx.conf

--一些常用配置
--worker_processes:工作進程個數,可配置多個
--worker_connections:單個進程最大連接數
--server:每一個server相當於一個代理服務器
--lister:監聽端口,默認80
--server_name:當前服務的域名,可以有多個,用空格分隔(我們是本地所以是localhost)
--location:表示匹配的路徑,這時配置了/表示所有請求都被匹配到這里
--index:當沒有指定主頁時,默認會選擇這個指定的文件,可多個,空格分隔
--proxy_pass:請求轉向自定義的服務器列表
--upstream name{ }:服務器集群名稱

--現在想通過nginx訪問到tomcat,就需要修改配置中的server部分

 server
      {
          listen 80 default;
          charset utf-8;
          server_name localhost;
          access_log logs/host.access.log;

          location / {
              proxy_pass http://localhost:8080;
              proxy_redirect default;
          }
}
--到這里方向代理已經完成,這樣所有的請求都需要經過代理服務器才能訪問到正式服務器。

接下來實現負載均衡,在安裝的過程中tomcat1配置的端口是8080,tomcat2配置的端口是8081。然后我們需要在配置文件中定義上游服務器(upstream server)

#服務器的集群
upstream testcomcat {
#weight是權重 權重越大,分配的幾率越大
      server 127.0.0.1:8080 weight=1;
      server 127.0.0.1:8081 weight=2;
}

server
      {
          listen 80 default;
          charset utf-8;
          access_log logs/host.access.log;

          location / {
              proxy_pass http://testcomcat;
              proxy_redirect default;
          }
      }
      

--為了看到不一樣,我將tomcat root下面的index.jsp頁面稍微改動了一下,分別加入了TEST1,TEST2,方便區分,重啟nginx,瀏覽器地址欄輸入IP,進行訪問,多刷新幾次頁面,會發現是在兩個服務器間切換,如下圖所示:
service nginx reload



免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM