nginx+memcache+tomcat配置(新手筆記)

nginx+memcache+tomcat 應該是企業級開發中用到的比較多的一套集羣web環境,由於本人是從事Java的學習和開發,所以服務器選擇了tomcat;配置這樣一個環境在我看來首要目的固然是將服務器的壓力分散開,用多臺服務器來處理大用戶的併發,並經過緩存來減小對服務器的請求量,同時一個應用分佈在不一樣服務器上就須要作session共享。大概的結構我想應該是這樣:html

這樣一來請求會被分派到這圖中5個tomcat下的項目去處理,固然有時候服務器須要處理更大的併發量則須要更多的nginx來做爲代理轉發並須要更多的tomcat節點(固然也有牛人能把tomcat配到數千併發量,這樣也不必定須要太多tomcat)java

我將從windows上給你們講個人配置過程,至於在linux上其實差不太多,只是在安裝memcache和nginx上有差別,對於配置來講都同樣。下面簡單來介紹下個人操做步驟(JDK和tomcat部分的安裝省略)linux

1、所需環境和軟件nginx

Tomcat7,下載連接:http://tomcat.apache.org/  web

Nginx是nginx-1.2.8,apache

下載連接:http://nginx.org/en/download.htmlwindows

Memcached是memcached-1.2.6-win32-bin,下載連接:http://code.jellycan.com/files/memcached-1.2.6-win32-bin.zip瀏覽器

其餘所需jar包,以下列表:緩存

memcached-session-manager-1.6.1,memcached-session-manager-tc6-1.6.1(由於Tomcat版本爲6.0)tomcat

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

spymemcached-2.7.3(依賴包),以上jar包在http://code.google.com/p/memcached-session-manager/downloads/list中均可以找到,文檔http://code.google.com/p/memcached-session-manager/wiki/SetupAndConfiguration中詳細介紹了不一樣的服務器版本,不一樣的jar包需求。

2、Tomcat配置

這裏咱們就配置倆tomcat來意思意思。。。。

進入tomcat配置文件context.xml,我設置麼配的(具體爲何這麼配我還真有點說不出123,大體有感受罷了)

也就是紅框是咱們須要加的了,這裏就是配置session共享,經過memcache來保存session信息。

memcacheNode是你有幾個memcache就能夠配幾個節點,我這裏寫了兩個告訴你們若是你有多個須要配置的節點 用空格斷開,前面寫節點名。

固然網上有的是把這部分配到server.xml的Engine節點下,我試了若是不在context下配置個人會報錯,不知道他們還有哪裏和我不同。再就是這裏的memcacheNode的IP,我寫localhost也有問題,必須寫127.0.0.1才能鏈接到memcache的服務。  若是有人發現我配置上的問題能夠幫我一併指出。

而後你們能夠去server.xml下找<Engine>節點,在其中添加屬性 jvmRoute="tomcat n" n就是第n個tomcat你本身寫 後面測試的時候打印sessionId會顯示出來如今用的是那個 tomcat。固然server.xml最重要的配置還不是在這,是你須要配置三個端口保證和其餘的tomat不會衝突,分別在這裏

 

注意tomcat端口默認都是8080 ,你們作開發習慣了這個端口,都把端口配到808*,可是這樣會有問題,好比你要配4個tomcat集羣,一個tomcat 要配置3個端口,都在808*上就勢必有重複,所以不是很好的決策,因此我是這麼定的:分別放在 900*  808*  810*上,而後建議你們在tomcat根目錄建一個文件名叫8081-8100-9006 相似這樣文本文件提示本身當前這個tomcat的端口配置,如今只有倆服務器,不然服務器多了你一個個開配置文件看太麻煩。

配置完了,還有memcache支持的jar,複製到lib下便可,固然版本儘可能對上或者貼近。

 

3、nginx的安裝

載下來的nginx,個人是1.8,解壓完就這樣

雙擊nginx.exe是能夠啓動nginx的,可是你並不能看見什麼反應,由於他在你後臺進程裏跑,打開任務管理器看服務裏面會有nginx的服務開着,就好了。固然我仍是推薦你們用命令模式操做nginx

開啓nginx: nginx

關閉nginx: nginx -s stop

重啓nginx: nginx -s reload

這裏注意nginx的核心配置文件在 conf目錄下,有個nginx.conf文件,這裏是咱們須要配置的地方。

