天天看點

linux Nginx配置篇:tomcat8+nginx+memcache叢集session共享

前言:受公司目前開發架構影響,使用session儲存使用者資訊,是以做負載均衡時要考慮session共享的問題,否則請求分發到不同伺服器,使用者無法正常使用。開發架構如果不是使用session儲存使用者資訊,可以不考慮這個問題。

1.安裝memcache

1.1.先安裝依賴庫:yum -y install libevent

1.2.因為有memcache的yum安裝源,我這裡直接使用yum安裝,也可去官網下載下傳源碼包編譯安裝。

1.2.1先檢視memcache的安裝源:yum list | grep memcache。如下圖,有memcache的安裝源。

linux Nginx配置篇:tomcat8+nginx+memcache叢集session共享

1.2.2執行yum -y install memcached.x86_64安裝。

linux Nginx配置篇:tomcat8+nginx+memcache叢集session共享

2.tomcat配置

2.1memcache有四種session管理方式,在此我們使用官網推薦的效率最高的一種:kryo。

所需的jar包有:

asm-3.2.jar
kryo-1.04.jar
kryo-serializers-0.11.jar
memcached-session-manager-1.8.1.jar
memcached-session-manager-tc8-1.8.1.jar
minlog-1.2.jar
msm-kryo-serializer-1.8.1.jar
reflectasm-1.01.jar
spymemcached-2.11.1.jar
           

另外,特别注意,因為筆者是tomcat8,是以這裡用的是memcached-session-manager-tc8-1.8.1.jar,tc8表示tomcat8,如果tomcat是其他版本要下載下傳對應版本的jar包,因為筆者當時被這個坑慘了...可以自行百度tomcat8+memcache jar包下載下傳,也可去筆者的網盤下載下傳:http://pan.baidu.com/s/1c2rNZEg。下載下傳完成後将上述的jar包扔到叢集各個tomcat的lib目錄下。

2.2修改叢集各個tomcat的context.xml檔案,加入以下配置項:

<Manager className="de.javakaffee.web.msm.MemcachedBackupSessionManager"
  memcachedNodes="n1:192.168.88.38:11211"
  sticky="false"
  sessionBackupAsync="false"
  lockingMode="auto"
  requestUriIgnorePattern=".*\.(ico|png|gif|jpg|css|js)$"
  transcoderFactoryClass="de.javakaffee.web.msm.serializer.kryo.KryoTranscoderFactory"
/>
           

memcachedNodes:已被監聽的負載均衡的伺服器,多個伺服器可寫成memcachedNodes="n1:192.168.88.38:11211,n2:192.168.88.39:11211",注意這裡的ip和端口要和啟動memcache時監聽的ip和端口一緻。

sticky="false":使用非粘性session,預設為true使用粘性session。

粘性session:将某個使用者的請求交給tomcat叢集中的某一個tomcat,之後該tomcat就負責儲存該使用者的session,如果該tomcat挂掉了,該使用者的session也就消失了。

非粘性session:将使用者請求進行分發,也會複制多份session到不同tomcat,隻要有一個tomcat沒挂掉,該使用者的session就不會消失。.

transcoderFactoryClass:使用的session管理方式,這裡我們寫的是de.javakaffee.web.msm.serializer.kryo.KryoTranscoderFactory,表示使用kryo的管理方式。

3.在叢集的各個伺服器啟動memcache(參照第一節中的memcache安裝方法在各個伺服器安裝好):

memcached -d -m 128 -p 11211 -u root

linux Nginx配置篇:tomcat8+nginx+memcache叢集session共享

memcache啟動參數說明:

-p 指定端口号(預設11211)  
-m 指定最大使用記憶體大小(預設64MB)  
-t 線程數(預設4)  
-l 連接配接的IP位址, 預設是本機,PS:此處按說是可以在一台伺服器上設定連接配接另外一台伺服器ip,但是在測試之後并沒有用,哪位童鞋有結果可以在評論區交流。  
-d start 啟動memcached服務  
-d restart 重起memcached服務  
-d stop|shutdown 關閉正在運作的memcached服務  
-m 最大記憶體使用,機關MB。預設64MB  
-M 記憶體耗盡時傳回錯誤,而不是删除項  
-c 最大同時連接配接數,預設是1024
-f 塊大小增長因子,預設是1.25
-n 最小配置設定空間,key+value+flags預設是48
           

nginx負載均衡配置示例,啟動nginx。

linux Nginx配置篇:tomcat8+nginx+memcache叢集session共享

在叢集的各個伺服器的各個tomcat的con/context.xml配置示例,啟動tomcat。另外需要注意的是,修改了memcache的啟動項後tomcat需要重新開機。

linux Nginx配置篇:tomcat8+nginx+memcache叢集session共享

至此,叢集實作session共享。

以上。

繼續閱讀