使用Memcached實現session共享

實驗需求:使用memcached 實現session共享,實驗拓撲如下:


                           1.1.1.1

                           client  

                             |

                             | 公網接口1.1.1.254

                          nginx反向代理服務器

                             | 內網接口192.168.1.254

------------------------------------------------------------

    |              |              |              | 

 tomcat_A       tomcat_B      memcached_A    memached_B

192.168.1.10   192.168.1.20   192.168.1.30   192.168.1.40        


1.用tomcat軟件部署2臺網站服務器。

1.1安裝jdk 虛擬機

# chmod +x jdk-6u27-linux-i586.bin

# ./jdk-6u27-linux-i586.bin 

# mv jdk1.6.0_27/ /usr/local/jdk

1.2配置tomcat服務運行時使用環境變量

# vim  /etc/bashrc

export JRE_HOME=/usr/local/jdk

export JAVA_BIN=/usr/local/jdk/bin

export PATH=$JRE_HOME/bin:$PATH

export CLASSPATH=.:$JRE_HOME/lib/dt.jar:$JRE_HOME/lib/tools.jar

export JRE_HOME JAVA_BIN PATH CLASSPATH


# source /etc/bashrc


1.3安裝提供tomcat服務的軟件。

# tar -zxvf  apache-tomcat-6.0.32.tar.gz  -C /usr/local/

# cd /usr/local/

# mv apache-tomcat-6.0.32/ tomcat


1.4啓動tomcat服務(默認監聽端口8080)

# ./shutdown.sh

# ./startup.sh


1.5製作tomcat服務器測試頁,並測試訪問

# vim /usr/local/tomcat/webapps/ROOT/test.jsp

<html>

    <body bgcolor="green">      //另一臺將背景green改成red,便於測試時分辨2臺網站服務器

    <center>     

    <%=  request.getSession().getId()  %>    //獲取session_id值     

    <h1>192.168.1.10</h1>                     //另一臺也寫成自己的IP

    </center>

    </body>

</html>




http://192.168.1.10:8080/test.jsp

http://192.168.1.20:8080/test.jsp

確保可以正常訪問


2 部署nginx反向代理服務器

2.1安裝軟件並編輯配置文件

# vim /usr/local/nginx/conf/nginx.conf

http {

   upstream tomcatweb {

            server   192.168.1.10:8080;  

            server   192.168.1.20:8080;

   }

   server   {

       ......

       location   /  {

            .....

            proxy_pass   http://tomcatweb;

       }

    }

}


2.2啓動服務

# ./nginx -t

# ./nginx  


2.3客戶端測試

http://1.1.1.1/test.jsp  刷新頁面

測試結果:交替出現2臺網站服務器的頁面,每次連接session_id會變化


3 部署2臺memcached緩存服務器,提供保存用戶訪問網站時創建的session_id的空間

3.1安裝事件庫程序

# tar -zxvf libevent-2.0.21-stable.tar.gz     

# cd libevent-2.0.21-stable

# ./configure

# make

# make install


3.2指定庫文件位置

# echo /usr/local/lib/ > /etc/ld.so.conf.d/libevent.conf

# ldconfig -v


3.3安裝memcached

# tar -zxvf memcached-1.4.5.tar.gz

# cd memcached-1.4.5

# ./configure

# make

# make install


3.4啓動memcached服務

# /usr/local/bin/memcached -l 192.168.1.30 -u root -m 200 -c 200 -n 10 -f 2 -d -vvv       

選項:

– -p 指定memcached監聽的端口號 默認11211

– -l memcached服務器的ip地址

– -u memcached程序運行時使用的用戶身份 必須 是root用戶

– -m 指定使用本機的多少物理內存 存數據 默認64M

– -c memcached服務的最大鏈接數

– -vvv 顯示詳細信息

– -n chunk size 的最小空間是多少 單位 字節

– -f chunk size大小增長的倍數 默認 1.25倍

– -d 在後臺啓動

 

# netstat -tulnp | grep :11211


4.讓2臺網站服務器把創建的session_id存放到memcached裏。

4.1安裝存儲數據時連接memcached服務器的工具msm(由java語言編寫)

# cp kryo-1.04.jar kryo-serializers-0.9.jar memcached-2.5.jar memcached-session-manager-1.5.1.jar memcached-session-manager-tc6-1.5.1.jar minlog-1.2.jar msm-kryo-serializer-1.5.1.jar reflectasm-1.01.jar /usr/local/tomcat/lib/


4.2編輯配置文件,指定使用的memcached服務器ip

# cd /usr/local/tomcat/conf

# vim context.xml

<Context>

 <Manager className="de.javakaffee.web.msm.MemcachedBackupSessionManager" memcachedNodes="memA:192.168.1.30:11211 memB:192.168.1.40:11211" failoverNodes="memB" requestUrilgnorePattern=".*\(ico|png|gif|jpg|css|js)$" transcoderFactoryClass="de.javakaffee.web.msm.serializer.kryo.KryoTranscoderFactory" /> 

</Context>

啓用mencached_A爲主緩存服務器,mencached_A宕機時啓動mencached_B


4.3重啓網站服務

# ./shutdown.sh

# ./startup.sh


5.測試客戶端訪問能否實現session共享

http://1.1.1.1/test.jsp  刷新

測試結果:交替出現2臺網站服務器的頁面但session_id不變,說明session_id共享成功


測試備份的memcached服務器是否能存儲數據

在192.168.1.30 上停止memcached服務                  

客戶端再次訪問    

http://1.1.1.1/test.jsp 結果和上面相同,則測試成功


發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章