Nginx+Tomcat 負荷分散クラスタの実装例

Nginx+Tomcat 負荷分散クラスタの実装例

導入

一般的に、Tomcat サイトは、単一障害点の可能性があり、顧客からの複雑で多様な要求に対処できないため、実稼働環境で単独で使用することはできません。したがって、Web サイトのアーキテクチャを改善するには、より信頼性の高いソリューションが必要です。

1. 事例の概要

Nginx は非常に優れた http サーバー ソフトウェアです。最大 50,000 の同時接続をサポートし、強力な静的リソース処理機能を備え、非常に安定して動作し、メモリや CPU などのシステム リソースの消費量が非常に少なくなります。

現在、多くの大規模な Web サイトでは、サイト全体の負荷の同時実行性を向上させるために、バックエンドの Web サイト プログラムのリバース プロキシおよびロード バランサとして Nginx サーバーを使用しています。

この例では、Nginxをロードバランサとして、Tomcatをアプリケーションサーバとして使用して負荷クラスタを設定します。アーキテクチャ図は次のとおりです。

ここに画像の説明を挿入

2. 環境の展開

ケース環境は以下のとおりです

ホストオペレーティング·システムIPアドレスメインソフトウェア
Nginx サーバーCentOS 7.4 x86_64 192.168.8.140 nginx-1.12.2.tar.gz
Tomcat サーバー 1 CentOS 7.4 x86_64 192.168.8.133 ①apache-tomcat-9.0.16.tar.gz / ②jdk-8u201-linux-x64.rpm
Tomcat サーバー 2 CentOS 7.4 x86_64 192.168.8.134 ①apache-tomcat-9.0.16.tar.gz / ②jdk-8u201-linux-x64.rpm

ファイアウォールと自動起動を無効にする

[root@ng133 ~]#systemctl stop firewalld.service #ファイアウォールと自動起動機能をオフにします [root@ng133 ~]#systemctl status firewalld.service
[root@ng133 ~]#setenforce 0 #セキュリティ強化システムを無効にする [root@ng133 ~]#setenforce: SELinuxは無効です

3. Nginxホストのインストール

Nginxサービスをインストールします。ワンクリックのデプロイメントスクリプトはこちらです。

#!/bin/bash
iptables -F
yum -y install epel-release && yum clean all && yum makecache
yum -y インストール pcre-devel zlib-devel gcc gcc-c++ make wget
ユーザー追加 -M -s /sbin/nologin nginx
http://nginx.org/download/nginx-1.12.2.tar.gz -P /opt を実行します。
tar zxvf /opt/nginx-1.12.2.tar.gz -C /opt
/opt/nginx-1.12.2 をインストールします

./configure \
--prefix=/usr/local/nginx \
--user=nginx \
--group=nginx \
--http_stub_status_module を使用する

/opt/nginx-1.12.2 をインストールします
make -j 4 && インストールする
ln -s /usr/local/nginx/sbin/nginx /usr/local/sbin/

cat > /usr/lib/systemd/system/nginx.service <<EOF
[ユニット]
説明=nginx
後=ネットワーク.ターゲット
[サービス]
タイプ=フォーク
PIDファイル = /usr/local/nginx/logs/nginx.pid
実行開始=/usr/local/nginx/sbin/nginx
ExecrReload=/bin/kill -s HUP $MAINPID
ExecrStop=/bin/kill -s QUIT $MAINPID
プライベートTmp=true
[インストール]
WantedBy=マルチユーザー.ターゲット
終了

chmod 754 /usr/lib/systemd/system/nginx.service
systemctl デーモンをリロード && systemctl nginx.service を開始 && systemctl nginx.service を有効にします

エコー " "
pgrep "nginx" &> /dev/null
[ $? -eq 0 ]の場合;
        echo -e "\033[32mnginx サービスは正常に動作しています。curl を使用して表示できます\033[0m"
それ以外
        echo -e "\033[31mnginx サービスが異常に動作しています。確認してください\033[0m"
フィ

インストールが完了したら結果を表示します

[root@ng140 /opt/nginx-1.12.2]#curl -I http://192.168.8.140
HTTP/1.1 200 OK
サーバー: nginx/1.12.2
日付: 2021年10月15日(金)01:46:17 GMT
コンテンツタイプ: text/html
コンテンツの長さ: 612
最終更新日: 2021年10月15日(金) 01:45:34 GMT
接続: キープアライブ
ETag: "6168dd3e-264"
受け入れ範囲: バイト

ここに画像の説明を挿入

4. Tomcatのインストールと設定

1. Tomcatをインストールする

