Windows での Apache+Tomcat7 負荷分散構成方法の詳細な説明

Windows での Apache+Tomcat7 負荷分散構成方法の詳細な説明

準備

Windows Server 2008 R2 Enterprise (2.40GH、8GB、64ビット、192.168.10.212)
2 Ubuntu 10.04.4 (192.168.10.98, 192.168.10.137)
JDK1.7.80
トムキャット7.0.68
アパッチ2.4.4

1. Apache 2.4.4をインストールする

インストールプロセス中に注意すべきことは何もありません。「次へ」をクリックし続けるだけです。インストールが完了すると、Apache サービスがデフォルトで有効になります。ブラウザに localhost または 127.0.0.1 と入力すると、「It works」という文字が表示されます。

2. Java環境

Ubuntuの設定はインターネット上にたくさんあるので、ここでは詳しくは説明しませんが、JAVA_HOMEとPATHの設定を忘れないようにしてください。

3.Tomcatのインストール

ディレクトリ内で解凍するだけです。私のディレクトリは /opt/tomcat7/ です。両方の Ubuntu で解凍しました。権限不足の問題に遭遇する可能性があります。このとき、コマンドを入力する必要があります。最も単純かつ最も強力なのは、sudo chmod 777 directory です。セキュリティ上の問題により、適切に認証する必要があるため、ここでは言及しません。

構成を開始する

Apache の設定

