EC2上にApache+Tomcat9のクラスタ構成構築
Amazon Linuxを1ノード作成し、1ノード上にApache+Tomcat9のクラスタ構成方法です。
まず、最新のJavaをインストール
・Javaのバージョンを確認
$ java -version
・yumを更新
$ sudo yum update -y
・javaを探す
$ sudo yum search java java-1.8.0-openjdk-devel.x86_64 : OpenJDK Development Environment
・インストール
$ sudo yum install -y java-1.8.0-openjdk-devel.x86_64
・Javaのコマンドのヴァージョンを切り替える
$ sudo alternatives --config java ※2を選択 Enter to keep the current selection[+], or type selection number: 2
・Javaのバージョンを確認
# java -version openjdk version "1.8.0_191" OpenJDK Runtime Environment (build 1.8.0_191-b12) OpenJDK 64-Bit Server VM (build 25.191-b12, mixed mode)
次に、Tomcatをインストール
・TomcatのZIPをダウンロード
https://tomcat.apache.org/download-90.cgi
apache-tomcat-9.0.14.zip
・/optに置く
#unzip apache-tomcat-9.0.14.zip
・/opt/apache-tomcat-9.0.14/binの下のシェルの権限を変更
#chmod u+x *.sh
・Tomcat起動
#/opt/apache-tomcat-9.0.14/bin/startup.sh
・Javaのプロセス確認すると起動されている
# ps -ef |grep java root 11436 1 0 Jan11 ? 00:01:21 /usr/lib/jvm/java/bin/java -Djava.util.logging.config.file=/opt/apache-tomcat-9.0.14/conf/logging.properties -Djava.util.logging.manager=org.apache.juli.ClassLoaderLogManager -Djdk.tls.ephemeralDHKeySize=2048 -Djava.protocol.handler.pkgs=org.apache.catalina.webresources -Dorg.apache.catalina.security.SecurityListener.UMASK=0027 -Dignore.endorsed.dirs= -classpath /opt/apache-tomcat-9.0.14/bin/bootstrap.jar:/opt/apache-tomcat-9.0.14/bin/tomcat-juli.jar -Dcatalina.base=/opt/apache-tomcat-9.0.14 -Dcatalina.home=/opt/apache-tomcat-9.0.14 -Djava.io.tmpdir=/opt/apache-tomcat-9.0.14/temp org.apache.catalina.startup.Bootstrap start root 19983 19743 0 06:37 pts/1 00:00:00 grep --color=auto java
・以下をブラウザに入力すると、Tomcatの画面が出てきたら成功
http://localhost:8080/
次に、もう1つのTomcatを手早く作成
・インストールされているディレクトリをコピー
#cp -r /opt/apache-tomcat-9.0.14 /opt/apache-tomcat-9.0.14_2
・ポート番号が被らないようにserver.xmlを変更
/opt/apache-tomcat-9.0.14 /conf/server.xml
以下の4種類の数字を何か所かあるのですべて変更
8005→8006
8080→8181
8443→8444
8009→8010
<Server port="8005" shutdown="SHUTDOWN"> ↓ <Server port="8006" shutdown="SHUTDOWN"> <Connector port="8080" protocol="HTTP/1.1" connectionTimeout="20000" redirectPort="8443" /> ↓ <Connector port="8181" protocol="HTTP/1.1" connectionTimeout="20000" redirectPort="8444" /> <Connector port="8009" protocol="AJP/1.3" redirectPort="8443" /> ↓ <Connector port="8010" protocol="AJP/1.3" redirectPort="8443" />
・Tomcat2号機を起動してみる
/opt/apache-tomcat-9.0.14_2/bin/startup.sh
・プロセス確認して起動されている
[root@ip-172-31-30-8 conf]# ps -ef |grep java root 11436 1 0 Jan11 ? 00:01:21 /usr/lib/jvm/java/bin/java -Djava.util.logging.config.file=/opt/apache-tomcat-9.0.14/conf/logging.properties -Djava.util.logging.manager=org.apache.juli.ClassLoaderLogManager -Djdk.tls.ephemeralDHKeySize=2048 -Djava.protocol.handler.pkgs=org.apache.catalina.webresources -Dorg.apache.catalina.security.SecurityListener.UMASK=0027 -Dignore.endorsed.dirs= -classpath /opt/apache-tomcat-9.0.14/bin/bootstrap.jar:/opt/apache-tomcat-9.0.14/bin/tomcat-juli.jar -Dcatalina.base=/opt/apache-tomcat-9.0.14 -Dcatalina.home=/opt/apache-tomcat-9.0.14 -Djava.io.tmpdir=/opt/apache-tomcat-9.0.14/temp org.apache.catalina.startup.Bootstrap start root 11490 1 0 Jan11 ? 00:01:19 /usr/lib/jvm/java/bin/java -Djava.util.logging.config.file=/opt/apache-tomcat-9.0.14_2/conf/logging.properties -Djava.util.logging.manager=org.apache.juli.ClassLoaderLogManager -Djdk.tls.ephemeralDHKeySize=2048 -Djava.protocol.handler.pkgs=org.apache.catalina.webresources -Dorg.apache.catalina.security.SecurityListener.UMASK=0027 -Dignore.endorsed.dirs= -classpath /opt/apache-tomcat-9.0.14_2/bin/bootstrap.jar:/opt/apache-tomcat-9.0.14_2/bin/tomcat-juli.jar -Dcatalina.base=/opt/apache-tomcat-9.0.14_2 -Dcatalina.home=/opt/apache-tomcat-9.0.14_2 -Djava.io.tmpdir=/opt/apache-tomcat-9.0.14_2/temp org.apache.catalina.startup.Bootstrap start root 19983 19743 0 06:37 pts/1 00:00:00 grep --color=auto java [root@ip-172-31-30-8 conf]#
・以下をブラウザに入力すると、Tomcatの画面が出てきたら成功
http://localhost:8181/
最後にApacheのインストール
・バージョン確認して何も出てこなければインストール
$ httpd -version
・パッケージを確認
$ yum list | grep httpd24 httpd24.x86_64
・Apacheインストール
$ sudo yum install -y httpd24
・/etc/httpd/conf/httpd.confに以下を追加
LoadModule proxy_module modules/mod_proxy.so LoadModule proxy_http_module modules/mod_proxy_http.so <IfModule proxy_module> ProxyRequests Off <Proxy balancer://mycluster/> BalancerMember http://localhost:8080 BalancerMember http://localhost:8081 </Proxy> ProxyPass / balancer://mycluster/ ProxyPassReverse / balancer://mycluster/ </IfModule>
・Apache起動
$ sudo service httpd start
これで割り振り完成
サンプルアプリなどデプロイし、ラウンドロビンされているのを確認してみてください。
Javaのサンプル
Testというプロジェクトにて以下のプログラムを入ったWARファイルを用意
import java.io.IOException; import java.io.PrintWriter; import org.apache.logging.log4j.LogManager; import org.apache.logging.log4j.Logger; import javax.servlet.ServletException; import javax.servlet.annotation.WebServlet; import javax.servlet.http.HttpServlet; import javax.servlet.http.HttpServletRequest; import javax.servlet.http.HttpServletResponse; import javax.servlet.http.HttpSession; public class HelloWorldServlet extends HttpServlet { protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException { // TODO Auto-generated method stub Logger logger = LogManager.getLogger(HelloWorldServlet.class); try { PrintWriter out = response.getWriter(); out.println("<html>"); out.println("<head>"); out.println("<title>Hello World!</title>"); out.println("</head>"); out.println("<body>"); out.println("<h1>Hello World!</h1>"); out.println("<p>First Servlet</p>"); out.println("</body></html>"); PrintWriter out1 = response.getWriter(); HttpSession session = request.getSession(); String port = (String)session.getAttribute("port"); if(port == null) { port = String.valueOf(request.getLocalPort()); session.setAttribute("port", port); } out1.println("port:" + String.valueOf(request.getLocalPort())); out1.println("port(session):" + port); } catch (Exception e) { //ex.printStackTrace(); logger.error("error", e); } } }
・WARファイルをデプロイ
以下のようにWAR配置し、Tomcat再起動
/opt/apache-tomcat-9.0.14/webapps/Test.war
/opt/apache-tomcat-9.0.14_2/webapps/Test.war
・以下を連続してクリックすると、8080と8181が交互に出てくる
http://18.136.21.227/Test/HelloWorldServlet