Tomcat Server 1 と Tomcat Server 2 の設定方法は基本的に同じです。

JDKをインストールして環境を構成する

[root@tm1133 ~]#cd /opt/ #インストールパッケージを/optディレクトリにアップロードします [root@tm1133 /opt]#ls
apache-tomcat-9.0.16.tar.gz jdk-8u201-linux-x64.rpm  
[root@tm1133 /opt]#rpm -ivh jdk-8u201-linux-x64.rpm #インストール [root@tomcat /opt]#vim /etc/profile.d/java.sh #/etc/profile.d/環境変数スクリプトディレクトリ	

JAVA_HOME=/usr/java/jdk1.8.0_201-amd64 をエクスポートします。
エクスポート CLASSPATH=.:$JAVA_HOME/lib/tools.jar:$JAVA_HOME/lib/dt.jar		
PATH=$JAVA_HOME/bin:$PATH をエクスポートします

[root@tm1133 /opt]#source /etc/profile.d/java.sh #スクリプトを環境変数にインポートして有効にします [root@tm1133 /opt]#java -version #バージョンを確認します java version "1.8.0_201"
Java(TM) SE ランタイム環境 (ビルド 1.8.0_201-b09)
Java HotSpot(TM) 64 ビット サーバー VM (ビルド 25.201-b09、混合モード)

開梱

[root@tm1133 /opt]#tar zxvf apache-tomcat-9.0.16.tar.gz #解凍 [root@tm1133 /opt]#mv apache-tomcat-9.0.16 /usr/local/tomcat #パッケージの場所を転送して名前を変更します

Tomcat 管理を開始して最適化します (ソフト リンクを作成し、開始コマンドを最適化します)

[root@tm1133 /opt]#ln -s /usr/local/tomcat/bin/startup.sh /usr/local/bin/
[root@tm1133 /opt]#ln -s /usr/local/tomcat/bin/shutdown.sh /usr/local/bin/
[root@tm1133 /opt]#startup.sh #CATALINA_BASE を使用して開く: /usr/local/tomcat
CATALINA_HOME の使用: /usr/local/tomcat
CATALINA_TMPDIR の使用: /usr/local/tomcat/temp
JRE_HOME の使用: /usr/java/jdk1.8.0_201-amd64
CLASSPATH の使用: /usr/local/tomcat/bin/bootstrap.jar:/usr/local/tomcat/bin/tomcat-juli.jar
Tomcatが起動しました。
[root@tm1133 /opt]#netstat -antp |grep 8080 #tcp6が正常に有効化されているか確認 0 0 :::8080 :::* LISTEN 2520/java  

2. Tomcat サーバー 1 の構成

[root@tm1133 ~]#mkdir /usr/local/tomcat/webapps/gl #テストディレクトリを作成する [root@tm1133 ~]#vim /usr/local/tomcat/webapps/gl/index.jsp

<%@ page language="java" import="java.util.*" pageEncoding="UTF-8"%> #動的ページ構成 <html> 
<ヘッド>
<title>JSP test1 ページ</title>
</head>
<本文>
<% out.println("動的ページ 1、http://www.test1.com");%>
</本文>
</html>


#Tomcat のメイン設定ファイルを編集し、仮想ホスト設定を追加します。ここで、最初に元のホスト名とその他の設定を削除する必要があります [root@tm2134 /opt]#vim /usr/local/tomcat/conf/server.xml			   
-------------------------------------------------------------------------------------------------
<ホスト名="localhost" appBase="webapps" unpackWARs="true" autoDeploy="true" 
#まずこれを見つけて削除してください。そうしないと、最後にエラーが発生します-------------------------------------------------------------------------------------------------
# </Host> の末尾に注意しながら、162 行目の末尾に次の設定を挿入します。
<ホスト名="localhost" appBase="webapps" unpackWARs="true" autoDeploy="true" xmlValidation="false" xmlNamespaceAware="false">
     <コンテキスト docBase="/usr/local/tomcat/webapps/gl" パス="" 再ロード可能="true" />
</ホスト>
-------------------------------------------------------------------------------------------------
[root@tm2134 /opt]#shutdown.sh		
[root@tm2134 /opt]#startup.sh #サービスを再起動します

3. Tomcat サーバー 2 の構成

[root@tm2134 /opt]#mkdir /usr/local/tomcat/webapps/gl #テストディレクトリを作成 [root@tm2134 /opt]#vim /usr/local/tomcat/webapps/gl/index.jsp #動的ページの構成 <%@ page language="java" import="java.util.*" pageEncoding="UTF-8"%>
<html>
<ヘッド>
<title>JSP test2 ページ</title>
</head>
<本文>
<% out.println("動的ページ 2、http://www.test2.com");%>
</本文>
</html>


