tomcat使用memcached完成集羣



一.安裝memcached

1.windows下安裝memcached

需要到一個網站下載memcached的for win 32版本.在memcached的官方網站我是找不到的.我看了下,提供win版下載的是一個個人網站,老外的.應該是他自己用src編譯的.

下載到只有幾十K大小(我也嚇了跳,還以爲是病毒).安裝後確實能用.我嘗試在本帖提供附件下載.

下載後輸入命令安裝命令:

c:\memcached\memcached.exe -d install

然後再輸入如下命令把其作爲win service常駐啓動:

c:\memcached\memcached.exe -d start

其他詳細的並沒做了,因爲部署在win上只是暫時開發測試用的,最終會部署在linux版本上.

2.linux下安裝memcached

1.下載包

1.1.到http://memcached.org/下載linux下的memcached的安裝包.

1.2.到http://libevent.org/ 下載安裝memcached前比需要的包libevent-2.0.15 我安裝的是這個版本.

2.安裝libevent-2.0.15

如果中間出現報錯,請仔細檢查錯誤信息,按照錯誤信息來配置或者增加相應的庫或者路徑。(網上照搬.中間我只是出現過沒有GCC的情況)

3.安裝memcached

tar zxvf memcached-1.4.2.tar.gz

  cd memcached-1.4.2

  ./configure  --with-libevent=/usr

  make

  make install

如果中間出現報錯,請仔細檢查錯誤信息,按照錯誤信息來配置或者增加相應的庫或者路徑。
安裝完成後會把memcached放到 /usr/local/bin/memcached ,

4.測試是否成功安裝memcached:

# ls -al /usr/local/bin/mem*

成功的話,會輸出一些相關信息。


5.啓動memcached

網上有一個命令很長的方法,可以我啓動後進程是出現了,但就是不監聽11211的端口.繼續尋找終於找到一個可行的了.2個命令如下:

5.1我使用的,可行的命令

memcached -d -m 128 -l localhost -p 11211 -u root  (其中Localhost是指監聽本機器的端口.)

5.2網上很多,但我使用卻失敗的命令

/usr/local/bin/memcached -d -m 10 -u root -l localhost -p 12000 -c 256 -P /tmp/memcached.pid


6.給出memcached啓動命令參數詳解.

-d選項是啓動一個守護進程,

-m是分配給Memcache使用的內存數量,單位是MB,我這裏是10MB,

-u是運行Memcache的用戶,我這裏是root,

-l是監聽的服務器IP地址,如果有多個地址的話,我這裏指定了服務器的IP地址192.168.0.200,

-p是設置Memcache監聽的端口,我這裏設置了12000,最好是1024以上的端口,

-c選項是最大運行的併發連接數,默認是1024,我這裏設置了256,按照你服務器的負載量來設定,

-P是設置保存Memcache的pid文件,我這裏是保存在 /tmp/memcached.pid,

-p 使用的TCP端口。默認爲11211

-m 最大內存大小。默認爲64M

-vv 用very vrebose模式啓動,調試信息和錯誤輸出到控制檯

-d 作爲daemon在後臺啓動

如果要結束Memcache進程,執行:

# kill `cat /tmp/memcached.pid`

或是 通過ps -ef | grep memcached 找到pid ,然後kill

也可以啓動多個守護進程,不過端口不能重複。

# ps -ef | grep memcached

root 28914 1 0 07:27 ? 00:00:00 memcached -d -m 128 -l localhost -p 11211 -u root (啓動ok)

6.測試memcached

#telnet localhost 11211

Trying 127.0.0.1...

Connected to localhost.localdomain (127.0.0.1).




二.調用的包

可從http://code.google.com/p/memcached-session-manager/downloads/list下載所需要的包.

需要注意的是,你只能從該網站下載到 memcached-session-manager-1.5.1.jar  /  memcached-session-manager-tc6-1.5.1.jar  /  msm-javolution-serializer-1.5.1.jar

這3個包,還有2個包分別是 : memcached-2.5.jar  /  javolution-5.5.1.jar這2個包,需要自己另外下載哦.

都是放到tomcat/lib下.


三.環境

本人使用的是tomcat6 + memcached-session-manager,首先是在windows下測試的.以後將部署在Linux環境下


四.TOMCAT配置

網上有好多的版本,甚至在memcached-session-manager的wiki中都是在tomcat的conf/context.xml下配置.

但本人是在server.xml中配置到需要session共享的host中.配置見如下:

  1. <Engine name="Catalina" defaultHost="localhost">  
  2.         <Host name="localhost"    
  3.             appBase="webapps"  
  4.             unpackWARs="true"   
  5.             autoDeploy="true"  
  6.             xmlValidation="false"   
  7.             xmlNamespaceAware="false">  
  8.             <Alias>localhost</Alias>  
  9.             <Context reloadable="false" path="" docBase="/test/" workDir="/test/work" >   
  10.                 <Manager className="de.javakaffee.web.msm.MemcachedBackupSessionManager"      
  11.                     memcachedNodes="n1:localhost:11211"      
  12.                     requestUriIgnorePattern=".*\.(png|gif|jpg|css|js){1}quot;      
  13.                     sessionBackupAsync="false"      
  14.                     sessionBackupTimeout="100"      
  15.                     transcoderFactoryClass="de.javakaffee.web.msm.serializer.javolution.JavolutionTranscoderFactory"      
  16.                     copyCollectionsForSerialization="false"      
  17.                 />  
  18.             </Context>  
  19.         </Host>  
  20. </Engine>  
<Engine name="Catalina" defaultHost="localhost">
		<Host name="localhost"  
			appBase="webapps"
            unpackWARs="true" 
			autoDeploy="true"
            xmlValidation="false" 
			xmlNamespaceAware="false">
			<Alias>localhost</Alias>
			<Context reloadable="false" path="" docBase="/test/" workDir="/test/work" > 
				<Manager className="de.javakaffee.web.msm.MemcachedBackupSessionManager"    
					memcachedNodes="n1:localhost:11211"    
					requestUriIgnorePattern=".*\.(png|gif|jpg|css|js){1}quot;    
					sessionBackupAsync="false"    
					sessionBackupTimeout="100"    
					transcoderFactoryClass="de.javakaffee.web.msm.serializer.javolution.JavolutionTranscoderFactory"    
					copyCollectionsForSerialization="false"    
				/>
			</Context>
		</Host>
</Engine>

五.測試代碼

  1. <%  
  2.     String tmp = (String)session.getAttribute("tmp");  
  3.     if(tmp == null || tmp == ""){  
  4.         session.setAttribute("tmp","i am created in tomcat 2 . my id is : "+session.getId());  
  5.         tmp = (String)session.getAttribute("tmp");  
  6.         out.println(" null now to created value !");  
  7.         out.println("<br/>");  
  8.         out.println(tmp);  
  9.         System.out.println(tmp);  
  10.     }else{  
  11.         out.println(tmp);  
  12.         System.out.println(tmp);  
  13.     }  
  14. %>  
<%
	String tmp = (String)session.getAttribute("tmp");
	if(tmp == null || tmp == ""){
		session.setAttribute("tmp","i am created in tomcat 2 . my id is : "+session.getId());
		tmp = (String)session.getAttribute("tmp");
		out.println(" null now to created value !");
		out.println("<br/>");
		out.println(tmp);
		System.out.println(tmp);
	}else{
		out.println(tmp);
		System.out.println(tmp);
	}
%>

六.測試結果

無論你從哪個tomcat瀏覽該jsp的打印信息(只要不關瀏覽器或者瀏覽器的標籤),獲得的session id都是一樣的,證明是同一個session,並且共享了.

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