1. 程式人生 > >linux Nginx配置篇:tomcat8+nginx+memcache叢集session共享

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的安裝源。


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


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


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。


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


至此,叢集實現session共享。

以上。