WindowsでのApache+Tomcat実装アプリケーションクラスタ
WindowsでApache+Tomcat実装アプリケーションクラスタ1 環境依存:windows、jdk 1.6、Apache 2.2、tomcat 6.02 Jdk 1.6インストール2.1 略3 インストールApache(2.2.27)3.1 ダウンロード:Apache公式サイトよりhttp://httpd.apache.org/download.cgihttpd-2.25-win 32-x 86-openssl-0.9.8 y.msiをダウンロードします.3.2 インストール:前のステップでダウンロードしたインストーラをダブルクリックし、完了するまで次のステップに進みます.インストールウィザードが正常に完了し、左下隅トレイにApacheアイコンが表示されます.3.3 テスト:ブラウザを開き、そのアドレスバーに入力します.http://localhostまたはhttp://127.0.0.1をオンにすると、インストールに成功したことを示す「It works」という文字が表示されます.4 ApacheApache 2.2を構成するにはmod_が統合されています.jk機能は、1.3バージョンに比べてworker.perprotiesを構成する必要がなくなり、構成プロセスを大幅に簡素化します.4.1 構成起動自動ローディングエージェントモジュール(httpd.conf)テキストエディタで${APACHE_HOME}/conf/http.conf.confファイルを開き、テキスト前のコメント(#)LoadModule proxy_を削除module modules/mod_proxy.soLoadModule proxy_ajp_module modules/mod_proxy_ajp.soLoadModule proxy_balancer_module modules/mod_proxy_balancer.soLoadModule proxy_connect_module modules/mod_proxy_connect.soLoadModule proxy_ftp_module modules/mod_proxy_ftp.soLoadModule proxy_http_module modules/mod_proxy_http.so4.2 構成トップページは、前のステップで「DirectoryIndex index.html」の文字を下に探し続け、その後index.jsp 4.3を追加します. 仮想ノードを開く前に、「Include conf/extra/http-vhosts.conf」の文字を下に探し続け、前のコメント4.4を削除します. 仮想ノードを設定テキストエディタで${APACHE_HOME}/conf/extra/http-vhosts.confファイルを開き、最後尾に以下の内容を追加します ServerAdmin [email protected] # 管理者メールボックス ServerName www.domain.com # デフォルトのドメイン名は、IPで代用できません ServerAlias localhost # エイリアス、複数のスペースで区切る ProxyPass/balancer://cluster/stickysession=jsessionid nofailover=On ProxyPassReverse/balancer://cluster/ ErrorLog "logs/cluster_test-error.log" CustomLog"logs/cluster_test-access.log"common上のbalancer://はApacheに負荷等化エージェントが必要であることを伝え、後ろのclusterはクラスタ名であり、名前は自分で定義することができ、後ろの*Logはログエンジンであり、ログ記録を担当する.4.5 コンフィギュレーションエージェントは${APACHE_HOME}/conf/http.confファイルに戻り、その末尾に次のフォーマットの内容ProxyRequests Offを追加します. # 逆プロキシ BalancerMember ajp://127.0.0.1:18009 loadfactor=1 route=jvm1 BalancerMember ajp://127.0.0.1:28009 loadfactor=1 route=jvm 2上のclusterは4.4のクラスタ名と一致する必要があり、Apacheはajpプロトコルを介してtomcatと通信し、ipアドレスとポート番号はtomcatを決定し、loadfactorは負荷因子であり、Apacheは因子割合でtomcatに要求を転送し、routeはtomcat構成におけるjvmRouteであり、章を参照.4.6 Apacheサービスを再起動し、アクセスするテストhttp://localhost、tomcatがまだ構成および起動されていないため、503エラーが発生します.5 Tomcat 5.1のインストール ダウンロード インストール Tomcatの構成はtomcatクラスタであるため、本編ではtomcat 1、tomcat 2と命名された2つのtomcatを例に紹介する.6.1 サーバポートを設定テキストエディタで${TOMCAT_HOME_1}/conf/server.xmlを開き、<サーバポート="8005"shutdown="SHUTDOWN">を<サーバポート="18005"shutdown="SHUTDOWN">6.2に変更します. Connector portを構成する前のステップに基づいて、変更:検索を続行:修正:注:ここのportはApacheがapjプロトコルを通じてtomcatと通信するポートであり、負荷の均衡を実現するため、ここのポート18009は4.5章のポート番号に対応しなければならない.6.3 Engineを構成するには、まずを閉じてから注:ここでのjvmRouteの値jvm 1は4.5章のrouteに対応する必要があります.6.4 Clusterを設定して現在のファイルを下に検索し続け、,デフォルトのCluster構成はオンにされていません.ここではコメントをキャンセルしてオンにします.主な役割は各tomcat間でセッションを共有することです.圧力が大きい場合にセッションの損失が発生したと紹介されています.このセクションはコードの略記です.その完全な代名詞は以下の通りです.同期非同期モードはchannelSendOptionsパラメータによって制御され、デフォルト値は8です.非同期モード、4は同期モードです.非同期モードでは、コピー確認(Acknowledge)を加えることで信頼性を高めることができ、このときchannelSendOptionsを10に設定します.
上記のコードのおよび構成はmod_jkでsticky sessionsまたはsticky sessionsが正常に動作しない場合のソリューションは使用されずmod_jkは、圧力の大きいセッションのコピーに失敗する場合もあります.そのため、上記の構成を2行削除し、6.5に置き換える必要があります. 他のクラスタ用tomcatを構成し、6.1~6.4の操作を繰り返して他のtomcatを構成し、主にポート番号(緑色の標識が付いている場所)を変更する7 テスト負荷等化7.1 テストプロジェクトはclusterという名前のwebプロジェクトを新規作成するつもりです.demo;プロジェクトにindex.jspページを新規作成し、ページbodyに次の内容を追加します.
7.2 デプロイと起動前に確立したテスト項目をクラスタ用tomcatにデプロイします.方法1:アイテムを${TOMCAT_HOME_*}/webappsの下に置く.方式2:クラスタ用tomcatの${TOMCAT_HOME_*}/conf/server.xmlのHostノードの下に追加
その後、クラスタ内のtomcatをそれぞれ起動し、Apacheサービス7.3を再起動する. 同時アクセスはApacheに含まれるabを用いて同時アクセスのシミュレーションテストを行う.コマンドラインウィンドウを開き、${APACHE_HOME}/bin下cd${APACHE_HOME}/binab–n 20–c 10に切り替えます.http://localhost/cluster_demo/index.jspでは、各tomcatコンソールの出力情報が表示され、それぞれ平均20個のリクエストが受信されたかどうかが表示されます.実行結果はそれぞれ下図に示すように、2つのtomcatが平均20個の要求を分担していることがわかります.
8 テストセッション共有8.1 共有はテストプロジェクトのweb.xmlに構成され、要素を追加します.これによりtomcatサーバに通知できます.現在のアプリケーションでは、急大衆のすべてのノード間でsession共有を実現する必要があります.重要:java.io.Serializableインタフェースを実装するには、すべてのセッション内のオブジェクトをシーケンス化する必要があります.8.2 テストは7.1章の基礎の上で準備して、index.jspの内容を修正します
8.3 検証テスト再配置が開始されると、http://localhost/cluster_demo/index.jspは、ページにsessionにいくつかの情報を追加します.session共有を説明する効果があります.説明しません.
これで大成功だ!
<Cluster className="org.apache.catalina.ha.tcp.SimpleTcpCluster" channelSendOptions="8">
<Manager className="org.apache.catalina.ha.session.DeltaManager" expireSessionsOnShutdown="false" notifyListenersOnReplication="true"/>
<Channel className="org.apache.catalina.tribes.group.GroupChannel">
<Membership className="org.apache.catalina.tribes.membership.McastService"
address="228.0.0.4" port="45564" frequency="500" dropTime="3000"/>
<Receiver className="org.apache.catalina.tribes.transport.nio.NioReceiver"
address="auto" port="15900" autoBind="100"
selectorTimeout="5000" maxThreads="6"/>
<Sender className="org.apache.catalina.tribes.transport.ReplicationTransmitter">
<Transport className="org.apache.catalina.tribes.transport.nio.PooledParallelSender"/>
</Sender>
<Interceptor className="org.apache.catalina.tribes.group.interceptors.TcpFailureDetector"/>
<Interceptor className="org.apache.catalina.tribes.group.interceptors.MessageDispatch15Interceptor"/>
</Channel>
# filter=".*\.gif;.*\.js;.*\.jpg;.*\.png;.*\.htm;.*\.html;.*\.css;.*\.txt;"/>
<Valve className="org.apache.catalina.ha.tcp.ReplicationValve" filter=""/>
<Valve className="org.apache.catalina.ha.session.JvmRouteBinderValve"/>
<Deployer className="org.apache.catalina.ha.deploy.FarmWarDeployer"
tempDir="/tmp/war-temp/" deployDir="/tmp/war-deploy/"
watchDir="/tmp/war-listen/" watchEnabled="false"/>
<ClusterListener className="org.apache.catalina.ha.session.JvmRouteSessionIDBinderListener"/>
<ClusterListener className="org.apache.catalina.ha.session.ClusterSessionListener"/>
</Cluster>
上記のコードの
<%
String sessionid = session.getId();
System.out.println(" sessionid = " + sessionid);
%>
7.2 デプロイと起動前に確立したテスト項目をクラスタ用tomcatにデプロイします.方法1:アイテムを${TOMCAT_HOME_*}/webappsの下に置く.方式2:クラスタ用tomcatの${TOMCAT_HOME_*}/conf/server.xmlのHostノードの下に追加
<Context path="/cluster_demo" docBase="D:/apache_tomcat/projects/cluster_demo" reloadable="true" crossContext="false" privileged="true"></Context>
その後、クラスタ内のtomcatをそれぞれ起動し、Apacheサービス7.3を再起動する. 同時アクセスはApacheに含まれるabを用いて同時アクセスのシミュレーションテストを行う.コマンドラインウィンドウを開き、${APACHE_HOME}/bin下cd${APACHE_HOME}/binab–n 20–c 10に切り替えます.http://localhost/cluster_demo/index.jspでは、各tomcatコンソールの出力情報が表示され、それぞれ平均20個のリクエストが受信されたかどうかが表示されます.実行結果はそれぞれ下図に示すように、2つのtomcatが平均20個の要求を分担していることがわかります.
8 テストセッション共有8.1 共有はテストプロジェクトのweb.xmlに構成され、
<%@ page language="java" import="java.util.*" pageEncoding="UTF-8"%>
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
<html>
<head>
<title>cluster test - share session</title>
<meta http-equiv="pragma" content="no-cache">
<meta http-equiv="cache-control" content="no-cache">
</head>
<body>
<%
String sessionid = session.getId();
System.out.println(" sessionid = " + sessionid);
// Session
String dataName = request.getParameter("dataName");
if (dataName != null && dataName.length() > 0) {
String dataValue = request.getParameter("dataValue");
session.setAttribute(dataName, dataValue);
}
out.println("<b>Session </b><br>");
System.out.println("============================");
Enumeration e = session.getAttributeNames();
while (e.hasMoreElements()) {
String name = (String)e.nextElement();
String value = session.getAttribute(name).toString();
out.println( name + " = " + value+"<br>");
System.out.println( name + " = " + value);
}
%>
<form action="index.jsp" id="form_add" method="post">
Key:<input id="dataName" name="dataName" type="text"/>
Value:<input id="dataValue" name="dataValue" type="text"/>
<input id="subBtn" name="subBtn" type="submit" value=" " />
</form>
</body>
</html>
8.3 検証テスト再配置が開始されると、http://localhost/cluster_demo/index.jspは、ページにsessionにいくつかの情報を追加します.session共有を説明する効果があります.説明しません.
これで大成功だ!