ApacheとTomcatによるクラスタ環境構築プロセスの分析

ApacheとTomcatによるクラスタ環境構築プロセスの分析

実際、Apacheクラスタを構築するのは難しくありません。私もインターネットで情報を見つけて自分で設定しました。もちろん、最高のパフォーマンスを得るために自分で設定する必要があるパラメータがいくつかあります。

クラスタを構築するための最初のステップは、ソフトウェアをダウンロードすることです。会社側のサーバーは Win2003 なので、いくつかの操作は省略できます。

Apacheのダウンロードアドレス: http://httpd.apache.org/ Apache httpd 2.2.27をダウンロードしました。

Tomcatのダウンロードアドレス: http://tomcat.apache.org/download-60.cgi 6.0.39の解凍バージョンをダウンロードしました

最初のステップは Tomcat を構成することです。Tomcat はクラスターの各ノードであるため、まず各ノードが正常に実行できることを確認する必要があります。
2 つのノードを作成し、Tomcat フォルダーを解凍して、それぞれ tomcat-node1 と tomcat-node2 という名前を付けます。
変更する必要がある構成ファイル:

Tomcat 起動メモリ:

bin ディレクトリでは catalina.bat が使われています。Win2003 なので Linux では catalina.sh です。ファイルの先頭に以下を追加します。

JAVA_OPTS=-Xms256m -Xmx1024m -XX:PermSize=128m -XX:MaxPermSize=256m -XX:-UseGCOverheadLimit -XX:+UseConcMarkSweepGC -Dsun.rmi.dgc.client.gcInterval=3600000 -Dsun.rmi.dgc.server.gcInterval=3600000 を設定します。

Linux の場合は、書き方が少し異なります。

JAVA_OPTS="-server -Xms256m -Xmx1030m -XX:PermSize=128m -XX:MaxPermSize=256m -XX:-UseGCOverheadLimit -XX:+UseConcMarkSweepGC -Dsun.rmi.dgc.client.gcInterval=3600000 -Dsun.rmi.dgc.server.gcInterval=3600000"

各パラメータの具体的な意味と具体的な最適化プランについては、Google で「トマト起動メモリ」を検索してください。ここで指摘しておくべきことは、Windows では、JVM の最大起動メモリはデバイス メモリの 1/4 であるということです。私のマシンでは、どれだけ大きく設定しても 1300M です。

Tomcat ログ構成:

conf の下のlogging.propertiesは無視できますが、設定されていない場合は、サービスが長時間実行されるとログがディスクをいっぱいにしてダウンタイムが発生する可能性があることに注意してください。私は以前にこれに遭遇したので、これ以上は説明しません。
ログを設定する際には、いくつか注意すべき点があります: 1: ログ出力アドレス。 2: ログ出力レベル。 3: ログ出力サイズを自分で設定してみてください。設定しなくても読み込みに影響はないと思います。

Tomcat 監視構成:

conf には、次の内容が含まれています。

<?xml バージョン = '1.0' エンコーディング = 'utf-8'?>
<tomcat ユーザー>
</tomcat-ユーザー>

つまり、コメントを除いてです。ユーザーを追加するには、次のようにします。

<?xml バージョン = '1.0' エンコーディング = 'utf-8'?>
<tomcat ユーザー>
<ロール ロール名="マネージャー"/>
<ユーザー ユーザー名="admin" パスワード="admin_cui" 役割="マネージャー"/>
</tomcat-ユーザー>

もっと凝った構成は、まあ、ご存じのとおりです。設定後、http://localhost:8011/manager/html にアクセスすると、現在の接続処理ステータスを確認できます。

コア、フォーカス、server.xml

3 つのポート、1 つの名前:

管理ポート:shutdown="SHUTDOWN"の前にポートがあります。最初のポートを8012に、2番目のポートを22に設定しました。

<サーバーポート="8012" シャットダウン="シャットダウン">

