1. 程式人生 > 其它 >Tomcat多例項和負載均衡

Tomcat多例項和負載均衡

一、Tomcat多例項

1.1 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 source /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 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 6.啟動各 tomcat 中的 /bin/startup.sh /usr/local/tomcat/tomcat1/bin/startup.sh /usr/local/tomcat/tomcat2/bin/startup.sh netstat -natp | grep java 7.瀏覽器訪問測試
http://192.168.80.10:8080
http://192.168.80.10:8081 1.2 Tomcat多例項的具體實驗步驟(實操) 第一步:放入安裝關閉防火牆和selinux 第二步:安裝JDK並設定環境變數 1)安裝JKD 2)編寫java指令碼設定JDK環境變數 3)執行指令碼檔案,然後檢視jdk版本 第三步:安裝tomcat 1)解壓縮tomcat 2)建立tomcat多例項的目錄,並移動複製檔案 第四步:配置tomcat環境變數 1)編寫指令碼 執行指令碼檔案 第五步:修改 tomcat2 中的 server.xml 檔案,要求各 tomcat 例項配置不能有重複的埠號 1)修改主配置檔案,修改Server prot,預設為8005 -> 修改為8006 2)修改Connector port,HTTP/1.1 預設為8080 -> 修改為8081 3)修改Connector port AJP/1.3,預設為8009 -> 修改為8010 第六步:修改各 tomcat 例項中的 startup.sh 和 shutdown.sh 檔案,新增 tomcat 環境變數 1)修改tomcat1的startup.sh 2)修改tomcat1的shutdown.sh 3)修改tomcat2的startup.sh 4)修改tomcat2的shutdown.sh 第七步:啟動各 tomcat 中的 /bin/startup.sh 第八步:瀏覽器中訪問測試

二、Nginx+Tomcat負載均衡、動靜分離

2.1 Nginx+Tomcat負載均衡、動靜分離的步驟(理論) Nginx 伺服器:192.168.153.50:80 Tomcat伺服器1:192.168.153.60:8080 Tomcat伺服器2:192.168.153.40:8080 192.168.153.40:8081 1.部署Nginx 負載均衡器 systemctl stop firewalld setenforce 0 yum -y install pcre-devel zlib-devel openssl-devel gcc gcc-c++ make useradd -M -s /sbin/nologin nginx cd /opt tar zxvf nginx-1.12.0.tar.gz -C /opt/ cd nginx-1.12.0/ ./configure --prefix=/usr/local/nginx --user=nginx --group=nginx --with-file-aio --with-http_stub_status_module --with-http_gzip_static_module --with-http_flv_module --with-stream make && make install ln -s /usr/local/nginx/sbin/nginx /usr/local/sbin/ vim /lib/systemd/system/nginx.service [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 chmod 754 /lib/systemd/system/nginx.service systemctl start nginx.service systemctl enable nginx.service 2.部署2臺Tomcat 應用伺服器 systemctl stop firewalld setenforce 0 tar zxvf jdk-8u91-linux-x64.tar.gz -C /usr/local/ 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_HOME/bin:$PATH source /etc/profile tar zxvf apache-tomcat-8.5.16.tar.gz mv /opt/apache-tomcat-8.5.16/ /usr/local/tomcat /usr/local/tomcat/bin/shutdown.sh /usr/local/tomcat/bin/startup.sh netstat -ntap | grep 8080 3.動靜分離配置 (1)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,http://www.test1.com");%> </body> </html> vim /usr/local/tomcat/conf/server.xml <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 (2)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,http://www.test2.com");%> </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,http://www.test3.com");%> </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 (3)Nginx server 配置 #準備靜態頁面和靜態圖片 echo '<html><body><h1>這是靜態頁面</h1></body></html>' > /usr/local/nginx/html/index.html mkdir /usr/local/nginx/html/img cp /root/game.jpg /usr/local/nginx/html/img vim /usr/local/nginx/conf/nginx.conf ...... http { ...... #gzip on; #配置負載均衡的伺服器列表,weight引數表示權重,權重越高,被分配到的概率越大 upstream tomcat_server { server 192.168.153.60:8080 weight=1; server 192.168.153.40:8080 weight=1; server 192.168.153.40: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 1d; } location / { root html; index index.html index.htm; } ...... } ...... } 4.測試效果 測試靜態頁面效果 瀏覽器訪問 http://192.168.80.10/ 瀏覽器訪問 http://192.168.80.10/game.jpg 測試負載均衡效果,不斷重新整理瀏覽器測試 瀏覽器訪問 http://192.168.80.10/index.jsp 2.2 Nginx+Tomcat負載均衡、動靜分離的具體實驗步驟(實操) 第一步:準備好Nginx伺服器(192.168.153.50),具體步驟參考:網際網路最受歡迎的開源Web伺服器軟體——Nginx的搭建 第二步:準備好tomcat伺服器(192.168.153.60:8080),具體步驟參考:必須要掌握的開源Web應用伺服器—Tomcat服務部署和優化 第三步:準備好tomcat伺服器的兩個例項(192.168.153.40:8080和192.168.153.40:8081),具體步驟參考本文第一段 第四步:動靜分離Tomcat1 server 配置 1)配置Tomcat1的動態網頁顯示內容 2)新增新的host內容 3)重啟服務 第五步:Tomcat2 server 配置(例項一) 1)建立Tomcat例項1和Tomcat例項2的網頁測試目錄test和測試網頁檔案 2)Tomcat1主配置刪除前面的 HOST 配置,新增新的HOST配置 3)重啟服務 第五步:Tomcat2 server 配置(例項二) 1)建立Tomcat例項2的測試網頁檔案 2)Tomcat2主配置刪除前面的 HOST 配置,新增新的HOST配置 3)重啟服務 第六步:Nginx server 配置(192.168.153.50) 1)準備網頁顯示相關內容 2)修改配置 3)新增新的HOST 4)重新服務 第七步:瀏覽器中進行測試,動態頁面測試進行不斷重新整理即可 測試結果一:靜態頁面 測試結果一:圖片 補充: 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。 ●fair(第三方)負載均衡模式: 按後端伺服器的響應時間來分配請求,響應時間短的優先分配。 ●url_hash(第三方)負載均衡模式: 和ip_hash演算法類似,是對每個請求按url的hash結果分配,使每個URL定向到一個同 一個後端伺服器,但是也會造成分配不均的問題,這種模式後端伺服器為快取時比較好 Nginx 四層代理配置: 和http同等級:所以一般只在http上面一段設定, stream { log_format main '$remote_addr $upstream_addr - [$time_local] $status $upstream_bytes_sent'; access_log /var/log/nginx/k8s-access.log main; upstream appserver{ server 192.168.80.100:8080 weight=1; server 192.168.80.101:8080 weight=1; server 192.168.80.101:8081 weight=1; } server { listen 8080; proxy_pass appserver; } } http { ...... 注:配置4層代理,記得在Nginx中新增 --with-stream 模組