#Tomcat のメイン設定ファイルを編集し、仮想ホスト設定を追加します。ここで、最初に元のホスト名とその他の設定を削除する必要があります [root@tm2134 /opt]#vim /usr/local/tomcat/conf/server.xml			   
-------------------------------------------------------------------------------------------------
<ホスト名="localhost" appBase="webapps" unpackWARs="true" autoDeploy="true" 
#まずこれを見つけて削除してください。そうしないと、最後にエラーが発生します-------------------------------------------------------------------------------------------------
# </Host> の末尾に注意しながら、162 行目の末尾に次の設定を挿入します。
<ホスト名="localhost" appBase="webapps" unpackWARs="true" autoDeploy="true" xmlValidation="false" xmlNamespaceAware="false">
     <コンテキスト docBase="/usr/local/tomcat/webapps/gl" パス="" 再ロード可能="true" />
</ホスト>
-------------------------------------------------------------------------------------------------
[root@tm2134 /opt]#shutdown.sh		
[root@tm2134 /opt]#startup.sh #サービスを再起動します

5. Nginxサーバーの設定

静的ページの設定

[root@ng140 ~]#echo '<html><body><h1>これは静的です</h1></body></html>' > /usr/local/nginx/html/index.html
[root@ng140 ~]#cat /usr/local/nginx/html/index.html 
<html><body><h1>これは静的です</h1></body></html>

[root@ng140 /usr/local/nginx/html]#mkdir /usr/local/nginx/html/picture #写真をアップロード [root@ng140 /usr/local/nginx/html]#cd picture/
[root@ng140 /usr/local/nginx/html/picture]#rz -E
rz は受信を待機しています。
[root@ng140 /usr/local/nginx/html/picture]#ls
は.jpg
#メイン設定ファイルの57行目に次の設定パラメータを追加して、ページで画像をロードできるようにします [root@ng140 /usr/local/nginx/html/picture]#vim /usr/local/nginx/conf/nginx.conf
場所 ~ .*\.(gif|jpg|jpeg|png|bmp|swf|css)$ {
ルート /usr/local/nginx/html/picture;
有効期限は10日です。
 }
[root@ng140 /usr/local/nginx/html/picture]#nginx -t
[root@ng140 /usr/local/nginx/html/picture]#systemctl nginx.service を再起動します 

nginxのメイン設定ファイルを設定する

[root@ng140 ~]#vim /usr/local/nginx/conf/nginx.conf
......
# 負荷分散用のサーバーリストを設定します。weight パラメータは重みを示します。重みが高いほど、割り当てられる可能性が高くなります。#gzip on; # 33 行目の下に次の内容を追加します。upstream tomcat_server {
サーバー 192.168.8.133:8080 重み=1;
サーバー 192.168.8.134:8080 重み=1;
}  


															# 45 行目の下に次の構成パラメータを追加します #access_log logs/host.access.log main;

 46 場所 ~ .*\.jsp$ {
 47 proxy_pass http://tomcat_server; 
 48 proxy_set_header HOST $host;
 49 proxy_set_header X-Real-IP $remote_addr;                
 50 proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
 51 }            

パラメータ解析を追加

