日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

httpd反代 + tomcat cluster + redis会话保持

發布時間:2025/3/20 编程问答 31 豆豆
生活随笔 收集整理的這篇文章主要介紹了 httpd反代 + tomcat cluster + redis会话保持 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

版本說明:

httpd版本:2.4.6

tomcat版本:7.0.69

dedis版本:3.2.3

操作系統版本:CentOS Linux release 7.3.1611


拓撲結構:

? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ?tomcat-A/192.168.1.106 ? ? ? ?

客戶端------>httpd反向代理 -------> ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ----- > redis會話保持服務器

? ? ? ? ? ? ? ? ? ? ? 192.168.1.101 ? ? ? ? ? ? ? tomcat-B/192.168.1.107 ? ? ? ? ? ? ? ? ?192.168.1.100

?

httpd反向代理:

安裝httpd服務

yum?-y?install??httpd

httpd實現反向代理需要三個modules的支持:

mod_proxy.so? mod_proxy_http.so? mod_proxy_balancer.so

編輯proxy配置

cat??/etc/httpd/conf.d/tomcat-proxy.conf <proxy?balancer://tcsrvs>balancermember?http://192.168.1.106:8080balancermember?http://192.168.1.107:8080proxyset?lbmethod=byrequests???#調度方式,根據請求調度,類似于輪詢 </proxy><virtualhost?*:80>servername?lb.tomcat.comproxyvia?onproxyrequests?offproxypreservehost?on<proxy?*>require?all?granted</proxy>proxypass?/?balancer://tcsrvs/proxypa***everse?/?balancer://tcsrvs/<location?/>require?all?granted</location> </virtualhost>


tomcat服務器配置:

安裝對應的軟件包

java-1.8.0-openjdk? tomcat?? tomcat-lib? tomcat-admin-webapps? tomcat-webapps tomcat-docs-webapp

準備測試文件

mkdir?/usr/share/tomcat/webapps/test/tomcat-A: cat?/usr/share/tomcat/webapps/test/index.jsp???????????????????????????????????????????????????????<%@?page?language="java"?%> <html> <head><title>TomcatA</title></head> <body> <h1><font?color="blue">TomcatA.com</font></h1> <table?align="centre"?border="1"> <tr> <td>Session?ID</td> <%?session.setAttribute("tomcatA.com","tomcatA.com");?%> <td><%=?session.getId()?%></td> </tr> <tr> <td>Created?on</td> <td><%=?session.getCreationTime()?%></td> </tr> </table> </body> </html>tomcat-B: cat?/usr/share/tomcat/webapps/test/index.jsp?????? <%@?page?language="java"?%> <html> <head><title>TomcatB</title></head> <body> <h1><font?color="red">TomcatB.com</font></h1> <table?align="centre"?border="1"> <tr> <td>Session?ID</td> <%?session.setAttribute("tomcatB.com","tomcatB.com");?%> <td><%=?session.getId()?%></td> </tr> <tr> <td>Created?on</td> <td><%=?session.getCreationTime()?%></td> </tr> </table> </body> </html>

然后啟動tomcat服務

systemctl??start?tomcat.service

此時在瀏覽器測試http://192.168.1.101/test/

以上只是完成了httpd調度后端tomcat主機的需求


當客戶端訪問時,不希望會話信息改變,試想一下,你在電商網站下了單了,然后刷新頁面調度器把你的請求調度到另一臺機器上,下的單沒了,你作何感受?所以,為了避免這種現象的發生,我們通過設置cookie信息,來綁定會話


httpd服務器配置:

cat?tomcat-proxy.conf??header?add?set-cookie?"ROUTEID=.%{BALANCER_WORKER_ROUTE}e;?path=/"?env=BALANCER_ROUTE_CHANGED?#設置cookie信息 <proxy?balancer://tcsrvs>balancermember?http://192.168.1.106:8080?route=tomcatA?loadfactor=1balancermember?http://192.168.1.107:8080?route=tomcatB?loadfactor=1proxyset?lbmethod=byrequestsproxyset?stickysession=ROUTEID???#基于會話粘性來設置cookie </proxy> #route與后端tomcat的jvmRoute對應 <virtualhost?*:80>servername?lb.tomcat.comproxyvia?onproxyrequests?offproxypreservehost?on<proxy?*>require?all?granted</proxy>proxypass?/?balancer://tcsrvs/proxypa***everse?/?balancer://tcsrvs/<location?/>require?all?granted</location> </virtualhost>

tomcat主機配置:

vim?server.xml? <Engine?name="Catalina"?defaultHost="localhost"?jvmRoute="tomcatA"> #修改tomcat主機,jvmRoute是支持負載均衡的

在tomcatB主機也要做類似的修改

完成上述內容就能夠實現基于cookie的會話粘性了,在瀏覽器測試http://192.168.1.101/test/就只會調到同一臺主機,當此主機故障會調度到另一臺主機


