English | 简体中文 | 繁體中文 | Русский язык | Français | Español | Português | Deutsch | 日本語 | 한국어 | Italiano | بالعربية
この記事では、NginxとTomcatが動的および静的の分離と負荷均等化を実現する方法について説明しています。動的および静的の分離とは、nginx(またはapacheなど)がユーザーエンドのリクエストの画像、htmlなどの静的ファイルを処理し、tomcat(またはweblogic)がjsp、doなどの動的ファイルを処理し、動的および静的ページのアクセス時に異なるコンテナを通じて処理することで達成されます。
一.Nginxの紹介:
Nginxは高性能なHTTPおよびリバースプロキシサーバーで、非常に高い安定性を持ち、ホットデプロイおよびモジュールの拡張が容易です。アクセスのピーク時や、悪意のある者が遅い接続を悪意を持って発起した場合、サーバーの物理メモリが枯渇し、頻繁にスワップを行い、応答が失われることがあります。この場合、サーバーを再起動する必要がありますが、Nginxは段階的なリソース割り当て技術を採用し、静的ファイルとキャッシュがないリバースプロキシの加速を処理し、負荷均等化とエラーフォールトを達成しました。このような高負荷のアクセス状況で、高負荷の処理を耐えうることができます。
二.Nginxのインストールと設定
第1ステップ:Nginxインストールパッケージをダウンロードします http://nginx.org/en/download.html
第2ステップ:Linux上でNginxをインストールします
#tar zxvf nginx-1.7.8.tar.gz //解凍します #cd nginx-1.7.8 #./configure --with-http_stub_status_module --with-http_ssl_module//server状態ページとhttpsモジュールを起動します
PCREライブラリが欠けているエラーメッセージが表示されます、図に示されています:
この場合は、まず第3ステップでPCREをインストールし、その後3実行します、これで大丈夫です
4.make && make install //コンパイルおよびインストールします
5.インストールおよび設定が正しいか確認します、Nginxは/usr/local/nginx
#/usr/local/nginx/sbin/nginx -t、図に示されています:
第3ステップ:Linux上でPCREをインストールします
#tar zxvf pcre-8.10.tar.gz //解凍します cd pcre-8.10 ./configure make && make install//コンパイルおよびインストールします
第3.Nginx +Tomcatが動的と静的の分離を実現します
動的と静的の分離は、Nginxがクライアントのリクエストの静的ページ(htmlページ)や画像を処理し、Tomcatがクライアントのリクエストの動的ページ(jspページ)を処理することです。なぜなら、Nginxが処理する静的ページの効率がTomcatよりも高いからです。
第1ステップ:私たちはNginxファイルを設定します
#vi /usr/local/nginx/conf/nginx.conf
#user nobody; worker_processes 1; error_log logs/error.log; pid logs/nginx.pid; events { use epoll; worker_connections 1024; } http { include mime.types; default_type application/octet-stream; log_format main '$remote_addr - $remote_user [$time_local] "$request" ' '$status $body_bytes_sent "$http_referer" ' '"$http_user_agent" "$http_x_forwarded_for"'; access_log logs/access.log main; sendfile on; keepalive_timeout 65; gzip on; gzip_min_length 1k; gzip_buffers 4 16k; gzip_http_version 1.0; gzip_comp_level 2; gzip_types text/plain application/x-javascript text/css application/xml; gzip_vary on; server { listen 80 default; server_name localhost; <span style="color:#ff0000;">location ~ .*\.(html|htm|gif|jpg|jpeg|bmp|png|ico|txt|js|css)$ //nginxで静的ページを処理します</span> { root /usr/tomcat/apache-tomcat-8081/webapps/ROOT; expires 30d; //クライアントにキャッシュ30日 } error_page 404 /404.html; #redirect server error pages to the static page /50x.html error_page 500 502 503 504 /50x.html; location = /50x.html { root html; } <span style="color:#ff0000;"> location ~ \.(jsp|do)$ {//すべてのjspのダイナミックリクエストをTomcatに処理します</span> <span style="color:#ff0000;"> proxy_pass http://192.168.74.129:8081; //jspまたはdoのエンドのスuffexのリクエストをtomcatに処理します</span> proxy_redirect off; proxy_set_header Host $host; //バックエンドのWebサーバーはX-Forwarded-For取得ユーザーの実際のIP proxy_set_header X-Real-IP $remote_addr; proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for; client_max_body_size 10m; //クライアントがリクエストする最大単一ファイルのバイト数を許可 client_body_buffer_size 128k; //バッファエリアプロキシがユーザー端末のリクエストの最大バイト数をバッファする proxy_connect_timeout 90; //nginxがバックエンドサーバーと接続するタイムアウト時間 proxy_read_timeout 90; //接続成功後、バックエンドサーバーの応答時間 proxy_buffer_size 4k; //プロキシサーバー(nginx)がユーザーヘッダ情報を保存するバッファサイズを設定 proxy_buffers 6 32k; //proxy_buffersバッファエリア、ウェブページの平均32k以下なら、このように設定 proxy_busy_buffers_size 64k;//高負荷下バッファサイズ(proxy_buffers*2) proxy_temp_file_write_size 64k; //キャッシュフォルダーのサイズを設定します。この値を超えると、upstream サーバーから転送されます。 } } }
第2ステップ:Tomcatのwebapps下に/ROOTにindex.html静的ページを作成します、図に示されています:
第3ステップ:Nginxサービスを起動します
#sbin/nginx 図に示されています:
第4ステップ:私たちのページアクセスhttp://192.168.74.129/index.html 正常に表示され、図に示されています:
第5ステップ:NginxとTomcatが高負荷状況下で静的ページのパフォーマンスはどうでしょうか?
Linuxのabウェブサイト負荷テストコマンドを使用してパフォーマンスをテストします
1.Nginxが静的ページのパフォーマンスをテストします
ab -c 100 -n 1000 http://192.168.74.129/index.html
これは同時に処理していることを示しています100回のリクエストを行い、実行しています1000回index.htmlファイルをリクエストし、図に示されています:
2.Tomcatが静的ページのパフォーマンスをテストします
ab -c 100 -n 1000 http://192.168.74.129:8081/index.html
これは同時に処理していることを示しています100回のリクエストを行い、実行しています1000回index.htmlファイルをリクエストし、図に示されています:
同じ静的ファイルの処理において、Nginxの静的パフォーマンスはTomcatよりも優れています。Nginxは毎秒5388次、一方でTomcatはリクエスト2609次。
まとめ:Nginxの設定ファイルで、静的コンテンツをNginxに処理させ、動的リクエストをTomcatに委譲し、パフォーマンスを向上させました。
4.Nginx +Tomcat 貟荷均等化とフェイルオーバー
高負荷状況下、サーバーの性能を向上させるために、単一のサーバーの並行処理の負荷を減らし、クラスタ構成を採用し、単一のサーバーが故障してサービスがアクセスできない場合のフェイルオーバー問題を解決することができます。
ステップ1:私たちの側では、2つのTomcatサーバーをデプロイしました。192.168.74.129:8081和192.168.74.129:8082
ステップ2:Nginxがプロキシサーバーとして使用され、クライアントがサーバーにリクエストを送信する際には、負荷分散を使用して処理されます。これにより、クライアントのリクエストが各サーバーに均等に配信され、サーバー側の負荷が軽減されます。Nginxのnginx.confファイルを設定します。
#vi /usr/local/nginx/conf/nginx.conf
#user nobody; worker_processes 1; error_log logs/error.log; pid logs/nginx.pid; events { use epoll; worker_connections 1024; } http { include mime.types; default_type application/octet-stream; log_format main '$remote_addr - $remote_user [$time_local] "$request" ' '$status $body_bytes_sent "$http_referer" ' '"$http_user_agent" "$http_x_forwarded_for"'; access_log logs/access.log main; sendfile on; keepalive_timeout 65; gzip on; gzip_min_length 1k; gzip_buffers 4 16k; gzip_http_version 1.0; gzip_comp_level 2; gzip_types text/plain application/x-javascript text/css application/xml; gzip_vary on; <span style="color:#ff0000;">upstream localhost_server { ip_hash; server 192.168.74.129:8081; server 192.168.74.129:8082; }/span> server { listen 80 default; server_name localhost; <span style="color:#ff0000;">location ~ .*\.(html|htm|gif|jpg|jpeg|bmp|png|ico|txt|js|css)$ //nginxで静的ページを処理します</span> { root /usr/tomcat/apache-tomcat-8081/webapps/ROOT; expires 30d; //クライアントにキャッシュ30日 } error_page 404 /404.html; #redirect server error pages to the static page /50x.html error_page 500 502 503 504 /50x.html; location = /50x.html { root html; } <span style="color:#ff0000;">location ~ \.(jsp|do)$ {//すべてのjspのダイナミックリクエストをTomcatに処理します</span> <span style="color:#ff0000;">proxy_pass http://localhost_server; //jspまたはdoのエンドのスuffexのリクエストをtomcatに処理します</span> proxy_redirect off; proxy_set_header Host $host; //バックエンドのWebサーバーはX-Forwarded-For取得ユーザーの実際のIP proxy_set_header X-Real-IP $remote_addr; proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for; client_max_body_size 10m; //クライアントがリクエストする最大単一ファイルのバイト数を許可 client_body_buffer_size 128k; //バッファエリアプロキシがユーザー端末のリクエストの最大バイト数をバッファする proxy_connect_timeout 90; //nginxがバックエンドサーバーと接続するタイムアウト時間 proxy_read_timeout 90; //接続成功後、バックエンドサーバーの応答時間 proxy_buffer_size 4k; //プロキシサーバー(nginx)がユーザーヘッダ情報を保存するバッファサイズを設定 proxy_buffers 6 32k; //proxy_buffersバッファエリア、ウェブページの平均32k以下なら、このように設定 proxy_busy_buffers_size 64k;//高負荷下バッファサイズ(proxy_buffers*2) proxy_temp_file_write_size 64k; //キャッシュフォルダーのサイズを設定します。この値を超えると、upstream サーバーから転送されます。 } } }
説明:
1.upstream の server はサーバーの IP(ドメイン)およびポートを指し、さらにパラメータを追加することもできます。
1)weight :サーバーの転送ウェイトを設定します。デフォルト値は1。
2)max_fails :fail_timeout と組み合わせて使用され、fail_timeout 期間内にサーバーが転送失敗を max_fails 設定の値を超えると、このサーバーは使用不可能になります。max_fails のデフォルト値は1
3)fail_timeout :この期間内に転送失敗が何回も発生すると、このサーバーは使用できません。
4)down:このサーバーは使用できません。
5)backup:ip_hash 設定のこのサーバーに対して無効にします。すべての非バックアップのサーバーが無効化された後、サーバーにリクエストを転送します。
2.ip_hash 設定は、クラスターのサーバーで、同じクライアントが複数のサーバーにリクエストを転送された場合、各サーバーが同じ情報をキャッシュすることがあります。これにより、リソースの無駄が発生します。ip_hash 設定では、同じクライアントが同じ情報を二度目にリクエストした場合、最初のリクエストのサーバーに転送されます。ただし、ip_hash は weight と同時に使用できません。
これで本文のすべてが終わりました。皆様の学習に役立つことを願っています。また、ナイアラベーカーやモンブランを多くのサポートをお願いします。
声明:本文の内容はインターネットから収集され、著作権者に帰属します。インターネットユーザーにより自発的に貢献し、アップロードされた内容であり、本サイトは所有権を持ちません。また、人間による編集は行われていません。著作権に関する問題がある場合は、メールを送信してください:notice#oldtoolbag.com(メールを送信する際、#を@に置き換えてください。報告を行い、関連する証拠を提供してください。一旦確認がとりたいとすると、本サイトは即座に侵害される内容を削除します。)