1. 程式人生 > 其它 >Tomcat多例項部署及負載均衡、動靜分離

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

瀏覽器訪問測試

http://192.168.239.10:8080

http://192.168.239.10:8081

到此多例項則部署完成

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