多實例部署?
在一臺服務器上有多個tomcat的服務。
配置多實例之前,看單個實例是否訪問正常。
1.安裝好 jdk
2.安裝 tomcat
cd /opt
tar zxvf apache-tomcat-9.0.16.tar.gz
mkdir /usr/local/tomcat
mv apache-tomcat-9.0.16 /usr/local/tomcat/tomcat1
cp -a /usr/local/tomcat/tomcat1 /usr/local/tomcat/tomcat2
3.配置 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
export CATALINA_HOME1=/usr/local/tomcat/tomcat1
tomcat主目錄的路徑,包含所有tomcat的文件
export CATALINA BASE1=/usr/local/tomcat/tomcat1
指定tomcat實例目錄
export TOMCAT_HOME1=/usr/local/tomcat/tomcat1
tomcat主目錄的路徑,包含所有tomcat的文件
這三條在環境變量中聲明,配置成全局變量,方便后面傳參/賦值
source /etc/profile.d/tomcat.sh
進入控制tomcat運行的文件,把服務shutdown一下
基于Tomcat主目錄,強行復制一個相同的
vim /etc/profile.d/tomcat.sh
4.修改 tomcat2 中的 server.xml 文件,要求各 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
第一個連接器默認監聽8080端口,負責建立HTTP連接。在通過瀏覽器訪問Tomcat服務器的Web應用時,使用的就是這個連接器。
第二個連接器默認監聽8009端口,負責和其他的HTTP服務器建立連接。
在把Tomcat與其他HTTP服務器集成時,需要用到這個連接器。
第三個連接器
port="8010":指定AJP連接器監聽的端口號。在這個示例中,AJP連接器監聽在8010端口上。
protocol="AJP/1.3":指定連接器所使用的協議。這里設置為AJP/1.3,表示使用AJP協議的版本1.3。
redirectPort="8443":指定重定向端口。當AJP連接器接收到HTTP請求時,如果請求是通過HTTPS(加密)訪問的,
則會將請求重定向到8443端口。
AJP連接器用于將靜態資源和動態請求從前端Web服務器(如Apache HTTP Server)轉發到Tomcat服務器。
這樣可以將Tomcat服務器隱藏在防火墻之后,提高安全性,同時提供更高的性能,特別是在處理動態請求時。
常見的AJP連接器配置是為了將Tomcat與Apache HTTP Server或Nginx等前端服務器集成,以實現負載均衡、反向代理等功能
引入一個很好用的功能,是第三方的,需要安裝
telnet 測試服務器ip地址是否能正常通信和測試端口通信是否正常(工作當中用得到,面試會問)
通過什么方式檢測出來80端口不通?telnet一測就知道
例:telnet 192.168.233.61 80
?
為什么能ping通卻不能訪問?因為服務器是基于端口通信的,所以也要檢查端口
端口可能不存在 端口沒有打開
telnet 192.168.233.61 80試試
出現Escape character is 就表示通信正常,已經建立了通信
去tomcat2,改tomcat2的端口,因為tomcat1已經占用8009,8080等端口。復制過來的tomcat2端口一樣,所以得改
改之前先把配置文件復制一下。注:改主文件,備份文件只是預防你改錯了好還原回去
把shutdown端口改為8006
?http通信端口8080也改為8081
和web服務器通信的端口8009改為8010
注:端口可以改為任意的數字,只要端口不被占用都可以,但是端口有范圍65535以內
5.修改各 tomcat 實例中的 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
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
步驟詳解:
修改啟動文件
先改tomcat1的
vim startup.sh
在尾行添加上一步設置的全局變量
export CATALINA_BASE=$CATALINA_BASE1
export CATALINA_HOME=$CATALINA_HOME1
export TOMCAT_HOME=_TOMCAT_HOME1
vim shutdown.sh
配置這兩個的目的就是為了做系統服務控制,讓他能夠識別到我啟動是誰,關的是誰
配置完tomcat1的接著配置一下tomcat2的
同樣的在最后一行,把tomcat2的添加一下
vim startup.sh 同樣配置一下startup
這樣1和2的多實例就都配置好了
啟動一下服務
6.瀏覽器訪問測試
http://192.168.233.71:8080
http://192.168.233.71:8081
看一下頁面是否能正常訪問。都是基于71這臺服務器,分別看一下8080和8081端口
nginx+tomcat實現動靜分離
靜:靜態頁面
動: 動態頁面
分別可以對靜態頁面和動態頁面發起不同的請求,會有不同的響應結果。
nginx反向代理------負載均衡------tomcat是后端服務器------web靜態nginx------靜態請求----->nginx
------動態頁面------tomcat
tomcat并發量能力弱,只有nginx的六分之一,所以要有負載均衡進行合理的調用分配。
示例圖:
開始正式操作
準備好了4臺服務器
test1 192.168.233.10 作為客戶端
nginx1 61?作為web服務器
tomcat 71 多實例
tomcat 72 單獨后端web服務器,用來處理動態請求
先配置nginx1
vim /usr/local/nginx/conf/nginx.conf
......
http {
......
?? ?#gzip on;
?? ?
?? ?#配置負載均衡的服務器列表,weight參數表示權重,權重越高,被分配到的概率越大
?? ?upstream tomcat_server {
?? ??? ?server 192.168.233.71:8080 weight=1;
?? ??? ?server 192.168.233.71:8081 weight=1;
?? ?}
?? ?
?? ?server {
?? ??? ?listen 80;
?? ??? ?server_name localhost;
?? ?
?? ??? ?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;
?? ??? ??? ?expires 10d;
?? ??? ?}
?? ??? ?
?? ??? ?location / {
?? ??? ??? ?root html;
?? ??? ??? ?index index.html index.htm;
?? ??? ?}
......
?? ?}
......
}
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;
?? ??? ?}
備份配置文件
編輯配置文件 vim nginx.conf
在http模塊當中配置
寫上后端要調用的服務器,配置權重,多實例權重分配小一點,單實例權重稍高一點,讓其訪問量偏大一點
server里面配置處理動態請求的location
檢查語法,沒有問題,nginx配置完成
配置tomcat1 實例1
動態頁面
建立一個動態頁面訪問內容,訪問后端服務器,就會訪問到這個頁面
配置多實例中的tomcat2
?
再回到tomcat1
把默認配置的host刪除掉
再去tomcat2,一樣把server.vml配置一下
多實例tomcat配置完成,去驗證一下單實例服務是否正常
正常,開始配置
單實例,只需部署一下訪問頁面即可
vim index.jsp配置
vim server.xml 一樣把原來的host刪除,再添加一個Host
注意路徑指向要一直,否則獲取不到index文件
從tomcat1開始,重啟服務
tomcat2
看看是否能夠訪問到服務
因為路徑錯誤,所以訪問不到
/usr/local/tomcat/tomcat2不存在,改為/usr/local/tomcat2
改tomcat1的server文件?
?重啟
?這樣就可以了
把靜態頁面請求也配置一下
?
把圖片拖進來
請求一下靜態頁面
請求一下動態頁面:
這樣就完成了動靜分離
綜合:
四層轉發流量+七層后端代理+動靜分離
架構如圖:
四層轉發流量+七層后端代理
環境:
192.168.233.61 nginx四層代理
192.168.233.62 nginx七層代理
192.168.233.63 nginx七層代理
192.168.233.71 tomcat1多實例
192.168.233.72 tomcat2單實例
systemctl stop firewalld
setenforce 0
192.1682.233.61 nginx四層代理:
vim /usr/local/nginx/conf/nginx.conf
pid /usr/local/nginx/run/nginx.pid;
events {
? ? worker_connections ?1024;
}
stream {
? ?upstream test {
? ? ? ?server 192.168.233.62:80;
? ? ? ?server 192.168.233.63:80;
? }
? server {
? ? ? ?listen 8080;
? ? ? ?proxy_pass test;
?}
}
nginx七層代理62和63:
? ? upstream ky30 {
? ? ? ?server 192.168.233.71:8080 weight=1;
? ? ? ?server 192.168.233.71:8081 weight=1;
? ? ? ?server 192.168.233.72:8080 weight=1;
? ? }
? ? server {
? ? ? ? listen ? ? ? 80;
? ? ? ? server_name ?localhost;
? ? ? ? #charset koi8-r;
? ? ? ? #access_log ?logs/host.access.log ?main;
? ? ? ? location ~ .*\.jsp$ {
? ? ? ? ? ?proxy_pass http://ky30; #配置Nginx處理動態頁面請求,將 .jsp文件請求轉發到Tomcat 服務器處理
?? ??? ? ??
? ? ? ? ? ?proxy_set_header HOST $host; #設定后端的Web服務器接收到的請求訪問的主機名(域名或IP、端口),
?? ??? ? ? 默認HOST的值為proxy_pass指令設置的主機名。
?? ??? ? ??
? ? ? ? ? ?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都記錄下來
?? ??? ? ??
? ? ? ? }
?? ??? ?location ~ .*\.(gif|jpg|jpeg|png|bmp|swf|css)$ {
?? ??? ??? ?root /usr/local/nginx/html;
?? ??? ??? ?expires 10d;
?? ??? ?}
配置相同
192.168.233.71 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 中的 server.xml 文件,要求各 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
修改各 tomcat 實例中的 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
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
配置tomcat01的測試頁面
?
mkdir /usr/local/tomcat/tomcat1/webapps/test?
?
vim /usr/local/tomcat/tomcat1/webapps/test/index.jsp
<%@ page language="java" import="java.util.*" pageEncoding="UTF-8"%>
<html>
<head>
<title>tomcat01</title> ??
</head>
<body>
<% out.println("tomcat01 running");%>
</body>
</html>
更進一步完整架構后面再說