Apache 2.x+jboss6.1反向 Proxysession共用問題設定,
2016年8月4日,第一次開筆寫部落格園,今天在公司解決了一個問題。
apache+jboss做負載平衡的問題一直困擾了很久。問題描述如下,使用apche做反向 Proxy轉寄給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 這條可以看出,實際上負載平衡器就是一個反向 Proxy,只不過它的代理轉寄地址不是某台具體的伺服器,而是一個 balancer:// 協議: ProxyPass / balancer://mycluster協議地址可以隨便定義。然後,在<Proxy>段中設定該balancer協議的內容即可。 BalancerMember指令可以添加負載平衡組中的真實伺服器位址。
摘抄網上資訊:
配置負載分發
以下配置修改都是在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/