高性能WebサービスのNginx+Tomcat負債均衡逆エージェントと動静分離を実現


実際の生産では、Tomcatサーバはプロジェクトで単独では使用されないのが一般的であり、静的リソースに対する応答Nginxは比較的良好である.また、nginxは逆エージェント専用のサーバであるため、javaの要求をバックエンドに転送してtomcatコンテナに渡す処理を容易に実現し、それ自体が静的リソースを処理するために使用される.
  通常tomcatフロントエンドはnginxまたはapacheであり、バックエンドはtomcatであり、つまりフロントエンドがどんな役割であってもエージェント方式で動作することを意味する.しかし、nginxに基づいて逆エージェントを行う場合、tomcatに転送要求するときはhttpプロトコルに基づいて転送されることに注意してください.しかし、tomcatのコネクタにはhttpajp jk 2 jservがあることに注意してください.nginxに基づいて転送を行うとhttpのみが転送をサポートします.apacheがエージェント転送を行うと、ほとんどの一般的なプロトコルがサポートされます.しかし、よく使われる接続タイプはajpプロトコルです.ajpプロトコルはバイナリモードで動作し、httpプロトコルはテキストモードで動作するため、ajpの効率はhttpよりも効率的です.そのためtomcatフロントエンドのwebサーバを配備するにはapacheを使用することが多い.
次に、nginx+tomcat実装方向エージェントを次のアーキテクチャで配置します.
リバース・エージェント・システム・アーキテクチャは、次のように計画されています.
サーバーの役割
サーバIP
Nginx
eth0:172.16.100.1/16 eth1:192.168.56.10/24
Tomcat1
eth0:192.168.56.11/24
Tomcat2
eth0:192.168.56.12/24
statichost(nginx)
eth0:192.168.56.13/24
構成手順は次のとおりです.
Tomcatサービスのインストール構成:
(1)JDK取付
# rpm -ivh jdk-7u9-linux-x64.rpm 
--  JDK      
# cd /usr/java/ ; ll
total 4
lrwxrwxrwx  1 root root   16 Sep 27 09:09 default -> /usr/java/latest
drwxr-xr-x 10 root root 4096 Sep 27 09:09 jdk1.7.0_09
lrwxrwxrwx  1 root root   21 Sep 27 09:09 latest -> /usr/java/jdk1.7.0_09

--  JDK    
# vim /etc/profile.d/java.sh
export JAVA_HOME=/usr/java/jdk1.7.0_09
export PATH=$PATH:$JAVA_HOME/bin
--         
# . /etc/profile.d/java.sh
--    :
# java -version
java version "1.7.0_45"        --jdk  
OpenJDK Runtime Environment (rhel-2.4.3.3.el6-x86_64 u45-b15)
OpenJDK 64-Bit Server VM (build 24.45-b08, mixed mode)

(2)tomcatのインストール
--  tomcat  /usr/local 
# tar xf apache-tomcat-7.0.67.tar.gz -C /usr/local/
# cd /usr/local/
# ln -sv apache-tomcat-7.0.67 tomcat
--  tomcat    
# vim /etc/profile.d/tomcat.sh
export CATALINA_HOME=/usr/local/tomcat
export PATH=$PATH:$CATALINA_HOME/bin
# . /etc/profile.d/tomcat.sh
--    :
# catalina.sh version
Using CATALINA_BASE:   /usr/local/tomcat
Using CATALINA_HOME:   /usr/local/tomcat
Using CATALINA_TMPDIR: /usr/local/tomcat/temp
Using JRE_HOME:        /usr/java/jdk1.7.0_09
Using CLASSPATH:       /usr/local/tomcat/bin/bootstrap.jar:/usr/local/tomcat/bin/tomcat-juli.jar
Server version: Apache Tomcat/7.0.67
Server built:   Dec 7 2015 13:07:11 UTC
Server number:  7.0.67.0
OS Name:        Linux
OS Version:     2.6.32-431.el6.x86_64
Architecture:   amd64
JVM Version:    1.7.0_09-b05
JVM Vendor:     Oracle Corporation

-- tomcat  srv    
# vim /etc/init.d/tomcat
#!/bin/sh
# Tomcat init script for Linux.
# 
# chkconfig: 2345 96 14
# description: The Apache Tomcat servlet/JSP container.
# JAVA_OPTS='-Xms64m -Xmx128m'
JAVA_HOME=/usr/java/latest
CATALINA_HOME=/usr/local/tomcat
export JAVA_HOME CATALINA_HOME

case $1 in
start)
  $CATALINA_HOME/bin/catalina.sh start;;
stop)
  $CATALINA_HOME/bin/catalina.sh stop;;
restart)
  $CATALINA_HOME/bin/catalina.sh stop
  sleep 2
  $CATALINA_HOME/bin/catalina.sh start;;
*)
  echo "Usage: `basename $0` {start|stop|restart}"
  exit 1
  ;;
esac

# chmod +x /etc/init.d/tomcat
# chkconfig --add tomcat
# service tomcat start

--  tomacat          :
# ss -tunlp | grep java
tcp    LISTEN     0      100                   :::8080                 :::*      users:(("java",19525,42))
tcp    LISTEN     0      1       ::ffff:127.0.0.1:8005                 :::*      users:(("java",19525,47))
tcp    LISTEN     0      100                   :::8009                 :::*      users:(("java",19525,43))

nginxサーバの構成手順は次のとおりです.
--  nginx.conf
http {
    upstream tomcat {                --        
        server 192.168.56.11:8080;
        server 192.168.56.12:8080;
    }
 server {
    listen       80;
    server_name  localhost;

    location / {
        root   /usr/share/nginx/html;
        index  index.jsp index.html index.htm;
    }

    location ~* \.(jsp|do)$ {        --             tomcat   
        proxy_pass http://tomcat;
    }

    location ~* \.(ico|css|jpg|jpeg|gif|png|pdf|doc|rar|exe|zip)$ {  --           192.168.56.13
        proxy_pass http://192.168.56.13;
    }
    
  }
}

アクセステストは次のとおりです.
jspダイナミックコンテンツは、192.168.56.13静的コンテンツホストに転送されています.次にstatichostホストを構成します.次のように構成します.
--     nginx
--  tomcat   statichost   
# scp [email protected]:/usr/local/tomcat/webapps/ROOT/*  /usr/share/nginx/html

テストアクセスは次のとおりです.
以上はNginx+Tomcatが負債均衡の逆エージェントと動静分離を実現する内容である