習うより慣れろ - あなたは、文化と教育のnginxの+ Tomcatのクラスタリング、ロードバランシング、および静的および動的な分離を構築します
序文
確かにnginxのとTomcatのための誰もが、nginxのは、広くだけでなく、静的なWebリソースのためのリバースプロキシと負荷分散ソフトウェアは非常に友好的だけでなく、非常に実用的である、使用されていると非常に精通しています。Tomcatは、ビルドnginxの+ Tomcatのクラスタのバックエンドサービスと組み合わせます。
直接の友人のためのパッケージで、この記事のリンクの後に取得することができます直接バックアップの第三の練習の内容を見てみたいです。
まず、構造およびクラスター・トポロジーを構築
1.1クラスタアーキテクチャのアイコン
nginxの+ Tomcatのクラスタ概略的な構造は次のよう:
1.2システム環境と計画住所
次のように使用する3つのCentos7サーバ(7.4)、計画されました:
サーバー | NICモード | IPアドレス |
---|---|---|
nginxの | NAT | 20.0.0.128 |
Tomcat1 | NAT | 20.0.0.130 |
TOMCAT2 | NAT | 20.0.0.136 |
次のように1.3トポロジがあります
1.4関連リソースソフトウェア
リンク:https://pan.baidu.com/s/1Qdla-vrpcspcAKJucZdSUg
抽出コード:40it
第二に、ビルドアイデアや構成のコア部分
練習を完了するために、上記のような構成によれば、必要性は、コア部分の構築、明確な操作や設定にアイデアを整理します。
1は、最初にすべての私たちは、3台のサーバ上で、テストサービスが正常である(上記のリンクでのパッケージ)に対応するインストールサービスをコンパイルする必要があります。
ステップ明確な根拠によって必要ステップ、ロードバランシング及び動的分離:2は、コア機能に基づいて、続いて
ベースのロードバランシング
負荷分散がnginxのサーバーで構成され、必要性は、メインコンフィギュレーションファイルをnginxのように設定する(単純な加重ラウンドロビン負荷バランシングアルゴリズムを使用して本明細書中、)対応する上流のモジュールと必要なアルゴリズムを使用してロードバランシングモジュール。コアの構成:
#server指令外层
upstream tomcat-server {
server 20.0.0.130:8080 weight=1;
server 20.0.0.136:8080 weight=1;
}
#server指令中
location / {
root html;
index index.html index.htm;
proxy_pass http://tomcat-server;
}
アクセスnginxのサーバーのアドレスは、バックエンドにアクセスするには、ラウンドロビン二つの実Tomcatサーバーことができます。
ダイナミック分離
私たちはnginxのために、静的リソースのサポートは非常に友好的であることを知っている、とTomcatはJavaサポート動的なWebページのために非常に良いです。nginxのサーバーが実行されている静的な要求を与えられるべきダイナミックな分離を達成するために必要である、それはとても、Tomcatは要求に類似した動的なJSPファイルを処理する責任があります。
nginxのサーバと動的分離のためのTomcatサーバを用いた場合。最終的には、Tomcatのハンドル動的なページを使用して、そのnginxのハンドルので、静止画像と組み合わされます。
コアの構成:
nginxのサーバー:
location ~.*\.(gif|jpg|jpeg|png|bmp|swf|css)$ {
root html/demo;
expires 30d;
}
location ~.*.jsp$ { ##匹配jsp页面跳转代理服务器池
proxy_pass http://tomcat-server;
proxy_set_header Host $host;
}
location / {
root html;
index index.html index.htm;
#proxy_pass http://tomcat-server;
}
Tomcatサーバー:
<Context docBase="/usr/local/tomcat/webapps/demo" path="" reloadable="false">
</Context>
3、展開および構成時に、必要な検証
まあ、大体処理して、コアの構成が終了し、あなたは、この例の完全なデモンストレーションを開始することができます。
第三に、展開プロセスと実践
バランシングクラスタのセットアップをロード
3.1 2台のTomcatサーバーの展開を構成します
(ページのパーツはもちろん、ロードバランシングを検証することである、一貫性のない表示を除く)、そしてあまりにも長い記事を思われないためにはほぼ同じ2つのTomcatサーバープロセスを展開する、我々は、サーバー上にデプロイtomcat1を示しています。
3.1.1 JDKをインストール
====================================================================================
tomcat1
[root@localhost ~]# hostnamectl set-hostname tomcat1
[root@localhost ~]# su
[root@tomcat1 ~]# cd /opt/
[root@tomcat1 opt]# ls
apache-tomcat-9.0.16.tar.gz jdk-8u91-linux-x64.tar.gz rh
[root@tomcat1 opt]# tar zxf jdk-8u91-linux-x64.tar.gz -C /usr/local/
[root@tomcat1 opt]# vim /etc/profile #声明环境变量
#末尾
export JAVA_HOME=/usr/local/jdk1.8.0_91
export JRE_HOME=${JAVA_HOME}/jre
export CLASSPATH=.:${JAVA_HOME}/lib:${JRE_HOME}/lib
export PATH=${JAVA_NAME}/bin:$PATH
[root@tomcat1 opt]# source /etc/profile
3.1.2のTomcatのインストールを配備
[root@tomcat1 opt]# ls
apache-tomcat-9.0.16.tar.gz jdk-8u91-linux-x64.tar.gz rh
[root@tomcat1 opt]# tar zxf apache-tomcat-9.0.16.tar.gz -C /usr/local/
[root@tomcat1 opt]# cd /usr/local/
[root@tomcat1 local]# ls
apache-tomcat-9.0.16 bin etc games include jdk1.8.0_91 lib lib64 libexec sbin share src
[root@tomcat1 local]# mv apache-tomcat-9.0.16/ tomcat
[root@tomcat1 local]# cd tomcat/
[root@tomcat1 tomcat]# ls
bin conf lib logs README.md RUNNING.txt webapps
BUILDING.txt CONTRIBUTING.md LICENSE NOTICE RELEASE-NOTES temp work
[root@tomcat1 bin]# ls #将下面中的启动脚本和关闭脚本建立软链接
bootstrap.jar ciphers.sh daemon.sh setclasspath.bat startup.sh version.bat
catalina.bat commons-daemon.jar digest.bat setclasspath.sh tomcat-juli.jar version.sh
catalina.sh commons-daemon-native.tar.gz digest.sh shutdown.bat tomcat-native.tar.gz
catalina-tasks.xml configtest.bat makebase.bat shutdown.sh tool-wrapper.bat
ciphers.bat configtest.sh makebase.sh startup.bat tool-wrapper.sh
[root@tomcat1 bin]# ln -s /usr/local/tomcat/bin/startup.sh /usr/local/bin
[root@tomcat1 bin]# ln -s /usr/local/tomcat/bin/shutdown.sh /usr/local/bin
#创建站点目录以及文件(web页面)
[root@tomcat1 local]# mkdir -p /web/webapp1
[root@tomcat1 local]# cd /web/webapp1/
[root@tomcat1 webapp1]# vim index.jsp
<%@ page language="java" import="java.util.*" pageEncoding="UTF-8"%>
<html>
<head>
<title>JSP test1 page</title> #网页标题名字
</head>
<body>
<% out.println("Welcome tomcat1 Web");%> #网页内容为:welcome tomcat1 web 唯一需要在tomcat2上面更改配置的部分(再次声明这样是为了验证效果,生产环境中是一致的哈~)
</body>
</html>
[root@tomcat1 webapp1]# vim /usr/local/tomcat/conf/server.xml #配置服务文件在149行添加context标签语句
148 <Host name="localhost" appBase="webapps"
149 unpackWARs="true" autoDeploy="true">
150 <Context docBase="/web/webapp1" path="" reloadable="false">
151 </Context>
[root@tomcat1 webapp1]# startup.sh #开启服务
Using CATALINA_BASE: /usr/local/tomcat
Using CATALINA_HOME: /usr/local/tomcat
Using CATALINA_TMPDIR: /usr/local/tomcat/temp
Using JRE_HOME: /usr/local/jdk1.8.0_91/jre
Using CLASSPATH: /usr/local/tomcat/bin/bootstrap.jar:/usr/local/tomcat/bin/tomcat-juli.jar
Tomcat started.
[root@tomcat1 webapp1]# netstat -ntap | grep 8080 #检查tomcat服务是否开启
tcp6 0 0 :::8080 :::* LISTEN 2020/java
[root@tomcat1 webapp1]# systemctl status firewalld.service #查看防火墙对防火墙进行设置
● firewalld.service - firewalld - dynamic firewall daemon
Loaded: loaded (/usr/lib/systemd/system/firewalld.service; enabled; vendor preset: enabled)
Active: active (running) since 日 2020-04-05 11:04:32 CST; 19min ago
......
[root@tomcat1 webapp1]# firewall-cmd --zone=public --add-port=8080/tcp --permanent
success
[root@tomcat1 webapp1]# firewall-cmd --reload
success
3.2 nginxのサーバー・デプロイメント構成
3.2.1手動でコンパイルしてnginxのサービスをインストールします(ここではあまりヘクタールを言っていません)
[root@nginx opt]# tar zxf nginx-1.12.0.tar.gz -C /usr/local/
[root@nginx opt]# yum install -y gcc gcc-c++ make zlib-devel pcre-devel
[root@nginx opt]# useradd -M -s /sbin/nologin nginx
[root@nginx opt]# cd /usr/local/nginx-1.12.0/
[root@nginx nginx-1.12.0]# ./configure --prefix=/usr/local/nginx --user=nginx --group=nginx --with-http_stub_status_module --with-http_gzip_static_module --with-http_flv_module
[root@nginx nginx-1.12.0]# make && make install
[root@nginx nginx-1.12.0]# ln -s /usr/local/nginx/sbin/nginx /usr/local/sbin/
3.3構成の検証の負荷分散
3.3.1upstreamロード・バランシングモジュール
[root@nginx nginx-1.12.0]# vim /usr/local/nginx/conf/nginx.conf
#在nginx.conf的gzip下面写入tomcat服务器池,tomcat-server表示一个名称,可以理解为服务器的域名
#gzip on;
upstream tomcat-server {
server 20.0.0.130:8080 weight=1;#根据加权轮循算法调度访问后端的tomcat服务器
server 20.0.0.136:8080 weight=1;
}
location / {
root html;
index index.html index.htm;
proxy_pass http://tomcat-server; #配置代理服务器
}
[root@nginx nginx-1.12.0]# nginx -t #检查配置文件的语法
nginx: the configuration file /usr/local/nginx/conf/nginx.conf syntax is ok
nginx: configuration file /usr/local/nginx/conf/nginx.conf test is successful
[root@nginx nginx-1.12.0]# nginx #启动服务
[root@nginx nginx-1.12.0]# netstat -napt | grep nginx
tcp 0 0 0.0.0.0:80 0.0.0.0:* LISTEN 53804/nginx: master
[root@nginx nginx-1.12.0]# firewall-cmd --zone=public --add-port=80/tcp --permanent
success
[root@nginx nginx-1.12.0]# firewall-cmd --reload
success
3.3.2ロードバランシングを確認してください
以下の二つのグラフの結果として、クライアントnginxのサーバーアドレスにアクセスして、リフレッシュ、:
デモを達成するために、動的分離プロセス
分離の目的を達成するための唯一の動きは、これだけあなたはnginxのサーバとTomcatサーバーを使用して、必要なデモを行うことができます。
動的および静的リソースへ3.4アナログアクセス(非同一のWebページ)
管理上の目的のためには、スクリプトnginxの管理サービスを記述することをお勧めします
[root@nginx nginx-1.12.2]# vim /etc/init.d/nginx ##编写service启动脚本
#!/bin/bash
# chkconfig: - 99 20
# description: Nginx Service Control Script
PROG="/usr/local/nginx/sbin/nginx"
PIDF="/usr/local/nginx/logs/nginx.pid"
case "$1" in
start)
$PROG
;;
stop)
kill -s QUIT $(cat $PIDF)
;;
restart)
$0 stop
$0 start
;;
reload)
kill -s HUP $(cat $PIDF)
;;
*)
echo "Usage: $0 {start|stop|restart|reload}"
exit 1
esac
exit 0
[root@nginx nginx-1.12.2]# chmod +x /etc/init.d/nginx
[root@nginx nginx-1.12.2]# chkconfig --add nginx
3.4.1一時的な注釈元nginxのプロキシサービスのコンフィグレーション
location / {
root html;
index index.html index.htm;
#proxy_pass http://tomcat-server;
}
3.4.2(端末のアクセスを処理し、静的リソース要求としてステートメントnginxのを)(表示ページ)をデフォルトのサイトのディレクトリのファイルを修正
[root@nginx html]# vim index.html
<!DOCTYPE html>
<html>
<head>
<title>Welcome to nginx!</title>
<style>
body {
width: 35em;
margin: 0 auto;
font-family: Tahoma, Verdana, Arial, sans-serif;
}
</style>
</head>
<body>
<h1>Welcome to nginx!</h1>
<p><em>this is a static web page.</em></p> #em表示斜体
</body>
</html>
この時点でサービスにアクセスするために再起動してnginxのサーバーが、得られます。
3.4.3 tomcat1で動的なページを作成し、JSP
#创建一个站点目录demo,编写一个jsp脚本
vim /usr/local/tomcat/webapps/demo/index.jsp
<!DOCCTYPE html>
<%@ page language="java" contentType="text/html; charset=UTF-8" pageEncoding="UTF-8"%>
<%@ page import="java.util.Date" %>
<%@ page import="java.text.SimpleDateFormat" %>
<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/ html4/loose.dtd">
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
<title>动态页面</title>
</head>
<body>
<div>动态页面1</div>
</body>
</html>
更改server.xml
<Host name="localhost" appBase="webapps"
unpackWARs="true" autoDeploy="true">
<Context docBase="/usr/local/tomcat/webapps/demo" path="" reloadable="false">
</Context>
<!--<Context docBase="/web/webapp1" path="" reloadable="false">
</Context> -->
その後の時間には、configure IPアクセスへのファイルアクセスJSPジャンプのためのnginxのサーバー上の場所を必要と:
location ~.*.jsp$ { ##匹配jsp页面跳转代理服务器池
proxy_pass http://tomcat-server;
proxy_set_header Host $host;
}
3.4.4検証テスト
同じWebページへの動的アクセスのTomcat 3.5、nginxの上で利用可能な静的リソース
サーバnginxのから取得JPG形式の画像を含むJSPファイルとして画像を使用します
次のように具体的な構成があります
nginxの上:デモカタログ作成する必要が格納されているJPG(Tomcatで名前のデモとディレクトリが同じでなければなりません)
#首先取消上面的代理注释内容,因为测试的时候访问的是20.0.0.128
server {
listen 80;
server_name localhost;
location ~.*\.(gif|jpg|jpeg|png|bmp|swf|css)$ {
root html/demo;
expires 30d;
}
#charset koi8-r;
#access_log logs/host.access.log main;
location ~.*.jsp$ { ##匹配jsp页面跳转代理服务器池
proxy_pass http://tomcat-server;
proxy_set_header Host $host;
}
location / {
root html;
index index.html index.htm;
proxy_pass http://tomcat-server;
}
Tomcatの:
JSPファイル、画像リンクを追加します。
[root@tomcat1 demo]# vim /usr/local/tomcat/webapps/demo/index.jsp
<!DOCCTYPE html>
<%@ page language="java" contentType="text/html; charset=UTF-8" pageEncoding="UTF-8"%>
<%@ page import="java.util.Date" %>
<%@ page import="java.text.SimpleDateFormat" %>
<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/ html4/loose.dtd">
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
<title>动态页面</title>
</head>
<body>
<div>动态页面1</div><br>
<img src="cat.jpg"> #添加的内容
</body>
</html>
~
JSPの資源:デモ・ディレクトリの下で
[root@tomcat1 demo]# ls
index.jsp
画像の資源:htmlディレクトリ
[root@nginx html]# ls
50x.html demo index.html
[root@nginx html]# cd demo/
[root@nginx demo]# ls
cat.jpg
[root@nginx demo]#
この時点で、nginxのサービスアクセス20.0.0.128を再起動します
そこにセカンダリサーバー上に第2の関連設定がコンテンツにアクセスすることなく、コンテンツがまだロード・バランシング前と同じであるため、最初の訪問は、テキスト+画像にしました。
簡単な概要
実際には、練習と組み合わせて、我々は、静的および動的分離とロードバランシングは、クラスタが提供nginxの+ Tomcatのビルドに組み合わせる方法を理解することができます。最後のダイナミックなリソースがTOMCAT2サーバー構成を改善するためにバランスをとる前負荷に連動してダイナミックテキスト、静的リソースプラス(理解静的および動的分離)に代わって、このかわいい子猫、によって表される場合は、ロードバランシングアルゴリズムに基づいて行うことができます。
要するに、我々は、機能モジュール用の設定ファイルに精通する必要があり、最終的にアクセスのコンテキストに基づいて様々なモジュールまたは命令がジャンプする方法を理解する必要があり、一致するリレーションシップ・マネジメントは、クリアな(ロジック)が必要です。