サービスポート:

<Executor name="tomcatThreadPool" namePrefix="catalina-exec-" maxThreads="300" minSpareThreads="50" maxIdleTime="120000" />
<コネクタ executor="tomcatThreadPool" アドレス="0.0.0.0" ポート="8011" プロトコル="org.apache.coyote.http11.Http11NioProtocol" 接続タイムアウト="120000"
maxKeepAliveRequests="1" リダイレクトポート="443" maxHttpHeaderSize="8192" URIEncoding="UTF-8" enableLookups="false" acceptCount="500" 圧縮="オン"
圧縮最小サイズ="2048" 圧縮可能MimeType="text/html、text/xml、text/javascript、text/css、text/plain" 無効化アップロードタイムアウト="true"/>

これらはすべて、NIO、接続プール、エンコード、圧縮など、最適化された構成であることがわかります。各パラメータの意味については詳しく説明されていません。
AJP ポート:

<コネクタ ポート="8039" プロトコル="AJP/1.3" リダイレクト ポート="8443" />

クラスタリング時に使用される jvmRoute 名:

<エンジン名="Catalina" defaultHost="localhost" jvmRoute="jvm3">

以下の構成もリリースされています。

<クラスタークラス名="org.apache.catalina.ha.tcp.SimpleTcpCluster" />

Tomcat を起動して 8011 にアクセスできる場合、このノードは構成されています。他のノードは同じです。3 つのポートと 1 つの名前はノードごとに異なる必要があることに注意してください。

Apache の設定

設定ファイル httpd.conf は最も重要な設定ファイルです。設定する際には、以下の点に注意してください。
プロキシ モジュールの読み込みを解除します。

LoadModule proxy_module モジュール/mod_proxy.so
ロードモジュール proxy_ajp_module モジュール/mod_proxy_ajp.so
ロードモジュール proxy_balancer_module モジュール/mod_proxy_balancer.so
ロードモジュール proxy_connect_module モジュール/mod_proxy_connect.so
LoadModule proxy_ftp_module モジュール/mod_proxy_ftp.so
ロードモジュール proxy_http_module モジュール/mod_proxy_http.so
ロードモジュール proxy_scgi_module モジュール/mod_proxy_scgi.so

ウェブサイトへのアクセスを開放します。ここでは詳細には触れません。ただ開放するだけです。

全員から拒否

すべて変更

すべてを許可する

次の構成ファイルのロックを解除し、その前の # を削除します。

  • conf/extra/httpd-mpm.conf をインクルードします。マルチチャネル処理モジュール (MPM) を構成するための補助構成ファイルです。
  • conf/extra/httpd-vhosts.conf 仮想ホストを設定するための補助設定ファイルを含める
  • conf/extra/httpd-default.conf を含めると、Apache サービス自体に関連する補助的な設定ファイルを設定します。

httpd-mpm.confとhttpd-default.confはデフォルトのものです。実際の状況に応じて関連する設定を行う場合は、前の記事を参照してください。
httpd-vhosts.conf では、クラスター ノードのサービス タグを設定し、ServerAlias をローカル IP に設定します。

<仮想ホスト *:80>
サーバー管理者 [email protected]
サーバー名 192.168.1.102
サーバーエイリアス 192.168.1.102
ProxyPass / バランサー://cluster/ スティッキーセッション=jsessionid nofailover=オン
ProxyPassReverse / バランサ://cluster/
エラーログ "logs/lbtest-error.log"
CustomLog "logs/lbtest-access.log" 共通
</仮想ホスト>

httpd.confの下部に次の設定を追加します。

プロキシリクエストオフ
<プロキシ バランサー://クラスター>
バランサメンバー ajp://127.0.0.1:8019 負荷係数=1 ルート=jvm1
バランサメンバー ajp://127.0.0.1:8029 負荷係数=1 ルート=jvm2
</プロキシ>