場所 ~ .*\.jsp$ {			
# nginx が受信したクライアント IP アドレスを、tomcat にジャンプするリクエストの送信元 IP に割り当て、クライアントの実際の IP を識別し、proxy_pass http://tomcat_server を割り当ててジャンプします。 

proxy_set_header HOST $host;	
# バックエンド Web サーバーが受信したリクエストのホスト名 (ドメイン名または IP、ポート) を設定します。デフォルトのホスト値は、proxy_pass direct connection proxy_set_header X-Real-IP $remote_addr によって設定されたホスト名です。		
# $remote_addr を X-Real-IP (カスタマイズ済み) にコピーして、送信元 IP を相互に取得します。

proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;		
#nginxをプロキシサーバーとして使用する場合、IPリストセットには通過したIP、プロキシとそのIPが記録されます。

メイン構成ファイルの構文を確認し、サービスを再起動します

[root@ng140 ~]#nginx -t
nginx: 設定ファイル /usr/local/nginx/conf/nginx.conf の構文は正常です
nginx: 設定ファイル /usr/local/nginx/conf/nginx.conf のテストが成功しました
[root@ng140 ~]#systemctl nginx.serviceを再起動します

6. 検証結果

Firefox で静的ページの効果をテストする

ここに画像の説明を挿入

負荷分散が効果的かどうかをテストします。Web ページを更新すると、動的ページ 1 と 2 が切り替わっていることがわかります。

http://192.168.8.140/index.jsp

ここに画像の説明を挿入

ここに画像の説明を挿入

要約する

Nginx の上流に 2 台以上の Tomcat サーバーを配置して負荷分散クラスターを形成し、proxy_pass などの Web プロキシ メソッドを使用して場所にクラスター サイトを設定し、重み値を使用して Tomcat サーバーの重みを個別に設定することができます。

実稼働環境では、Tomcat サーバーのハードウェア構成が異なる場合があります。対応するサーバーの重み値を変更して、より高い構成またはより低い構成のサーバーへのアクセス要求の分散を制御できます。

Nginx+Tomcat 負荷分散クラスターの実装例に関するこの記事はこれで終わりです。Nginx+Tomcat 負荷分散クラスターの関連コンテンツについては、123WORDPRESS.COM の過去の記事を検索するか、以下の関連記事を引き続き参照してください。今後とも 123WORDPRESS.COM をよろしくお願いいたします。

以下もご興味があるかもしれません:
  • Nginx+Tomcat 負荷分散クラスタのインストールと構成のケースの詳細な説明
  • Nginx+Tomcat 高性能負荷分散クラスタ構築チュートリアル
  • Nginx+Tomcat で高性能な負荷分散クラスターを構築する方法
  • nginx+tomcatは負荷分散を実装し、redisセッション共有を使用します
  • NginxとTomcatは動的および静的分離と負荷分散を実現します
  • Nginx+Tomcat+Https サーバー負荷分散構成の実践の詳細な説明
  • Nginx+Tomcat 負荷分散と動的および静的分離クラスタの実装

<<:  最高の無料英語フォント33選を紹介

>>:  CSS3 フィルターの違いと応用の詳しい説明:ドロップシャドウフィルターとボックスシャドウ

推薦する

MySQL 5.6.23 のインストールと設定環境変数のチュートリアル

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

CentOS8.1 で Gitlab サーバーを構築するための詳細なチュートリアル

Gitlab と Github の違いについては、あまり説明する必要はありません。一言でまとめると、...

Docker コンテナ ソース コードのデプロイ httpd ストレージ ボリュームを使用して Web サイトをデプロイする (推奨)

目次Dockerコンテナのソースコードを使用してhttpdをデプロイし、ストレージボリュームを使用し...

レスポンシブ原則のソースコード分析のVue解釈

目次初期化初期化状態()初期化プロパティ()初期化データ()観察する()オブザーバーリアクティブを定...

MySQLトリガーはPHPプロジェクトで情報のバックアップ、復元、クリアに使用されます。

例: PHP バックグラウンド コードを通じて、従業員情報を削除したり、削除した従業員情報を復元した...

Vue で変数式セレクターを実装する方法

目次HTML構造の定義入力タグのバインディング属性入力タグはキーダウンイベントをリッスンしますli ...

Linux クラウド サーバーに新しいディスクをマウントする方法

背景社内に新しいサーバーが追加され、2Tのハードディスクがマウントされました。sshでログイン後、マ...

CentOS 7 に MySQL 8 をインストールするための詳細なチュートリアル

準備するこの記事の環境情報: ソフトウェアバージョンセントOSセントOS7.4マイグレーション8.0...

yum を使用して rpm と関連する依存関係をダウンロードして、docker をオフラインでインストールします。

yum を使用してすべての依存関係を一緒にインストールできますが、–downloadonly –d...

パーティクルダイナミックボタン効果を実現するCSS

オリジナルリンクhttps://github.com/XboxYan/no…ボタンは、おそらく We...

Unix/Linuxフォークの隠れたオーバーヘッド

目次1. フォークの起源2. 初期のUNIXオーバーレイ技術3. UNIXに導入される前のフォークの...

nginx を使用して http を https に変換するサンプルコード

最近、小さなプログラムを書いています。その小さなプログラムの公式ウェブサイトはhttpsを使用する必...

iframe テクニックを使用して訪問者 QQ 実装のアイデアとサンプル コードを取得する

今日、仕事中に、一時的に追加した友人から、Web ページを使用して訪問者の QQ を取得する方法を尋...

Dockerモードで起動したTomcatのホームページにアクセスすると404エラーが発生する

シナリオ: docker で tomcat を起動すると (Alibaba Cloud からダウンロ...

MySQL 4 データをインポートする方法

1. mysqlコマンドをインポートするmysql コマンドのインポート構文は次のとおりです。 my...