Nginx+Tomcat+Memcache實現負載均衡及Session共享


 

第一部分 環境介紹

部署環境:

Host1:Nginx、Memcached、Tomcat1

Host2:Tomcat2

Tomcat_version:8.0.38

 

第二部分 Nginx+Tomcat實現負載均衡

1、nginx及tomcat的安裝省略

2、nginx負載均衡配置:

http標簽中定義tomcat集群:

upstream tomcat_server {
        server 101.200.229.38:8080;
        server 101.200.162.214:8080;
        }

server中設置代理,將請求轉發給后端tomcat集群處理:

    server {
        listen  80;
        server_name     www.xxx.com;
        location / {
            proxy_pass http://tomcat_server;
            proxy_set_header Host $host;
            proxy_set_header X-Real-IP $remote_addr;
            proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
        }
    }

關於nginx負載均衡的策略,有以下幾種方式:

2.1 ip_hash:

根據客戶端地址,同一個ip地址分配給同一台后段服務器處理,這樣可以解決session的問題。但是如果該后端服務器宕掉,則session會失效。

缺點:局域網內的用戶使用的是同一個公網IP,這對於ip_hash來說,會被認為是同一個客戶端,因此總是會將這個公網ip的請求交給同一個后端服務器來處理,因此起不到負載均衡的作用。

2.2 輪詢:

每一個請求,按照時間順序,逐一分配給后端不同的服務器。

缺點:需要對后端服務器做session共享。

2.3 權重:

每個請求,根據后端服務器的權重值來轉發。權重越大,表明該服務器處理能力相對越高。主要用於后端服務器性能不同的情況。

 

第三部分 利用MSM框架實現session共享

Github項目地址:https://github.com/magro/memcached-session-manager

1、msm框架主要使用緩存(如memcache、redis)來存儲session信息,后端服務器都可以從該緩存中讀寫session。

2、tomcat序列化(Serializable)策略介紹:

序列化是指將對象以字符串形式在網絡上傳輸、存儲、讀取的過程。

java有以下幾種序列化框架:

kryo-serializer

javolution-serializer

xstream-serializer

flexjson-serializer

每種序列化框架需要的依賴jar包不同,本例使用javolution框架

3、准備需要的jar包:

Github上提供了下載鏈接:https://github.com/magro/memcached-session-manager/wiki/SetupAndConfiguration

本例需要的jar包及版本如下:

asm-5.1.jar

minlog-1.3.0.jar

javolution-5.5.1.jar

reflectasm-1.11.3.jar

msm-javolution-serializer-1.9.5.jar

memcached-session-manager-1.9.5.jar

memcached-session-manager-tc8-1.9.5.jar

 

注意:對各jar的版本兼容性要求極高!

將以上jar包放在tomcat/lib/目錄下。

4、安裝memcached,啟動memcached:

/usr/local/memcached/bin/memcached -m 512 -d -u memcache -p 11011 -c 1024

-m表示分配內存大小

-d表示后台運行

-u表示以某一用戶運行

-p表示監聽的端口號

-c表示接受的連接數

tomcat/conf/context.xml配置:

<Context>標簽中添加如下內容:

<Manager className="de.javakaffee.web.msm.MemcachedBackupSessionManager"
        memcachedNodes="n1:127.0.0.1:11011"
        sticky="false"
        sessionBackupAsync="false"
        failoverNodes=""
        sessionBackupTimeout="100000"
        lockingMode="uriPattern:/path1|/path2"
        requestUriIgnorePattern=".*\.(ico|png|gif|jpg|css|js)$"
        transcoderFactoryClass="de.javakaffee.web.msm.serializer.javolution.JavolutionTranscoderFactory"/>

以上配置后,重啟tomcat即可。

 

 

參考:http://blog.csdn.net/remote_roamer/article/details/51133790

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM