搭建Nginx + Memcached + Tomcat 集羣記錄

零:前言

一、單是從軟件層面作負載,只能單主nginx服務器,服務器掛了,系統就掛了css

二、實現多臺nginx服務器,可採用DNS負載均衡,即同一個域名綁定多個IP(nginx服務器),按順序分發html

三、實現多臺nginx服務器,可採用負載均衡硬件設備,分發到多個IP(nginx服務器前端

四、綜合上述三點java


Session 實現共享的方法分爲多種

對於WEB應用集羣的技術實現而言,最大的難點就是如何能在集羣中的多個節點之間保持數據的一致性,會話(Session)信息是這些數據中最重要的一塊。要實現這一點,大致上有兩種方式,nginx

  • 一種是把全部Session數據放到一臺服務器上或者數據庫中,集羣中的全部節點經過訪問這臺Session服務器來獲取數據;web

  • 另外一種就是在集羣中的全部節點間進行Session數據的同步拷貝,任何一個節點均保存了全部的Session數據。數據庫


Tomcat集羣session同步方案有如下幾種方式:apache

  • 使用tomcat自帶的cluster方式,多個tomcat間自動實時複製session信息,配置起來很簡單。但這個方案的效率比較低,在大併發下表現並很差。原理:http://zyycaesar.iteye.com/blog/296606windows

  • 利用nginx的基於訪問ip的hash路由策略,保證訪問的ip始終被路由到同一個tomcat上,這個配置更簡單。但若是應用是某一個局域網大量用戶同時登陸,這樣負載均衡就沒什麼做用了。瀏覽器

  • 利用nginx插件實現tomcat集羣和session同步,nginx-upstream-jvm-route-0.1.tar.gz,是一個 Nginx 的擴展模塊,用來實現基於 Cookie 的 Session Sticky 的功能,可經過http://code.google.com/p/nginx-upstream-jvm-route/downloads/list獲取。

  • 利用memcached把多個tomcat的session集中管理,前端在利用nginx負載均衡和動靜態資源分離,在兼顧系統水平擴展的同時又能保證較高的性能。


一:環境

Nginx

Memcached(memcached-1.2.6-win32-bin)

Tomcat7


二:Memcached配置

一、 Memcached的安裝

將安裝包memcached-1.2.6-win32-bin解壓到X:/目錄下面,重命名爲memcached。

打開命令提示符,進入X: /memcached的目錄,輸入安裝命令「memcached.exe –d install」,安裝memcached的windows服務,

而後輸入「memcached -d start」,之後memcached將做爲windows的一個服務每次開機時自動啓動。

默認端口:11211。

下面插入介紹一些memcached的經常使用命名,也是最基本的命令,

(1) 查看memcached的服務是否已經啓動:tasklist /fi "imagename eq memcached.exe"

(2) memcached參數使用介紹

-p 監聽的端口
-l 鏈接的IP地址, 默認是本機
-d start 啓動memcached服務
-d restart 重起memcached服務
-d stop|shutdown 關閉正在運行的memcached服務
-d install 安裝memcached服務
-d uninstall 卸載memcached服務
-u 以的身份運行 (僅在以root運行的時候有效)
-m 最大內存使用,單位MB。默認64MB
-M 內存耗盡時返回錯誤,而不是刪除項
-c 最大同時鏈接數,默認是1024
-f 塊大小增加因子,默認是1.25
-n 最小分配空間,key+value+flags默認是48
-h 顯示幫助

例如:C:\memcached\memcached.exe -h


三:tomcat配置

1.添加tomcat

解壓並複製Tomcat,分別爲apache-tomcat-7.0.55-01和apache-tomcat-7.0.55-02


2.添加.所需jar包

以下列表:

memcached-session-manager-1.6.1,

memcached-session-manager-tc7-1.6.1(由於Tomcat版本爲7.0)

javolution-5.4.3.1,

msm-javolution-serializer-1.6.1(準備使用javolution序列化方式)

spymemcached-2.7.3(依賴包)

添加以上jar到tomcat lib中


2.Tomcat的配置安裝

修改server.xml文件,同時添加HTTPS支持和Tomcat雙開的配置

修改文件Tomcat/conf/context.xml,在Context標籤中加入以下代碼:

   <Manager className="de.javakaffee.web.msm.MemcachedBackupSessionManager"
      memcachedNodes="n1:localhost:11211" 
      requestUriIgnorePattern=".*/.(png|gif|jpg|css|js)$"
      sessionBackupAsync="false"
      sessionBackupTimeout="100"
      transcoderFactoryClass="de.javakaffee.web.msm.serializer.javolution.JavolutionTranscoderFactory" 
      copyCollectionsForSerialization="false"/>

3.啓動Tomcat的測試


四:Nginx的安裝和配置

一、Nginx的安裝

將安裝包nginx-1.3.0.zip解壓到X:/目錄

啓動Nginx:進入X:/nginx目錄,執行命令:start nginx.exe,彈出屏會一閃而逝。

接着輸入tasklist /fi "imagename eq nginx.exe",出現以下內容,表示nginx已正常啓動啦!

在瀏覽器輸入http://localhost,能夠看到Nginx的歡迎頁。 

更多Nginx經常使用命令:

中止Nginx:nginx.exe -s stop|quit

重啓Nginx:nginx.exe -s reload

查看Nginx版本:nginx.exe -v


修改文件$NGINX_HOME/conf/nginx.conf。 

#設定負載均衡的服務器列表

 upstream tomcat_server{
    server localhost:18080 weight=1;#第一臺機器
    server localhost:28080 weight=1;#第二臺機器
}
server {
    listen 8080;
    server_name localhost;
    #charset koi8-r;
    #access_log logs/host.access.log main;
    location / {
        root html;
        index index.html index.htm;
        proxy_pass http://tomcat_server;
     }
}

以上部分是須要在nginx.conf中的http {}

proxy_pass表示代理主機

upstream tomcat_server{……}配置中配置了代理主機處理請求的兩個服務。 

上述配置表示:Nginx監聽到http://locahost:8080的請求以後,轉發到代理tomcat_server中的兩個服務中的一個,有它們來處理請求。weight表示被分配到權重,weight值越大,處理請求的機會越多。

至此,Nginx的安裝與配置結束。 


 五:測試

測試代碼放入tomcat1,2下test/index.jsp中,啓動各個服務 

<%@ page language="java" contentType="text/html; charset=UTF-8"  pageEncoding="UTF-8"%>  
<html>  
<body>  
  
SessionID:<%=session.getId()%>  
<BR>  
SessionIP:<%=request.getServerName()%>  
<BR>  
SessionPort:<%=request.getServerPort()%>  
<%  
out.println("apache-tomcat-7.0.55-02");  
%>  
  
<%=(String)session.getAttribute("user")%>  
</body>  
</html>

結果

相關文章
相關標籤/搜索