Tomcat多例項部署及負載均衡、動靜分離
Tomcat多例項部署及負載均衡、動靜分離
目錄Tomcat多例項部署
將安裝 Tomcat 所需軟體包傳到/opt目錄下,並關閉防火牆
安裝jdk
設定jdk環境變數
vim /etc/profile.d/java.sh export JAVA_HOME=/usr/java/jdk1.8.0_201-amd64 export JRE_HOME=$JAVA_HOME/jre export CLASSPATH=.:$JAVA_HOME/lib:$JRE_HOME/lib export PATH=$JAVA_HOME/bin:$JRE_HOME/bin:$PATH source /etc/profile.d/java.sh java -version
安裝tomcat
cd /opt
tar zxvf apache-tomcat-8.5.16.tar.gz #解壓tomcat包
mkdir /usr/local/tomcat #新建資料夾
mv apache-tomcat-8.5.16 /usr/local/tomcat/tomcat1 #移動改名
cp -a /usr/local/tomcat/tomcat1 /usr/local/tomcat/tomcat2
配置 tomcat 環境變數
vim /etc/profile.d/tomcat.sh #tomcat1 export CATALINA_HOME1=/usr/local/tomcat/tomcat1 export CATALINA_BASE1=/usr/local/tomcat/tomcat1 export TOMCAT_HOME1=/usr/local/tomcat/tomcat1 #tomcat2 export CATALINA_HOME2=/usr/local/tomcat/tomcat2 export CATALINA_BASE2=/usr/local/tomcat/tomcat2 export TOMCAT_HOME2=/usr/local/tomcat/tomcat2 source /etc/profile.d/tomcat.sh
修改 tomcat2主配置檔案
要求各 tomcat 例項配置不能有重複的埠號
vim /usr/local/tomcat/tomcat2/conf/server.xml
<Server port="8006" shutdown="SHUTDOWN">
#22行,修改Server prot,預設為8005 -> 修改為8006
<Connector port="8081" protocol="HTTP/1.1"
#69行,修改Connector port,HTTP/1.1 預設為8080 -> 修改為8081
<Connector port="8010" protocol="AJP/1.3" redirectPort="8443" />
#116行,修改Connector port AJP/1.3,預設為8009 -> 修改為8010
修改 tomcat1 例項中的 startup.sh 和 shutdown.sh 檔案,新增 tomcat 環境變數
vim /usr/local/tomcat/tomcat1/bin/startup.sh
Start Script for the CATALINA Server
#-----------------------------------------------------------------------------
#新增以下內容
export CATALINA_BASE=$CATALINA_BASE1
export CATALINA_HOME=$CATALINA_HOME1
export TOMCAT_HOME=$TOMCAT_HOME1
vim /usr/local/tomcat/tomcat1/bin/shutdown.sh
Stop script for the CATALINA Server
#-----------------------------------------------------------------------------
#新增以下內容
export CATALINA_BASE=$CATALINA_BASE1
export CATALINA_HOME=$CATALINA_HOME1
export TOMCAT_HOME=$TOMCAT_HOME1
修改 tomcat2 例項中的 startup.sh 和 shutdown.sh 檔案,新增 tomcat 環境變數
vim /usr/local/tomcat/tomcat2/bin/startup.sh
Start Script for the CATALINA Server
-----------------------------------------------------------------------------
export CATALINA_BASE=$CATALINA_BASE2
export CATALINA_HOME=$CATALINA_HOME2
export TOMCAT_HOME=$TOMCAT_HOME2
vim /usr/local/tomcat/tomcat2/bin/shutdown.sh
Stop script for the CATALINA Server
-----------------------------------------------------------------------------
export CATALINA_BASE=$CATALINA_BASE2
export CATALINA_HOME=$CATALINA_HOME2
export TOMCAT_HOME=$TOMCAT_HOME2
啟動各 tomcat 中的 /bin/startup.sh
/usr/local/tomcat/tomcat1/bin/startup.sh
/usr/local/tomcat/tomcat2/bin/startup.sh
netstat -natp | grep java
瀏覽器訪問測試
到此多例項則部署完成
Nginx+Tomcat負載均衡、動靜分離
部署Nginx 負載均衡器
環境
Nginx 伺服器:192.168.239.20:80
Tomcat伺服器1:192.168.239.30:80
Tomcat伺服器2:192.168.239.10:8080 192.168.239.10:8081
systemctl stop firewalld #關閉防火牆
systemctl disable firewalld #關閉開機自啟
setenforce 0
tar zxvf nginx-1.12.0.tar.gz -C /opt/ #解壓
yum -y install pcre-devel zlib-devel openssl-devel gcc gcc-c++ make #安裝相關依賴包
useradd -M -s /sbin/nologin nginx #建立執行使用者
cd /opt
cd nginx-1.12.0/
./configure --prefix=/usr/local/nginx --user=nginx --group=nginx #配置
make && make install #編譯安裝
ln -s /usr/local/nginx/sbin/nginx /usr/local/sbin/ #優化路徑使系統識別nginx命令
vim /lib/systemd/system/nginx.service #新增nginx服務
[Unit]
Description=nginx
After=network.target
[Service]
Type=forking
PIDFile=/usr/local/nginx/logs/nginx.pid
ExecStart=/usr/local/nginx/sbin/nginx
ExecrReload=/bin/kill -s HUP $MAINPID
ExecrStop=/bin/kill -s QUIT $MAINPID
PrivateTmp=true
[Install]
WantedBy=multi-user.target
systemctl daemon-reload #過載單元
systemctl start nginx.service #開啟服務
systemctl enable nginx.service #開啟開機自啟
部署兩臺Tomcat 應用伺服器
第一臺tomcat部署
將安裝 Tomcat 所需軟體包傳到/opt目錄下,並關閉防火牆
安裝jdk
解壓到指定目錄
設定jdk環境變數
[root@localhost opt]# vim /etc/profile.d/java.sh
[root@localhost local]# source /etc/profile.d/java.sh
安裝tomcat
解壓
網頁測試
動靜分離配置
Tomcat1 server 配置
mkdir /usr/local/tomcat/webapps/test
vim /usr/local/tomcat/webapps/test/index.jsp
<%@ page language="java" import="java.util.*" pageEncoding="UTF-8"%>
<html>
<head>
<title>JSP test1 page</title> #指定為 test1 頁面
</head>
<body>
<% out.println("動態頁面 1,this is dynamic web1");%>
</body>
</html>
vim /usr/local/tomcat/conf/server.xml
#由於主機名 name 配置都為 localhost,需要刪除前面的 HOST 配置
<Host name="localhost" appBase="webapps" unpackWARs="true" autoDeploy="true" xmlValidation="false" xmlNamespaceAware="false">
<Context docBase="/usr/local/tomcat/webapps/test" path="" reloadable="true">
</Context>
</Host>
/usr/local/tomcat/bin/shutdown.sh
/usr/local/tomcat/bin/startup.sh
Tomcat2 server 配置
mkdir /usr/local/tomcat/tomcat1/webapps/test /usr/local/tomcat/tomcat2/webapps/test
vim /usr/local/tomcat/tomcat1/webapps/test/index.jsp
<%@ page language="java" import="java.util.*" pageEncoding="UTF-8"%>
<html>
<head>
<title>JSP test2 page</title> #指定為 test2 頁面
</head>
<body>
<% out.println("動態頁面 2,this is dynamic web2");%>
</body>
</html>
vim /usr/local/tomcat/tomcat1/conf/server.xml
#刪除前面的 HOST 配置
<Host name="localhost" appBase="webapps" unpackWARs="true" autoDeploy="true" xmlValidation="false" xmlNamespaceAware="false">
<Context docBase="/usr/local/tomcat/tomcat1/webapps/test" path="" reloadable="true" />
</Host>
/usr/local/tomcat/tomcat1/bin/shutdown.sh
/usr/local/tomcat/tomcat1/bin/startup.sh
vim /usr/local/tomcat/tomcat2/webapps/test/index.jsp
<%@ page language="java" import="java.util.*" pageEncoding="UTF-8"%>
<html>
<head>
<title>JSP test3 page</title> #指定為 test3 頁面
</head>
<body>
<% out.println("動態頁面 3,this is dynamic web3");%>
</body>
</html>
vim /usr/local/tomcat/tomcat2/conf/server.xml
#刪除前面的 HOST 配置
<Host name="localhost" appBase="webapps" unpackWARs="true" autoDeploy="true" xmlValidation="false" xmlNamespaceAware="false">
<Context docBase="/usr/local/tomcat/tomcat2/webapps/test" path="" reloadable="true" />
</Host>
/usr/local/tomcat/tomcat2/bin/shutdown.sh
/usr/local/tomcat/tomcat2/bin/startup.sh
Nginx server 配置
準備靜態頁面和靜態圖片
cd /usr/local/nginx/html/
vim index.html
<html>
<body>
<h1>這是靜態頁面</h1>
</body>
</html>
mkdir /usr/local/nginx/html/img
cd /usr/local/nginx/html
cp gou.jpg ./img
vim /usr/local/nginx/conf/nginx.conf
......
http {
......
#gzip on;
#配置負載均衡的伺服器列表,weight引數表示權重,權重越高,被分配到的概率越大
upstream tomcat_server {
server 192.168.239.30:8080 weight=1;
server 192.168.239.10:8080 weight=1;
server 192.168.239.10:8081 weight=1;
}
server {
listen 80;
server_name www.kgc.com;
charset utf-8;
#access_log logs/host.access.log main;
#配置Nginx處理動態頁面請求,將 .jsp檔案請求轉發到Tomcat 伺服器處理
location ~ .*\.jsp$ {
proxy_pass http://tomcat_server;
}
#設定後端的Web伺服器可以獲取遠端客戶端的真實IP
##設定後端的Web伺服器接收到的請求訪問的主機名(域名或IP、埠),預設HOST的值為proxy_pass指令設定的主機名。如果反向代理伺服器不重寫該請求頭的話,那麼後端真實伺服器在處理時會認為所有的請求都來自反向代理伺服器,如果後端有防攻擊策略的話,那麼機器就被封掉了。
proxy_set_header HOST $host;
##把$remote_addr賦值給X-Real-IP,來獲取源IP
proxy_set_header X-Real-IP $remote_addr;
##在nginx 作為代理伺服器時,設定的IP列表,會把經過的機器ip,代理機器ip都記錄下來
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
#配置Nginx處理靜態圖片請求
location ~ .*\.(gif|jpg|jpeg|png|bmp|swf|css)$ {
root /usr/local/nginx/html/img;
expires 10d;
}
location / {
root html;
index index.html index.htm;
}
......
}
......
}
重啟nginx服務
systemctl restart nginx.service
測試
測試靜態頁面效果
瀏覽器訪問 http://192.168.239.20/
瀏覽器訪問 http://192.168.239.20/gou.jpg
測試負載均衡效果,不斷重新整理瀏覽器測試
瀏覽器訪問 http://192.168.239.20/index.jsp
Nginx 負載均衡模式:
●rr 負載均衡模式:
每個請求按時間順序逐一分配到不同的後端伺服器,如果超過了最大失敗次數後(max_fails,預設1),在失效時間內(fail_timeout,預設10秒),該節點失效權重變為0,超過失效時間後,則恢復正常,或者全部節點都為down後,那麼將所有節點都恢復為有效繼續探測,一般來說rr可以根據權重來進行均勻分配。
●least_conn 最少連線:
優先將客戶端請求排程到當前連線最少的伺服器。
●ip_hash 負載均衡模式:
每個請求按訪問ip的hash結果分配,這樣每個訪客固定訪問一個後端伺服器,可以解決session的問題,但是ip_hash會造成負載不均,有的服務請求接受多,有的服務請求接受少,所以不建議採用ip_hash模式,session 共享問題可用後端服務的 session 共享代替 nginx 的 ip_hash(使用後端伺服器自身通過相關機制保持session同步)。
●fair(第三方)負載均衡模式:
按後端伺服器的響應時間來分配請求,響應時間短的優先分配。
●url_hash(第三方)負載均衡模式:
基於使用者請求的uri做hash。和ip_hash演算法類似,是對每個請求按url的hash結果分配,使每個URL定向到同一個後端伺服器,但是也會造成分配不均的問題,這種模式後端伺服器為快取時比較好。
Nginx 四層代理配置:
Nginx常用於四層負載均衡和web service的代理轉發。 nginx從1.9.0開始,新增加了一個stream模組,用來實現四層協議的轉發、代理或者負載均衡等,類似阿里雲slb的 tcp協議模式。預設情況下,此模組不構建,應使用配置引數啟用 --with-stream 。
nginx server2配置
systemctl stop firewalld.service
setenforce 0
yum install -y epel-release #下載擴充套件線上源使用yum安裝nginx也可以用編譯安裝
yum install -y nginx
vim /etc/nginx/nginx.conf
include /etc/nginx/conf.d/*.conf;
upstream tomcat_server {
server 192.168.239.30:8080 weight=1;
server 192.168.239.10:8080 weight=1;
server 192.168.239.10:8081 weight=1;
}
server {
listen 80;
listen [::]:80;
server_name _;
root /usr/share/nginx/html;
# Load configuration files for the default server block.
include /etc/nginx/default.d/*.conf;
location ~ .*\.jsp$ {
proxy_pass http://tomcat_server;
proxy_set_header HOST $host;
proxy_set_header X-Real-IP $remote_addr;
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
}
location ~ .*\.(gif|jpg|jpeg|png|bmp|swf|css)$ {
root /usr/local/nginx/html/img;
expires 10d;
}
error_page 404 /404.html;
location = /404.html {
}
error_page 500 502 503 504 /50x.html;
location = /50x.html {
}
}
systemctl restart nginx
測試訪問
測試負載均衡效果,不斷重新整理瀏覽器測試
瀏覽器訪問 http://192.168.239.40/index.jsp
四層代理配置
events {
worker_connections 1024;
}
stream {
upstream web_server {
server 192.168.239.40:80; #新增節點伺服器地址
server 192.168.239.20:80;
}
server {
listen 8080;
proxy_pass web_server;
}
}
瀏覽器訪問
測試靜態頁面效果
瀏覽器訪問 http://192.168.239.50:8080/
瀏覽器訪問 http://192.168.239.50:8080/gou.jpg
測試負載均衡效果,不斷重新整理瀏覽器測試
瀏覽器訪問 http://192.168.239.50:8080/index.jsp