上述基于cookie的會話粘性存在一個問題,即客戶端基于cookie訪問后端服務器A,如果A主機故障,httpd會重新調度到B主機上,但是B上沒有之前的會話信息,所以客戶端瀏覽記錄、下單情況等信息就消失了。

可以使用tomcat集群加單獨的緩存服務器redis解決上述問題,tomcat集群解決主機單點故障問題,將會話信息單獨存放在緩存服務器上而不是tomcat主機

,不過redis為了避免單點問題也要做高可用,這里我們只要能實現會話緩存功能即可。只有高可用大家有興趣可以自己研究


配置session server的話就不用cookie信息,把httpd配置中的cookie配置刪除

?vim?tomcat-proxy.conf?header?add?set-cookie?"ROUTEID=.%{BALANCER_WORKER_ROUTE}e;?path=/"?env=BALANCER_ROUTE_CHANGEDproxyset?stickysession=ROUTEID#將上述兩行刪掉或者注釋,然后重啟服務

tomcat主機配置集群:

cat?server.xml?? #在Engine字段下配置下述內容 <Cluster?className="org.apache.catalina.ha.tcp.SimpleTcpCluster"?channelSendOptions="8"><Manager?className="org.apache.catalina.ha.session.DeltaManager"expireSessionsOnShutdown="false"?notifyListenersOnReplication="true"/><Channel?className="org.apache.catalina.tribes.group.GroupChannel"><Membership?className="org.apache.catalina.tribes.membership.McastService"address="228.0.0.4"?port="45564"?frequency="500"?dropTime="3000"/><Receiver?className="org.apache.catalina.tribes.transport.nio.NioReceiver"address="auto"?port="4000"?autoBind="100"?selectorTimeout="5000"?maxThreads="6"/><Sender?className="org.apache.catalina.tribes.transport.ReplicationTransmitter"><Transport?className="org.apache.catalina.tribes.transport.nio.PooledParallelSender"/></Sender><Interceptor?className="org.apache.catalina.tribes.group.interceptors.TcpFailureDetector"/><Interceptor?className="org.apache.catalina.tribes.group.interceptors.MessageDispatch15Interceptor"/></Channel><Valve?className="org.apache.catalina.ha.tcp.ReplicationValve"?filter=""/><Valve?className="org.apache.catalina.ha.session.JvmRouteBinderValve"/><Deployer?className="org.apache.catalina.ha.deploy.FarmWarDeployer"?tempDir="/tmp/war-temp/"deployDir="/tmp/war-deploy/"?watchDir="/tmp/war-listen/"?watchEnabled="false"/><ClusterListener?className="org.apache.catalina.ha.session.JvmRouteSessionIDBinderListener"?/><ClusterListener?className="org.apache.catalina.ha.session.ClusterSessionListener"?/></Cluster>

以上內容很多,可以直接復制,不用做任何修改,兩臺主機都要配置

參考連接http://tomcat.apache.org/tomcat-7.0-doc/cluster-howto.html?

注意官網模板配置中有兩處錯誤:

?<ClusterListener?className="org.apache.catalina.ha.session.JvmRouteSessionIDBinderListener"?/><ClusterListener?className="org.apache.catalina.ha.session.ClusterSessionListener"?/>#官網中此處末尾都沒有加結束符?/

然后修改web.xml

cat?web.cml <distributable/>? #此處指明tomcat的分布式集群

安裝redis,并設置

yum?-y?install?redis? vim?/etc/redis.conf bind?0.0.0.0 #指定監聽所有地址,默認監聽端口是tcp6379

然后啟動redis服務

接著配置tomcat主機,本處以其中一臺為例,另一臺也要按此方式配置

cat?context.xml???#編輯如下內容<Valve?className="com.orangefunction.tomcat.redissessions.RedisSessionHandlerValve"?/><Manager?className="com.orangefunction.tomcat.redissessions.RedisSessionManager"host="192.168.1.100"port="6379"database="0"maxInactiveInterval="60"?/> #192.168.1.100是redis的地址

準備jar包,三個jar包,其下載地址如下

https://github.com/izerui/tomcat-redis-session-manager.git

然后將這三個jar包,放到tomcat的庫目錄中,即/usr/share/tomcat/lib/?

重啟tomcat服務

此時打開瀏覽器測試http://192.168.1.101/test/,會發現sessionID不變,但調度的后端主機改變了


總結:

redis只修改監聽地址即可,其他不用修改任何配置;

httpd只是啟動反代的作用,關鍵是配置對后端主機的調度;

tomcat集群需修改server.xml和web.xml文件,配合redis緩存還需配置context.xml和準備jar包


結束

轉載于:https://blog.51cto.com/panpangao/2046129

總結

以上是生活随笔為你收集整理的httpd反代 + tomcat cluster + redis会话保持的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。