1. 程式人生 > >tomcat+nginx+memcached實現session共享

tomcat+nginx+memcached實現session共享

1.配置負載均衡可以參照“負載均衡+session共享\nginx-1.8.1\conf\nginx.conf”檔案,其中:

upstream backend{ 

server 10.10.1.133:8080 ;

server 10.10.123.228:8080 ;

}

這裡是配置兩臺伺服器,別名為backend;

location / {

            #root   html;

            #index  index.html index.htm;

proxy_pass   http://backend;

proxy_set_header Host $host; 

proxy_set_header X-Real-IP      $remote_addr; 

proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for; 

proxy_redirect default ;

        }

這裡是無論是訪問什麼請求,全部轉發到http://backend,其實就是上面配置的兩個伺服器。

訪問nginx的首頁即可啟用負載均衡:http://localhost。

nginx命令,需要先找到nginx的安裝目錄,如我的目錄是在:D:\nginx-1.8.1

所以windows的操作是:

C:\Users\ye>d:

D:\>cd nginx-1.8.1

D:\nginx-1.8.1>start nginx

D:\nginx-1.8.1>nginx -s stop

D:\nginx-1.8.1>start nginx

啟動nginx命令:start nginx

停止nginx:nginx -s stop

重啟nginx:nginx -s reload

nginx -s reload|reopen|stop|quit  #重新載入配置|重啟|停止|退出 nginx

2.配置session共享

(1)安裝memcached-win64-1.4.4-14,解壓到D盤,雙擊即可完成安裝,不要關閉命令視窗,下載地址:memcached-win64-1.4.4-14

(2)將”nginx+tomcat7+memcached所需jar.zip“檔案解壓,將裡面的jar包複製到所有需要負載均衡的tomcat的lib中,其中,這個檔案可以在這裡下載:nginx+tomcat7+memcached所需jar.zip

(3)在所有tomcat的tomcat/conf/server.xml下Context標籤下新增:

<Manager className="de.javakaffee.web.msm.MemcachedBackupSessionManager"

   memcachedNodes="n1:10.10.1.133:11211 n2:10.10.123.228:11211"   

lockingMode="auto"

sticky="false" 

requestUriIgnorePattern= ".*\.(png|gif|jpg|css|js)$"    

sessionBackupAsync= "false"   

sessionBackupTimeout= "100"    

copyCollectionsForSerialization="true"   

transcoderFactoryClass="de.javakaffee.web.msm.serializer.kryo.KryoTranscoderFactory"    

    />

其中n1和n2分別表示站點,只需要設定伺服器ip,埠號是對應伺服器上memcached埠號,預設埠號是11211。

Manager標籤屬性說明

1.className  必須

類名:de.javakaffee.web.msm.MemcachedBackupSessionManager

2.memcachedNodes  必須

memcached節點:此屬性應該包含所有執行的memcached節點或者membase bucket的uri地址,每一個memcached節點的屬性定義格式為<id>:<host>:<port>,

多個節點定義直接使用空格或者逗號分隔,形如:memcachedNodes="n1:app01:11211,n2:app02:11211",如果只有單個的memcached節點,則<id>是可選項,

只需配置<host>:<port>即可,形如:memcachedNodes="localhost:11211"。

如果我們配置的是membase,那麼從1.6.0版本開始,我們可以配置指定一個或者多個membase bucket uris,

形如:http://host1:8091/pools,http://host2:8091/pools。Bucket 名稱和密碼通過屬性username,password來定義。

membase buckets連線需要遵循memcached協議,傳輸資料通過二進位制流方式。

3.failoverNodes 可選項

故障轉移節點:可選項,對非黏性session不可用,屬性必須包含memcached節點叢集的所有ids。節點id之間用空格或者逗號分隔。

4.username 可選項

從1.6.0版開始使用,並且是可選的。用來進行membase bucket或者SASL驗證,密碼可以為空。

5.password 可選項

從1.6.0版開始使用,並且是可選的。用來進行membase bucket或者SASL驗證,密碼可以為空。

6.memcachedProtocol    可選項

定義memcached協議,預設使用text文字,出屬性指明memcached使用的儲存協議。只支援text或者binary。

7.sticky    可選項

定義session方式為黏性或非黏性,預設為true,多個tomcat時需使用非黏性

8.lockingMode    可選項

只有非黏性session才使用,預設值為none

none: 從不對session進行鎖定

all: session將一直被鎖定,知道請求結束

auto: 對於只讀請求,session將不會被鎖定,如果是非只讀請求,則session會被鎖定

uriPattern:<regexp>: 通過正則表示式的方式來對請求uri以及查詢字串進行匹配,只有匹配上的才會被鎖定。

9.requestUriIgnorePattern   可選項

此屬性是那些不能改備份Session的請求的正則表示式。如果像css,javascript,圖片等靜態檔案被同一個Tomcat和同一個應用上下文來提供,

這些請求也會通過memcached-session-manager。但是這些請求在一個http會話中幾乎沒什麼改變,所以他們沒必要觸發Session備份。

所以那些靜態檔案沒必要觸發Session備份,你就可以使用此屬性定義。此屬性必須符合java regex正則規範。

   如:".*\.(png|gif|jpg|css|js)$"  

10.sessionBackupAsync   可選項

指定Session是否應該被非同步儲存到Memcached中。 如果被設定為true,backupThreadCount設定起作用,如果設定false,通過sessionBackupTimeout設定的過期時間起作用。

11.backupThreadCount    可選項

用來非同步儲存Session的執行緒數,(如果sessionBackupAsync="true")。預設值為cup的核心數。

12.sessionBackupTimeout    可選項

設定備份一個Session所用的時間,如果操作超過時間那麼儲存失敗。此屬性只在sessionBackupAsync="false"是起作用。預設100毫秒

13.operationTimeout    可選項

從1.6.0版開始使用, 預設值為1000

14.sessionAttributeFilter    可選項

此屬性是用來控制Session中的那個屬性值儲存到Memcached中的正則表示式。鄭則表示式被用來匹配Session中屬性名稱。

如sessionAttributeFilter="^(userName|sessionHistory)$" 指定了只有"userName"和"sessionHistory"屬性儲存到Memcached中。依賴於選擇的序列化策略。

15.transcoderFactoryClass    可選項

此屬性值是建立序列化和反序列化儲存到Memcached中的Session的編碼轉換器的工廠類名。

這個指定的類必須實現了de.javakaffee.web.msm.TranscoderFactory和提供一個無參的構造方法。例如其他的有效的實現在其他packages/jars中提供

如:msm-kryo-serializer,msm-xstrea-serializer和msm-javolution-serializer.

預設為 de.javakaffee.web.msm.JavaSerializationTranscoderFactory

16.copyCollectionsForSerialization    可選項

預設值為false。詳細解釋參見官網解釋。

17.customConverter    可選項

自己定義特殊的類註冊到kryo自定義轉換器中,實現序列化

18.enableStatistics    可選項

用來指定是否進行統計。 預設值為true。

19.enabled   可選項

指定Session儲存到Memcached中是否可用和是否可以通過JMX進行改變。只用於粘性Session。 預設值為true。

(4)啟動nginx,啟動各個tomcat即可,訪問的時候直接訪問nginx就可以,如:http://127.0.0.1。