Tomcat 集群部署
Tomcat快速入門
Tomca基本介紹
環境準備
- JVM介紹
- Java業務都是運行在java虛擬機上,java虛擬機簡稱JVM( java virtual machine)
? 虛擬機是通過軟件模擬出具有完整硬件系統的功能
? 為什么Java需要JVM虛擬機
? 早期C語言不支持跨平臺,如果C語言想要在Windows Linux Mac上運行,需要進行分別編譯,那么在Linux上有很多優秀的軟件,如果需要在Windows上使用需要重新編譯,移植性差
而Java則不同,Java是可以跨平臺,只需要將源碼進行一次編譯,能夠在不同的操作系統運行
JAVA是如何做到的?
? 它只需要在Windwos Linux系統上運行一個jvm,這樣我們能將Java編譯好的war包在Windows和Linux平臺運行起來,無需我們重復編譯。而JVM是由jre提供
JAVA環境JRE和JDK的區別
jre是java的運行環境,包含jvm
jdk是java的開發環境,會包含java的運行環境jre
如果說單純的運行java代碼,只需要jre足夠,但如果需要提供開發環境以及運行環境則需要JDK
Tomcat
Tomcat和Nginx類似,都是WEB服務器軟件 只不過Tomcat是基于JAVA開發的WEB服務,主要解析JAVA代碼
Nginx僅支持靜態資源解析,而Tomcat支持解析Java開發的WEB應用,還支持解析靜態資源(效率不高)
Nginx適合做前端負載均衡,Tomcat適合做后端應用服務處理
通常情況企業會使用Nginx+Tomcat結合,Nginx處理靜態資源,Tomcat處理動態資源
Tomcat快速安裝
安裝jdk
yum -y install java 或者上傳rpm包 rpm -ivh jdk....rpm安裝Tomcat
(下載 Tomcat、解壓、啟動 )
Tomcat官網: https://tomcat.apache.org/
[root@web01 ~]#wget https://dlcdn.apache.org/tomcat/tomcat-9/v9.0.58/bin/apache-tomcat-9.0.58.tar.gz --no-check-certificate[root@web01 ~]#`mkdir /soft` [root@web01 ~]#`tar xf apache-tomcat-9.0.39.tar.gz -C /soft/` [root@web01 ~]#` ln -s /soft/apache-tomcat-9.0.39/ /soft/tomcat` [root@web01 ~]# `/soft/tomcat/bin/startup.sh` # 啟動 [root@web01 ~]# `/soft/tomcat/bin/shutdown.sh` # 停止 [root@web01 ~]# netstat -lntp |grep javatcp6 0 0 127.0.0.1:8005 :::* LISTEN 6867/java tcp6 0 0 :::8080 :::* LISTEN 6867/java# 8080 對外提供服務的端口 # 8005 關閉Tomcat端口配置systemc方式啟動
復制過來修改一下
[root@web03 ~]# systemctl cat nginx寫入配置文件
cat >/usr/lib/systemd/system/tomcat.service<<'EOF' [Unit] Description=Apache Tomcat Server After=network.target remote-fs.target nss-lookup.target[Service] Type=forking ExecStart=/soft/tomcat/bin/startup.sh ExecStop=/soft/tomcat/bin/shutdown.sh ExecRetart=/soft/tomcat/bin/shutdown.sh && sleep2 && /soft/tomcat/bin/startup.sh[Install] WantedBy=multi-user.target EOF啟動
[root@web03 ~]# systemctl daemon-reload `#重新加載系統控制配置文件[root@web03 ~]# systemctl start tomcat[root@web03 ~]# systemctl enable tomcatCreated symlink from /etc/systemd/system/multi-user.target.wants/tomcat.service to /usr/lib/systemd/system/tomcat.service.配置文件
配置文件
tomcat軟件目錄結構:bin ---主要包含啟動和關閉tomcat的腳本(啟停java腳本依賴jar包文件) conf ---tomcat配置文件的目錄(站點配置:server.xml) lib ---tomcat運行時需要加載的jar包 logs ---tomcat日志存放位置 temp ---tomcat臨時存放文件路徑 webapps ---tomcat默認站點目錄 work ---tomcat運行時產生的緩存文件配置文件詳解-----> tomcat/conf/server.xml [📎server.xml]
虛擬主機
cat tomcat/conf/server.xml ... <Host name="diy.ahui.org" appBase="/code/tomcat/diy" #代碼目錄unpackWARs="true" autoDeploy="true"> #是否自動解包 <Valve className="org.apache.catalina.valves.AccessLogValve" directory="logs"prefix="diy_access_log" #日志名稱 suffix=".txt" #日志后綴名pattern="%h %l %u %t "%r" %s %b" /> #日志格式 </Host>...自定義日志格式:
重新啟動tomcat加載配置文件
[root@web01 ]# systemctl restart tomcat創建網頁測試
[root@web01 ]# mkdir /code/tomcat/diy/ROOT -p [root@web01 ]# echo "tomcat-diy" > /code/tomcat/diy/ROOT/index.html解析host 瀏覽器訪問
Tomcat HTTP請求過程
Ps: tomcat中Context的作用:
... <Host > <!--訪問/tt這個uri,上 / code/tt中獲取頁面資源,不存在該目錄會報錯 無法啟動Tomcat 需要提前創建--> <Context docBase=" / code/tt" path="/tt" reloadable="true" /> </Host> ...context作用:----> 類似于nginx中的alias
用戶發出一個請求,如http://tomcat.ahui.com:8080/index.jsp
Connector發現是http/1.1協議,而且還是8080端口,于是就把請求接收后交給符合條件的Engine
Engine通過請求中的主機名tomcat.ahui.com查找滿足條件的虛擬主機(Host)
找到后就去此虛擬主機指定的appBase(代碼存放的目錄)最后將解析產生的結果返回給用戶。
Tomcat管理頁面
Tomcat自帶的管理頁面
管理功能
監控功能
1.所有的管理頁面,都將權限賦予給了角色,而角色的名稱是固定的: manager-gui admin-gui
2.需要添加一個用戶,將用戶捆綁至對應的角色,這樣用戶就可以訪問到對應的頁面
3.由于項目默認允許127.0.0.1訪問,所以配置好了角色和用戶也無法正常訪問:
[root@web01 ROOT]# vim /soft/tomcat/webapps/host-manager/META-INF/context.xml [root@web01 ROOT]# vim /soft/tomcat/webapps/manager/META-INF/context.xml默認狀態
<Valve className="org.apache.catalina.valves.RemoteAddrValve"allow="\d+\.\d+\.\d+\.\d+|::1|0:0:0:0:0:0:0:1" />修改后的狀態:10.0.0.\d
<Valve className="org.apache.catalina.valves.RemoteAddrValve"allow="\d+\.\d+\.\d+\.\d+|::1|0:0:0:0:0:0:0:1" />4.重啟tomcat并訪問
Tomcat部署zrlog項目
1.定義虛擬主機
vim /soft/tomcat/conf/server.xml ...<!--站點zrlog.ahui.com--><Host name="zrlog.ahui.com" appBase="/zrlog"unpackWARs="true" autoDeploy="true"><Valve className="org.apache.catalina.valves.AccessLogValve" directory="logs"prefix="zrlog_access_log" suffix=".txt"pattern="%h %l %u %t "%r" %s %b" /></Host>上傳war包至指定目錄
zrlog官網: https://zrlog.com/
[root@web01 conf]# mkdir /zrlog [root@web01 conf]# ll /zrlog/總用量 11316 -rw-r--r-- 1 root root 11585583 5月 11 11:32 ROOT.war重啟tomcat應用
[root@web01 conf]# /soft/tomcat/bin/shutdown.sh [root@web01 conf]# /soft/tomcat/bin/startup.sh在/zrlog目錄下的解壓.war包
自動部署ROOT.war包 (自動生成ROOT目錄)
檢查是否部署ok
[root@web01 conf]# tail -f /soft/tomcat/logs/catalina.out 11-May-2020 11:33:32.577 信息 [main] org.apache.coyote.AbstractProtocol.start 開始協議處理句柄["http-nio-8080"] 11-May-2020 11:33:32.681 信息 [main] org.apache.catalina.startup.Catalina.start Server startup in [4,035] milliseconds配置遠程數據庫連接
MariaDB [(none)]> create database zrlog charset utf8; MariaDB [(none)]> grant all privileges on *.* to 'all'@'%' identified by 'xxxxxx';訪問zrlog站點
Tomcat集群實戰
tomcat集群架構圖解
| web1 | 172.16.1.7 |
| web2 | 172.16.1.8 |
| 其他后端節點 |
安裝tomcat
[root[@web02 ~]# `yum install java -y`拷貝代碼和文件 (注意是在web01節點操作的)
#發送代碼文件 [root@web01 ~]# scp -rp /soft 10.0.0.8:/ [root@web01 ~]# scp -rp /zrlog 10.0.0.8:/ #發送配置文件 [root@web01 ~]# scp /usr/lib/systemd/system/tomcat.service 172.16.1.8:/usr/lib/systemd/system/tomcat.serviceweb02操作如下
[root[@web02 ]# ln -s /soft/apache-tomcat-9.0.34/ /soft/tomcat [root@web02 ~]# systemctl daemon-reload [root@web02 ~]# systemctl start tomcat [root@web02 ~]# systemctl enable tomcat Created symlink from /etc/systemd/system/multi-user.target.wants/tomcat.service to /usr/lib/systemd/system/tomcat.service.共享靜態資源
[root@web02 ~]# `yum install nfs-utils -y [root[@nfs ](https://www.yuque.com/nfs) ~]# `cat /etc/exports` /data/blog 172.16.1.0/24(rw,sync,all_squash,anonuid=666,anongid=666) /data/zrlog 172.16.1.0/24(rw,sync,all_squash,anonuid=666,anongid=666) [root[@nfs ~]# mkdir /data/zrlog [root[@nfs ~]# chown -R www.www /data/zrlog/ [root[@nfs ~]# systemctl restart nfs所有web節點都需要掛載
mount -t nfs 172.16.1.31:/data/zrlog /zrlog/ROOT/attached/重啟tomcat
[root@web01 ~]# `/soft/tomcat/bin/shutdown.sh && /soft/tomcat/bin/startup.sh`注意: 在Nginx做代理時 Nginx代理后端
Nginx頭部信息默認丟棄
Nginx代理后端Tomcat 頭部信息自動攜帶,不管前面任何域名解析到負載 始終攜帶代理文件的頭部信息
Nginx_proxy
[root@lb01 ~]# cat /etc/nginx/conf.d/proxy_zrlog.ahui.com.conf upstream zrlog {server 172.16.1.7:8080;server 172.16.1.8:8080; }server {listen 80;server_name zrlog.ahui.com;location / {proxy_pass http://zrlog; #tomcat啟動的java程序,可以直接通過proxy_pass進行負載均衡include proxy_params;} }為tomcat日志,獲取http的Header信息
...<Host name="zrlog.ahui.org" appBase="/code/zrlog" ? unpackWARs="true" autoDeploy="true"> <Valve className="org.apache.catalina.valves.AccessLogValve" directory="logs"prefix="zrlog_access_log" suffix=".txt"pattern="%h %l %u %t "%r" %s %b %{User-Agent}i %{X-Forwarded-For}i" /> </Host>...Tomcat+Nginx+HTTPS
Tomcat單節點 -–【了解項-安裝PFX格式證書】
修改tomcat配置: server.xml
使用新機器web03演示
[root @nfs ~]# `yum install java -y` [root @nfs ~](https://www.yuque.com/nfs) ~]# mkdir /soft [root @nfs ~](https://www.yuque.com/nfs) ~]# tar xf apache-tomcat-9.0.34.tar.gz -C /soft/ [root @nfs ~](https://www.yuque.com/nfs) ~]# ln -s /soft/apache-tomcat-9.0.34/ /soft/tomcat [root @nfs ~]# cat /soft/tomcat/conf/server.xml修改 localhost
<Host name="aliyun.ahui.com" appBase="webapps"全棧https
| 172.16.1.7 | 172.16.1.8 | 10.0.0.5 |
Tomcat+Nginx+Redis會話保持
多種會話方式:1.ip_hash 2.mysql 3.redis 4.tomcat自帶的cluster session復制 ( 官方建議不要超過4個tomcat節點 )
準備web01 和 web02
1.配置虛擬主機 (所有節點都需要配置)
[root@web02 ~]# vim /soft/tomcat/conf/server.xml<!--session.ahui.org--><Host name="session.ahui.org" appBase="/code/session"unpackWARs="true" autoDeploy="true"></Host>2.創建目錄,編寫代碼(所有節點都需要配置)
[root@web02 ~]# mkdir /code/session/ROOT -p [root@web02 ~]# vi /code/session/ROOT/index.jsp <body><%//HttpSession session = request.getSession(true);System.out.println(session.getCreationTime());out.println("<br> web01/WEB2 SESSION ID:" + session.getId() + "<br>");out.println("Session created time is :" + session.getCreationTime()+ "<br>");%> </body>3.接入負載均衡
[root @lb01 conf.d]# cat >/etc/nginx/conf.d/proxy_session.ahui.com.conf<<'EOF' upstream session {server 172.16.1.7:8080;server 172.16.1.8:8080; }server {listen 80;server_name session.ahui.org;location / {proxy_pass http://session;include proxy_params;} } EOF無會話保持:
[外鏈圖片轉存失敗,源站可能有防盜鏈機制,建議將圖片保存下來直接上傳(img-Yx8tH4DY-1656649697317)(Tomcat 集群部署.assets/image-20210913161153434.png)]
4.接入 TomcatClusterRedisSessionManager
( 參考官方地址: https://github.com/ran-jit/tomcat-cluster-redis-session-manager )
0. [root@web01 ~]# wget https://github.com/ran-jit/tomcat-cluster-redis-session-manager/releases/download/4.0/tomcat-cluster-redis-session-manager.zip1.解壓zip包 [root@web01 ~]# unzip tomcat-cluster-redis-session-manager.zip2.拷貝jars到tomcat的/lib目錄中 [root@web01 ~]# cp tomcat-cluster-redis-session-manager/lib/* /soft/tomcat/lib/3.拷貝conf下的redis.properties文件,到tomcat的conf文件 [root@web01 ~]# cp tomcat-cluster-redis-session-manager/conf/redis-data-cache.properties /soft/tomcat/conf/4.將配置文件中連接redis地址修改為如下地址即可 [root@web01 ~]# vim /soft/tomcat/conf/redis-data-cache.properties redis.hosts=172.16.1.51:63795.添加如下兩行至tomcat/conf/context.xml (添加在</Context> 上一行 ) [root@web01 ~]# vim /soft/tomcat/conf/context.xml <Valve className="tomcat.request.session.redis.SessionHandlerValve" /> <Manager className="tomcat.request.session.redis.SessionManager" />Tomcat+Nginx+Redis+Java
項目地址: https://gitee.com/mail_osc/wangmarket
—> 已編譯: git clone https://gitee.com/zheguabaoshu/tomcat-project-compilation.git
總結
以上是生活随笔為你收集整理的Tomcat 集群部署的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: HarmonyOS开发详解(一)——带你
- 下一篇: texstudio 使用方法_Latex