リバース プロキシを有効にし、アクセスに AJP プロキシを使用します。Loadfactor は分散重みであり、route は Tomcat で定義された名前です。これは Tomcat サービス ポートではなく、AJP ポートであることに注意してください。

Tomcat パフォーマンス チューニングと Apache 構成ファイルのカスタマイズは、クラスターのパフォーマンスに影響を与える 2 つの重要な要素です。
この時点で、構成は実際に完了しています。 1 つ言及する必要があるのは、セッション共有の場合は、各プロジェクトの web.xml に <distributable/> 構成を追加するだけであるということです。

Tomcat と Apache を起動し、実際のプロジェクトにアクセスします。

以上がこの記事の全内容です。皆様の勉強のお役に立てれば幸いです。また、123WORDPRESS.COM を応援していただければ幸いです。

以下もご興味があるかもしれません:
  • Apache と Tomcat でクラスターを構築する (負荷分散)
  • Docker を使用してスタンドアロン Pulsar とクラスター化された Redis をデプロイする方法 (開発アーティファクト)
  • Apache Pulsar クラスタの構築と展開の詳細なプロセス

<<:  非表示のフォームテキストを表示するJavaScript

>>:  MySQL 学習チュートリアル クラスター化インデックス

推薦する

Nginx プロキシ axios リクエストと注意事項

序文最近、小さなデモを作成しました。大規模な工場のオンライン データを使用したため、インターフェイス...

Centos7.3 での mysql5.7 のインストールと設定のチュートリアル

この記事では、MySQL 5.7のインストールと設定のチュートリアルを参考までに紹介します。具体的な...

jQuery は拡張アニメーションによるナビゲーション バー効果を実装します

展開アニメーション効果のあるナビゲーションバーを設計してカスタマイズし、デモを作成してみました。設計...

Dockerでrabbitmqをデプロイする際に発生した2つの問題

1. 背景DockerでRabbitMQをデプロイする際に、次の2つの問題が発生します。問題1: ス...

VMware Workstation のインストール Linux (Ubuntu) システム

システムをコンピューターにインストールする方法がわからない場合は、Linux を学習したい場合は、仮...

JS for ループで setTimeout を使用する 4 つのソリューション

目次概要解決策 1: クロージャ解決策2: 構造を分割する解決策3:解決策4: setTimeout...

Linux に MySQL 8.0.19 をインストールするための詳細な手順と問題解決方法

最近Tencent Cloudサーバーを購入し、環境を構築しました。このメモは、これまで MySQL...

MySQL の重複データの処理方法 (防止と削除)

一部の MySQL テーブルには重複レコードが含まれている場合があります。重複データが存在することを...

CentOS 7.6 Telnetサービス構築プロセス(Opensshアップグレードバトル第一弾のバックアップトランスポートライン構築)

不明な点があるときはいつでも、Blog Park にアクセスして、いつでも答えやインスピレーションを...

JavaScript セレクター関数 querySelector および querySelectorAll

目次1. querySelectorは単一の要素を照会する1. ドキュメントインスタンスの呼び出し2...

Dockerfileを使用してDockerイメージを構築する手順

Dockerfile は、命令を含むテキスト ファイルです。各命令はレイヤーを構築するため、各命令の...

Dockerは単一のイメージを使用して複数のポートにマッピングします

必要:公式サイトのリソースサーバーは確かに1つのインスタンスでは使えず、複数のインスタンスを一緒に使...

NodeJSとブラウザにおけるこのキーワードの違い

序文JavaScript を学習した人なら誰でも、さまざまな環境で this がどこを指すかという問...

SQLクエリの実行順序をゼロから学ぶ

SQL クエリ ステートメントの実行順序は次のとおりです。 (7)選択 (8) DISTINCT &...

mysql5.7.21.zip インストールチュートリアル

mysql5.7.21 zipの詳細なインストール手順は次のとおりです。 1. 解凍して指定されたデ...