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 フィルターの違いと応用の詳しい説明:ドロップシャドウフィルターとボックスシャドウ

推薦する

ボタントリガーイベントを使用して背景色の点滅効果を実現します

背景色の点滅効果を実現するには、次のコードを <body> 領域に追加するだけです。コー...

MySQLでカンマ区切り値の列を列に変換する方法

序文場合によっては、第 1 正規形設計パターンに従わないビジネス テーブルに遭遇することがあります。...

Redis を Docker コンテナとして素早くデプロイする方法

目次はじめるデータストレージサーバーを構成するRedis セキュリティの管理Redisインストールの...

Dockerコンテナを作成、起動、停止する方法

1. コンテナとは、独立して実行されるアプリケーション、またはアプリケーションのグループとその動作環...

SeataがMySQL 8バージョンを使用できない問題を解決する方法

考えられる理由: Seata が MySQL 8 をサポートしない主な理由は、接続ドライバーがバージ...

Windows Server 2008R2、2012、2016、2019 の違い

目次共通バージョンの紹介共通バージョンのダウンロードアドレスとインストール以下に簡単な違いを示します...

MySQL 5.7.18 zip バージョンのインストールと設定方法のグラフィック チュートリアル (win7)

Windows に mysql5.7.18zip バージョンをインストールするには、使用前に解凍し...

計算機機能を実現するjsバージョン

この記事の例では、計算機機能を実装するためのjsの具体的なコードを参考までに共有しています。具体的な...

テーブルを使用してフォームコントロールの形式を調整し、見栄えを良くします。

自分でウェブページを書きたいので、HTML 言語についても少し勉強しています。これは、大学時代にウェ...

コンテンツウェブページの画像プレビューのデザイン

<br />以前、「コンテンツページ番号のプレビューナビゲーション」と「写真プレビューナ...

Docker Nginxコンテナの制作と展開の実装方法

クイックスタート1. Docker Hubでnginxイメージを見つけるdocker 検索 ngin...

MySQL ビューの紹介と基本操作のチュートリアル

序文ビューは、データベース システム内で非常に便利なデータベース オブジェクトです。 MySQL 5...

ウェブサイトのホームページを作成するための基本原則

1. ウェブサイトのホームページのハイパーテキスト ドキュメントの構成構造は、ユーザーの注意をできる...

Node.jsサービスDockerコンテナアプリケーション実践のまとめ

この記事では、Docker コマンドの使用とインストールについては説明しません。Docker を基礎...