程序師世界是廣大編程愛好者互助、分享、學習的平台,程序師世界有你更精彩!
首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫知識
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
 程式師世界 >> 編程語言 >> JAVA編程 >> JAVA綜合教程 >> Apache 2.x+jboss6.1反向代理session共享問題設置,

Apache 2.x+jboss6.1反向代理session共享問題設置,

編輯:JAVA綜合教程

Apache 2.x+jboss6.1反向代理session共享問題設置,


2016年8月4日,第一次開筆寫博客園,今天在公司解決了一個問題。

apache+jboss做負載均衡的問題一直困擾了很久。問題描述如下,使用apche做反向代理轉發給3台jboss 的app,app有session會話。為了跳轉不丟失session會話,需要配置。經過幾天的尋找,大概有兩種方法:

1、jboss上配置session共享

2、apache上將請求轉發至已訪問過的鏈路

 

 

Session處理
另一方面就是多個業務邏輯單元之間的Session處理,處理方式有兩種,一種是Session sticky模式,另外一種是Session共享模式。

 

 

Session處理方式

Session Sticky

Session共享

處理邏輯

把同一個用戶的Session一直發送到同一個邏輯單元處理

所有的後端處理邏輯單元共享Session或者Session更新時通知其它邏輯單元

主要實現方式

指定負載的分發組件(如Apache),把請求中包含特定屬性的請求發到同一個連接,如指定jsessionid一致的請求到同一個請求,或者在負載組件中給每個響應增加一個頭部屬性,指定下次的分發目的地

優勢

本地維護Session,不需要訪問網絡存取或者通知其它處理單元變更

完全的隨機分發,可以根據服務忙閒調整分發策略,高可用性

劣勢

一台服務器宕機後,當前Session斷掉

網絡存取操作等耗時,影響處理效率(根據選用的策略不同造成影響不同)

 

 官方文檔描述:

Examples of a balancer configuration

Before we dive into the technical details, here's an example of how you might use mod_proxy_balancer to provide load balancing between two back-end servers:

<Proxy balancer://mycluster>
BalancerMember http://192.168.1.50:80
BalancerMember http://192.168.1.51:80
</Proxy>
ProxyPass /test balancer://mycluster

Another example of how to provide load balancing with stickyness using mod_headers, even if the back-end server does not set a suitable session cookie:

Header add Set-Cookie "ROUTEID=.%{BALANCER_WORKER_ROUTE}e; path=/" env=BALANCER_ROUTE_CHANGED
<Proxy balancer://mycluster>
BalancerMember http://192.168.1.50:80 route=1
BalancerMember http://192.168.1.51:80 route=2
ProxySet stickysession=ROUTEID
</Proxy>
ProxyPass /test balancer://mycluster

 

 

ProxyRequests Off 這條可以看出,實際上負載均衡器就是一個反向代理,只不過它的代理轉發地址不是某台具體的服務器,而是一個 balancer:// 協議: ProxyPass / balancer://mycluster協議地址可以隨便定義。然後,在<Proxy>段中設置該balancer協議的內容即可。 BalancerMember指令可以添加負載均衡組中的真實服務器地址。

 

blob.png

 

摘抄網上信息:

配置負載分發
以下配置修改都是在Apache的conf/httpd.conf配置文件中完成
1.    修改加載mod proxy需要的模塊
找到配置中被注釋掉的幾行,刪除注釋,使Apache在啟動的時候加載如下模塊
LoadModule proxy_module modules/mod_proxy.so
LoadModule proxy_balancer_module modules/mod_proxy_balancer.so
LoadModule proxy_connect_module modules/mod_proxy_connect.so
LoadModule proxy_http_module modules/mod_proxy_http.so
LoadModule headers_module modules/mod_headers.so
LoadModule status_module modules/mod_status.so
2.    給HTTP請求頭部添加路由標識
直接在loadModule模塊下面增加即可
Header add Set-Cookie "ROUTEID=.%{BALANCER_WORKER_ROUTE}e; path=/" env=BALANCER_ROUTE_CHANGED
3.    配置負載均衡後端的業務邏輯單元處理地址
注意本步驟標紅的需要與上面步驟中的ROUTEID一致。
<Proxy balancer://mycluster>
BalancerMember http://192.168.77.213:9005 route=1
BalancerMember http://192.168.77.213:9004 route=2
BalancerMember http://192.168.77.213:9002 route=3
BalancerMember http://192.168.77.213:9003 route=4
ProxySet stickysession=ROUTEID
</Proxy>
4.    配置mod proxy路由規則
ProxyPass / balancer://mycluster/
注意“/”不要少加,mycluster與上面的後端處理集群的名字一致。這裡的意思是把所有的請求都轉發給上面的集群進行處理
5.    2,3,4步驟的最終配置如下:
Header add Set-Cookie "ROUTEID=.%{BALANCER_WORKER_ROUTE}e; path=/" env=BALANCER_ROUTE_CHANGED
<Proxy balancer://mycluster>
BalancerMember http://192.168.77.213:9005 route=1
BalancerMember http://192.168.77.213:9004 route=2
BalancerMember http://192.168.77.213:9002 route=3
BalancerMember http://192.168.77.213:9003 route=4
ProxySet stickysession=ROUTEID
</Proxy>
ProxyPass / balancer://mycluster/

  1. 上一頁:
  2. 下一頁:
Copyright © 程式師世界 All Rights Reserved