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

推薦する

ChromeとIEに対応したWMPに埋め込まれたHTMLの詳細な紹介

実際には、対応する記述方法は多数ありますが、最も一般的なのは object + embedded で...

hrefを使用すると、リンクをクリックするだけでページ上の特定の場所にジャンプできます。

ページ内の a タグをクリックした後、ページ内の対応する場所にジャンプするようにします。方法は非常に...

Linux での VMWare15.5 のインストールに関するチュートリアル

Linux に VMWare をインストールするには、公式 Web サイト https://www....

Linux システムによって報告される xfs_vm_releasepage 警告問題に対処する方法

問題の説明最近、いくつかのマシンで、一日のさまざまな時間に次の警告メッセージが表示されました。 3月...

ブログデザイン ウェブデザイン デビュー

私がデザインした最初の Web ページは次のとおりです。 私はこの業界に7年間在籍し、プログラミング...

Centos7.4 サーバーへの Apache のインストールとインストール プロセス中に発生した問題の解決策

この記事では、CentOS 7.4 サーバーに Apache をインストールする方法と、インストール...

モバイル端末の水平および垂直画面ビューポート検出を決定するための js のいくつかの方法

目次1. 異なるビューポートを取得する方法2. 水平画面と垂直画面のJavaScript検出3. 水...

MySQLで関連テーブルを削除する実用的な方法

MySQL データベースでは、テーブルが互いに関連付けられた後は、それらを任意に削除することはできま...

JavaScriptの原理と方向性

これが何を指しているのかをどのように判断するのでしょうか? ①グローバル環境で呼び出された場合はwi...

コマンドを使用してMySQLデータベース(de1)を作成する方法

1. MYSQLに接続するフォーマット: mysql -h ホストアドレス -u ユーザー名 -p ...

MySQL InnoDB ロック メカニズムの詳細な例

1. InnoDBのロック機構InnoDB ストレージ エンジンは、行レベルのロックとトランザクショ...

MySQLテーブルのテーブル構造を素早く変更する方法

MySQL テーブルのテーブル構造をすばやく変更する - 「MySQL 管理」から抜粋 ALTER ...

スクロールバーの美化効果を実現するための CSS3 のサンプル コード

具体的なコードは次のとおりです。 /*スクロールバーの幅*/ ::-webkit-スクロールバー{ ...

nginx.conf ファイルの構文強調表示とフォーマット設定には nginx.vim ツールを使用します。

私はtengineを使用しています。インストールディレクトリは/usr/local/tengineで...

this.parentNode.parentNode (親ノードの親ノード) はどういう意味ですか?

親ノードの親ノード、例えば、このような段落がありますHTML:コードをコピーコードは次のとおりです。...