nginx配置文件結構我不全瞭解,我就說我知道的幾個點。

Nginx配置文件主要分爲4部分:main(全局設置)、server(主機設置)、upstream(負載均衡服務器設置)和location

首先server表明了一個虛擬主機,在這個塊中能夠配置主機名和location,這兩個塊也就是咱們要用到的nginx反向代理,將虛擬地址映射到實際的服務器地址。實際的服務器地址咱們配置到一個upstream塊中,那麼既然咱們作了集羣,將大量的請求分派到5個甚至多個tomcat下,那麼請求怎麼訪問它們呢?這裏就有請求分配的策略了。upstream模塊的負載均衡分配方式 我在網上查了有5種:輪詢,權重,ip_hash,url_hash和平均。輪詢比較好理解就是從第一個輪流來訪問;權重就是在配置這個節點的時候就分配給他一個優先級(有點像線程優先級),ip_hash 每一個請求按照其請求IP的hash結果分配,url_hash  按照url的hash結果分配 平均分配就是按照服務器響應時間來分配,響應時間小的先分配。

講到這裏nginx配置的理論就差很少了,那麼來看下配置的細節,下面是個人部分配置:

這裏我將兩臺tomcat加入負載均衡配置中,location指的是server_name後項目名,也就是說咱們訪問http://localhost/tonghang 將會定向到 http://127.0.0.1:8081/tonghanghttp://127.0.0.1:8082/tonghang 上。proxy_pass  指定了代理的目標主機IP,這裏寫的是upstrean塊的地址(我不是很懂暫時這麼說),由upstream中指定有哪些要映射的IP,固然咱們也能夠寫到外面,用不少個proxy_pass來映射。

4、memcache安裝

 windows下安裝memcache就是安裝一個exe文件,linux下安裝可能還須要安裝部分依賴庫,由於我所在的服務器下就帶有memcache,我先在win下配置好後再去linux下直接用的,用起來沒有什麼問題,因此安裝細節就不提了你們能夠去看別的技術文章,win下安裝就是 來到你解壓的memcached.exe所在目錄用命令 memcached.exe -d install 便可。啓動的話就是執行memcached.exe -d start  linux下是memcached -d -uroot  重複開memcache貌似不會出現端口占用的問題應該是它內部作處理了

 

好了,到這裏基本的配置完畢,咱們能夠去兩個tomcat下部署兩個同樣web項目(我這裏叫tonghag),項目下都有一個index.jsp,內容以下:

 <%@ page language="java" contentType="text/html; charset=UTF-8"%>
<html>
<body>
<h2>Hello World!</h2>
<%  
    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);  
    }  
%> 
</body>
</html>

邏輯就是每當發現請求中沒有sessionid就建立session,按道理若是沒有配置memcache的session共享,分別訪問 http://localhost:8081/tonghang  http://lcoalhost:8082/tonghang 會獲得不一樣的sessionID,若是你經過上述的配置sessionID在一個瀏覽器上的訪問都是同樣的。

在測試一下 http://localhost/tonghang 試試看。你會發現也能看當剛纔的界面,這就是咱們作了反向代理的結果,並且你還會發現你的兩臺tomcat的控制檯在挨個輸出日誌,這也就達到了咱們負載均衡的效果,由於我配置了兩臺tomcat並且權重同樣,也就是說訪問的概率差很少,而兩臺tomcat原本就是一臺複製一臺的,因此幾乎是121212的訪問(和輪詢差很少)。因此你們能夠嘗試給其中一臺配置權限高一點,日誌輸出分佈也就明顯了。或者能夠試試其餘的策略。

 

ngxin+tomcat+memcache的負載均衡,反向代理和session共享的相關配置介紹完了,單純這樣用是看不出什麼實際用途的,須要咱們將其和實際項目聯繫起來。在項目訪問量級相對較大的時候就能看出來了。畢竟那麼多企業的項目再用這套架構,也不是徒有虛名嘛。

 

小弟第一次作集羣的配置,其中若是有配置的不對讓我誤打誤撞試出來的,也請指點一下。而且我一直不清楚一個地方就是 我在配置tomcat的context.xml 那個memcacheNode裏面我若是隻配一個節點就會錯,log意思好像是沒法鏈接memcache服務,配倆同樣的就好了。這裏我一直沒明白,有知道怎麼回事兒的身邊給我留個言吧!

相關文章
相關標籤/搜索