tomcat3----進階配置
阿新 • • 發佈:2021-09-08
tomcat進階配置
- session保持
- 排程器
- session sticky 會話粘性
- source ip 源地址雜湊
- Cookice LVS不支援,nginx商業版支援,httpd和haproxy支援
- session sticky 會話粘性
- UpStream server
- session replication cluster 會話複製叢集,多個後端伺服器定義一個叢集,每個節點獲取的session都通過叢集的專用通道送給同一叢集的其他主機,其他主機可以接收到其他任意傳送過來的session並整合到本地session中,因此,對於非常繁忙的後端服務組來講,每個節點每時每刻都在更新大量的session,這樣主機會變的很繁忙,所以不適用特別大規模或任務繁重的場景,但這是一個很好的解決方案(每一個後端伺服器都做成單點,若伺服器單點掛了,那麼則session都會丟失,這樣,使用會話複製叢集,重新排程就可以了)
- session server需要選擇一臺伺服器以進行 session會話保留,共享 session並允許其他後端服務主機可訪問,還需要考慮一些問題,冗餘和擴充套件性,避免單一故障
- session replication cluster 會話複製叢集,多個後端伺服器定義一個叢集,每個節點獲取的session都通過叢集的專用通道送給同一叢集的其他主機,其他主機可以接收到其他任意傳送過來的session並整合到本地session中,因此,對於非常繁忙的後端服務組來講,每個節點每時每刻都在更新大量的session,這樣主機會變的很繁忙,所以不適用特別大規模或任務繁重的場景,但這是一個很好的解決方案(每一個後端伺服器都做成單點,若伺服器單點掛了,那麼則session都會丟失,這樣,使用會話複製叢集,重新排程就可以了)
- 排程器
示例 nginx反向代理 --> tomcata,tomcatb
啟動兩個tomcat容器
docker run -d --name tomcata -v /data/tomcata:/usr/local/tomcat/webapps/ROOT/ tomcat:8.5.70-jdk8
docker run -d --name tomcatb -v /data/tomcatb:/usr/local/tomcat/webapps/ROOT/ tomcat:8.5.70-jdk8
建立兩個tomcat首頁,顯示session資訊
[root@final ~]# cat /data/tomcata/index.jsp
<%@ page language="java" %>
<%@ page import="java.util.*" %>
<html>
<head><title>JSP Test Page</title></head>
<body>
<h1><font color="red">TomcatA.test.com</font></h1>
<table align="centre"border="1" >
<tr>
<td>Session ID</td>
<% session.setAttribute("test.com","test.com"); %>
<td><%=session.getId() %></td></tr>
<tr>
<td>Created on</td>
<td><%=session.getCreationTime() %></td>
</tr>
</table>
</body>
</html>
[root@final ~]# cat /data/tomcatb/index.jsp
<%@ page language="java" %>
<%@ page import="java.util.*" %>
<html>
<head><title>JSP Test Page</title></head>
<body>
<h1><font color="blue">TomcatB.test.com</font></h1>
<table align="centre"border="1">
<tr>
<td>Session ID</td>
<% session.setAttribute("test.com","test.com"); %>
<td><%=session.getId() %></td></tr>
<tr>
<td>Created on</td>
<td><%=session.getCreationTime() %></td>
</tr>
</table>
</body>
</html>
使用nginx反代連線後端兩個tomcat容器
upstream tomcats {
server 172.17.0.2:8080;
server 172.17.0.3:8080;
}
location / {
proxy_pass http://tomcats/;
}
測試訪問
[root@final ~]# while true; do curl -s http://192.168.10.2 | tr '<>/' ' ' | grep -v '^$' | awk '/td/{print $2}' | head -2 ;sleep 1;done
Session
3C808C01CA43BF9AF1902C17F0B87AA8
Session
F910D10922F7CCFE7D04B59291773329
Session
99281DE4F28BC1F8F23413797552593E
Session
F7DD5D2AD540DC0F1FD8FFC3B8B514B5
可以觀察到每次訪問記錄的session都不一樣
示例 httpd反向代理 --> tomcata,tomcatb
檢視模組
[root@final data]# httpd -M | grep -E "lbmethod|proxy"
proxy_module (shared)
lbmethod_bybusyness_module (shared)
lbmethod_byrequests_module (shared)
lbmethod_bytraffic_module (shared)
proxy_ajp_module (shared)
proxy_balancer_module (shared)
proxy_http_module (shared)
配置httpd
[root@final conf.d]# cat http_load_balance.conf
<Proxy balancer://tomcats>
BalancerMember http://172.17.0.2:8080
BalancerMember http://172.17.0.3:8080
ProxySet lbmethod=byrequests #此處定義的是負載均衡演算法,輪詢RR
</Proxy>
<VirtualHost *:80>
ServerName node1.final.com
ProxyRequests Off
ProxyVia On
ProxyPreserveHost On
<Proxy *>
Require all granted
</Proxy>
ProxyPass / balancer://tomcats/
<Location />
Require all granted
</Location>
</VirtualHost>
客戶端測試訪問
while true; do curl -s http://192.168.10.2 | tr '<>/' ' ' | grep -v '^$' | awk '/td/{print $2}' | head -2 ;sleep 1;done
Session
A07D064E71E351A22C4486419ADBEBF9
Session
F99DC7520BE5EAFBDA26624055B24A37
Session
A4C44FE396F1B968B5449A86778A9ACD
Session
9B02F5FDDD477F465F60305A01307796
示例 httpd反向代理做會話前粘性
修改httpd配置檔案
[root@final conf.d]# cat http_load_balance.conf
Header add Set-Cookie "ROUTEID=.%{BALANCER_WORKER_ROUTE}e; path=/" env=BALANCER_ROUTE_CHANGED
<Proxy balancer://tomcats>
BalancerMember http://172.17.0.2:8080 route=tca
BalancerMember http://172.17.0.3:8080 route=tcb
ProxySet lbmethod=byrequests
ProxySet stickysession=ROUTEID
</Proxy>
<VirtualHost *:80>
ServerName node1.final.com
ProxyRequests Off
ProxyVia On
ProxyPreserveHost On
<Proxy *>
Require all granted
</Proxy>
ProxyPass / balancer://tomcats/
<Location />
Require all granted
</Location>
</VirtualHost>
客戶端訪問
使用curl請求
若只設置ROUTEID,頁面不會改變,session會改變
先訪問一次記錄下COOKIE和ROUTEID的值
curl -b "JSESSIONID=70837D83AE4F91F159695CAF2EAE05C5;ROUTEID=.tcb" http://192.168.10.2/ -s | tr '<>/' ' ' | grep -v '^$' | awk '/td/{print $2}' | head -2
示例 httpd使用管理頁面
配置httpd
[root@final conf.d]# cat http_load_balance.conf
Header add Set-Cookie "ROUTEID=.%{BALANCER_WORKER_ROUTE}e; path=/" env=BALANCER_ROUTE_CHANGED
<Proxy balancer://tomcats>
BalancerMember http://172.17.0.2:8080 route=tca
BalancerMember http://172.17.0.3:8080 route=tcb
ProxySet lbmethod=byrequests
ProxySet stickysession=ROUTEID
</Proxy>
<VirtualHost *:80>
ServerName node1.final.com
ProxyRequests Off
ProxyVia On
ProxyPreserveHost On
<Proxy *>
Require all granted
</Proxy>
ProxyPass / balancer://tomcats/
<Location />
Require all granted
</Location>
<Location /manager>
sethandler balancer-manager
proxypass !
Require all granted
#Require ip 127.1
</Location>
</VirtualHost>