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

来源:http://www.cnblogs.com/marwait2/archive/2016/08/04/5738566.html
-Advertisement-
Play Games

2016年8月4日,第一次開筆寫博客園,今天在公司解決了一個問題。 apache+jboss做負載均衡的問題一直困擾了很久。問題描述如下,使用apche做反向代理轉發給3台jboss 的app,app有session會話。為了跳轉不丟失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一致的請求到同一個請求,或者在負載組件中給每個響應增加一個頭部屬性,指定下次的分發目的地

  1. 各自維護Session,當請求處理結束後,通知其它組件單元更新Session,包括非同步和同步模式
  2. 統一維護Session,如把Session放在memcached或者共用文件系統中,可以在容器級別或者應用級別做這個事情
  3. 利用cache server

優勢

本地維護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/


您的分享是我們最大的動力!

-Advertisement-
Play Games
更多相關文章
  • 原文:http://www.cnblogs.com/san-fu-su/p/5737984.html C裡面沒有垃圾回收機制,有時候你申請了動態記憶體卻忘記釋放,這就尷尬了(你的程式扮演了強盜角色,有借有還才是好孩子)。當你想找出記憶體泄露的地方時,有的投入海量的代碼中,頭痛不已。還好GNU C庫提供了 ...
  • 最近在做統計錢的計算時遇到的一個需求,需要將一個大類別下的每一種錢進行特定的運算然後獲得六年的錢,最後將這些錢按照年份進行彙總,獲得總得大類型的六年的錢,在這個過程中採用了這種方法,每次算得錢放在map中,然後將map進行合併,寫篇隨筆mark下。 public class CombineMap { ...
  • Obstack介紹 Obstack初始化 在Obstack中申請對象 釋放對象 申請growing object 獲取Obstack狀態 數據對齊 以下是來自wiki對obstack的介紹: Obstack是C標準庫裡面對記憶體管理的GNU擴展(實際上就是GNU C library了)。Obstack ...
  • http://user.qzone.qq.com/1282179846/blog/1470248763 引入一個簡單的例子: 1/關鍵字extends表示繼承。表明正在構造一個新類派生於一個已經存在的類。已經存在的類稱為超類/基類/或者父類;新類稱為子類/派生類/或者孩子類。 子類擁有的功能比超類更 ...
  • I have a simple test module: print("fish")print("sticks")It runs pretty fast as expected, wether i use Run as or Debugg as does not matter. But as soo ...
  • 遞歸測試 ...
  • 本文是java學習隨手的筆記,分享非大家,吾本電腦專業大學僧一枚,參加研究生考試,因技術不過關,覆試pass了我,於是我來到一家菜鳥公司,拿著微薄的工資,吃著饅頭喝著涼水,苦練技術,因為相信技術可以成就夢想,於是日夜勤奮,堅持不懈,相信通過自己的努力,可以學有所長。造福一方,哈哈。 ...
  • myPHP框架 採用的是MVC 思想,應用純面向對象及項目單一入口,實現的一個自定義的框架。(自己興趣的練習) 一、項目單一入口 入口文件 myphp\index.php前臺 一個網站所有的請求都請求一個文件(入口文件)index.php\admin.php。入口很簡單,用於定義一個訪問的許可權,引入 ...
一周排行
    -Advertisement-
    Play Games
  • 移動開發(一):使用.NET MAUI開發第一個安卓APP 對於工作多年的C#程式員來說,近來想嘗試開發一款安卓APP,考慮了很久最終選擇使用.NET MAUI這個微軟官方的框架來嘗試體驗開發安卓APP,畢竟是使用Visual Studio開發工具,使用起來也比較的順手,結合微軟官方的教程進行了安卓 ...
  • 前言 QuestPDF 是一個開源 .NET 庫,用於生成 PDF 文檔。使用了C# Fluent API方式可簡化開發、減少錯誤並提高工作效率。利用它可以輕鬆生成 PDF 報告、發票、導出文件等。 項目介紹 QuestPDF 是一個革命性的開源 .NET 庫,它徹底改變了我們生成 PDF 文檔的方 ...
  • 項目地址 項目後端地址: https://github.com/ZyPLJ/ZYTteeHole 項目前端頁面地址: ZyPLJ/TreeHoleVue (github.com) https://github.com/ZyPLJ/TreeHoleVue 目前項目測試訪問地址: http://tree ...
  • 話不多說,直接開乾 一.下載 1.官方鏈接下載: https://www.microsoft.com/zh-cn/sql-server/sql-server-downloads 2.在下載目錄中找到下麵這個小的安裝包 SQL2022-SSEI-Dev.exe,運行開始下載SQL server; 二. ...
  • 前言 隨著物聯網(IoT)技術的迅猛發展,MQTT(消息隊列遙測傳輸)協議憑藉其輕量級和高效性,已成為眾多物聯網應用的首選通信標準。 MQTTnet 作為一個高性能的 .NET 開源庫,為 .NET 平臺上的 MQTT 客戶端與伺服器開發提供了強大的支持。 本文將全面介紹 MQTTnet 的核心功能 ...
  • Serilog支持多種接收器用於日誌存儲,增強器用於添加屬性,LogContext管理動態屬性,支持多種輸出格式包括純文本、JSON及ExpressionTemplate。還提供了自定義格式化選項,適用於不同需求。 ...
  • 目錄簡介獲取 HTML 文檔解析 HTML 文檔測試參考文章 簡介 動態內容網站使用 JavaScript 腳本動態檢索和渲染數據,爬取信息時需要模擬瀏覽器行為,否則獲取到的源碼基本是空的。 本文使用的爬取步驟如下: 使用 Selenium 獲取渲染後的 HTML 文檔 使用 HtmlAgility ...
  • 1.前言 什麼是熱更新 游戲或者軟體更新時,無需重新下載客戶端進行安裝,而是在應用程式啟動的情況下,在內部進行資源或者代碼更新 Unity目前常用熱更新解決方案 HybridCLR,Xlua,ILRuntime等 Unity目前常用資源管理解決方案 AssetBundles,Addressable, ...
  • 本文章主要是在C# ASP.NET Core Web API框架實現向手機發送驗證碼簡訊功能。這裡我選擇是一個互億無線簡訊驗證碼平臺,其實像阿裡雲,騰訊雲上面也可以。 首先我們先去 互億無線 https://www.ihuyi.com/api/sms.html 去註冊一個賬號 註冊完成賬號後,它會送 ...
  • 通過以下方式可以高效,並保證數據同步的可靠性 1.API設計 使用RESTful設計,確保API端點明確,並使用適當的HTTP方法(如POST用於創建,PUT用於更新)。 設計清晰的請求和響應模型,以確保客戶端能夠理解預期格式。 2.數據驗證 在伺服器端進行嚴格的數據驗證,確保接收到的數據符合預期格 ...