1. まず、conf/httpdファイルで、必要なモジュールコメントを開きます(先頭の#記号を削除するだけです)。

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
ロードモジュール slotmem_shm_module モジュール/mod_slotmem_shm.so
ロードモジュール lbmethod_byrequests_module モジュール/mod_lbmethod_byrequests.so

ここでは最後の 2 つについて説明します。最初のいくつかを開いただけで、Apache を起動できませんでした。

ログを確認すると、「'slotmem' のプロバイダー 'shm' の検索に失敗しました: mod_slotmem_shm がロードされていますか?」というエラーが報告され続けていることがわかりました。確認したところ、モジュールが有効になっていませんでした。# 記号を削除すると、エラーは報告されなくなります。

もう 1 つの理由は、エラー (22) 無効な引数: AH01183: バランサーを共有できません が報告されることです。このモジュールを開くと、エラーは報告されなくなります。

2. conf/httpdファイル内の仮想ホストのコメントを解除する

Includeの前の#を削除します

3. conf/extra/httpd-vhosts.confに設定を追加する

まずは私自身の設定を投稿させてください。

<仮想ホスト *:80>
  サーバー管理者 [email protected]
  ProxyPass / balancer://cluster/ スティッキーセッション=JSESSIONID|jsessionid nofailover=オン
  ProxyPassReverse / バランサ://cluster/
  サーバー名 192.168.10.212
  エラーログ "logs/error.log"
  CustomLog "logs/access.log" 共通
</仮想ホスト>
プロキシリクエストオフ
<プロキシ バランサー://クラスター>
  バランサメンバー ajp://192.168.10.98:8009 負荷係数=1 ルート=jvm1 smax=5 最大=20 ttl=120 再試行=300 タイムアウト=15
  バランサメンバー ajp://192.168.10.137:8009 負荷係数=1 ルート=jvm2 smax=5 最大=20 ttl=120 再試行=300 タイムアウト=15
</プロキシ>

ProxyPass: リモートサーバーをローカルサーバーのURL空間にマッピングします

balancer:// : プロキシ命令タイプ

sticksession: バランサーのスティッキーセッション名。この値は、セッションをサポートするバックエンド アプリケーション サーバーに応じて、JSESSIONID や PHPSESSIONID などに設定されることが多いです。バックエンド サーバーが異なる Cookie 名または URL エンコードされた ID (サーブレット コンテナーなど) を使用する場合は、| を使用してそれらを区切ります。最初の部分は Cookie 用、2 番目の部分はパス用です。

nofailover : 「オン」に設定すると、ワーカーが無効になったりエラーが発生したりしたときにセッションが直ちに終了します。バックエンド サーバーがセッション レプリケーションをサポートしていない場合は、この値をオンに設定できます。

ProxyRequests: ProxyPass ディレクティブを使用する場合は、通常、ProxyRequests ディレクティブをオフにする必要があります。

BalancerMember: Balancer メンバー

loadfactor: 作業単位の負荷係数。 BalancerMember に使用されます。これは、この作業者に適用される正規化された重量負荷を定義する 1 ~ 100 の数値です。

route : ロードバランサーで使用されるワーカーのルート。ルートはセッション ID に追加される値です。

smax: 必要に応じて、最大数のリンク (ソフト最大値、または smax) を作成します。 smax 数を超えるリンクには、有効期間 (ttl) が割り当てられます。

max: デフォルト値は、現在の MPM 内のプロセスあたりのスレッド数です。 Prefork MPM ではこの値は常に 1 であり、Worker MPM ではこの値は ThreadsPerChild によって制御されます。

ttl: smax 接続数を超える非アクティブ リンクの存続時間 (TTL) (秒単位)。 Apache はこの間に使用されていない接続をすべて閉じます。

retry: スレッド プール ワーカーの再試行のタイムアウト (秒単位)。バックエンド サーバーへのスレッド プール ワーカーのステータスがエラーの場合、Apache はタイムアウトが経過するまでサーバーにリクエストを送信しません。 これにより、バックエンド サーバーをメンテナンスのために停止し、後でオンラインに戻すことができます。値が 0 の場合、エラーが発生したときに待機せずにワーカーを常に再試行することを意味します。

timeout: リンクのタイムアウト(秒単位)。設定されていない場合、Apache は接続が利用可能になるまで待機します。このディレクティブは、バックエンド サーバーへの接続を制限するために、max パラメータと一緒に使用されることが多いです。

これで設定はほぼ完了です。Apache サービスを再起動するだけです。

注: localhost または 127.0.0.1 を入力すると、「It works」という文字は表示されなくなります。代わりに、503 エラーが報告されます。これは、Apache が負荷分散機能を有効にし、ターゲット IP を AJP 経由で Tomcat に送信したが、Tomcat がまだ起動していないため、正常な動作です。

Tomcat の設定

192.168.10.98のサーバーを例に挙げます

Vim を使用して conf の下の server.xml を開きます (Vim を知らない場合は想像力を働かせてください ╮(╯▽╰)╭)。ここで紹介する負荷分散は、Apache が AJP プロトコルを介して Tomcat に接続するため、Apache で設定されたポート番号が Tomcat の AJP のポート番号になります。

さらに、エンジンでjvmRouteを設定する必要があります

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

ここでの jvmRoute は Apache のルートに対応します。 (これを削除したところ、まだ機能していることがわかりました。素晴らしいと思いますが、設定する必要があります。)

ついに、

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

このメモは

この時点で設定は完了です。同様に、192.168.10.137 でも設定します。

テスト用に小さなtest.jspを書く

<%@ ページコンテンツタイプ="text/html;charset=UTF-8" %>
<%@ ページインポート="java.util.*"%>
<html>
  <ヘッド>
    <title>ApacheTomcatテスト</title>
  </head>
  <本文>
    <%
      out.println("<br> セッションID:" + session.getId() + "</br>");
    %>
  </本文>
</html>

Tomcat の webapps ディレクトリの下に balance フォルダを作成し、そのフォルダに test.jsp を置いて、Tomcat を起動します。

最後に、ブラウザに192.168.10.212/balance/test.jspと入力します。
セッションIDの値が2つの数字の間で変化していることがわかります。

これは負荷分散の具体化です。もちろん、192.168.10.212 を入力すると、「It works」ではなく、従来の Tomcat ホームページが表示されます。

ちなみに、上記は3つのサーバーに基づいています

Apache+Tomcat7の負荷分散構成の詳細については、次の関連リンクをクリックしてください。

以下もご興味があるかもしれません:
  • Apache、wsgi、django プログラムのデプロイメント設定方法の詳細な説明
  • LinuxベースのApacheウェブサイトサービス構成の詳細な説明
  • Ubuntu 上の Apache で SSL (https 証明書) を設定する正しい方法の詳細な説明
  • Apache Web サーバーを使用して 2 つ以上のサイトを構成する方法
  • Apache での ModSecurity のインストール、有効化、および構成
  • CentOS 7 での Apache Web サーバーのインストールと設定のチュートリアル
  • Alibaba Cloud Server Apache は SSL 証明書を構成して Https を正常に有効にします (さまざまな落とし穴を記録します)
  • Win10 Apache が仮想ホストを設定した後にローカルホストが利用できなくなる問題の解決方法
  • Apache 経由で複数の仮想ホストをローカルに設定する方法

<<:  MySQL の厄介な Aborted 警告をケーススタディで分析する

>>:  この記事はPReact10.5.13のソースコードを理解するのに役立ちます

推薦する

Vue-Routerのルート設定の詳しい説明

目次導入ルート内のオブジェクト属性パス: 文字列コンポーネント: コンポーネント | () =>...

Linux のパスワードを紛失した場合にリセットする方法

1. スタートアップメニューでは、カーソルを最初の行に移動します - eを押します 2. UTF-8...

JavaScript でモバイル モーダル ボックスの効果を実現

この記事では、モバイルモーダルボックス効果を実現するためのJavaScriptの具体的なコードを参考...

コード例を通してページ置換アルゴリズムの原理を理解する

ページ置換アルゴリズム: 本質は、限られたメモリをワイヤレス プロセスに対応できるようにすることです...

jQueryはネストされたタブ機能を実装します

この記事では、ネストされたタブ機能を実装するためのjQueryの具体的なコードを参考までに紹介します...

HTML の基本概要推奨事項 (段落)

HTML段落段落は <p> タグによって定義されます。例<p>これは段落で...

Java+Tomcat 環境の展開とインストールのプロセス図

次に、Centos7 に Java+Tomcat をインストールします。インターネット上には多くの記...

JavaScriptで配列かどうかを判断するためのさまざまな方法のまとめ

目次序文配列.isArrayコンストラクタインスタンスプロトタイプオブジェクト.プロトタイプ.toS...

DHTML オブジェクト (さまざまな HTML オブジェクトの共通プロパティ)

!DOCTYPE HTML ドキュメントが準拠するドキュメント型定義 (DTD) を指定します。 ...

CSS3 のフレックスレイアウト幅の無効性の解決策

2 列レイアウトはプロジェクトでよく使用されます。この効果を実現する方法はたくさんあります。 しかし...

Zabbix設定 DingTalkアラーム機能実装コード

必要Zabbix で DingTalk アラームを設定する方法は、Prometheus で Ding...

docker version es、milvus、minio 起動コマンドの詳細な説明

1. es起動コマンド: docker run -itd -e TAKE_FILE_OWNERSHI...

Vueプラグインの書き方を説明する記事

目次プラグインとはプラグインの作成プラグインの使用要約するプラグインとはVue フレームワークでは、...

Centos8 で yum を使用して mongodb 4.2 をインストールする方法

1. リポジトリファイルを作成するmongodb の公式インストール ドキュメントを参照し、次のスク...

MySQL パーティションテーブルの制限と制約の詳細な説明

ビルドを無効にするパーティション式では、次の構成はサポートされません。ストアドプロシージャ、ストアド...