天天看點

apache+3tomcat+jk+memcached叢集環境搭建1. 所需軟體包2. 安裝過程3. 測試

注意本文不讨論原理,隻講述具體的搭建過程,而且步驟都經過了整理,否則過程可能會出現其他異常,請自行google。apache與tomcat整合的方式除了jk之外,使用apache自帶的mod_ajp_proxy子產品也可以很友善的完成。

先來看一下架構圖:

apache+3tomcat+jk+memcached叢集環境搭建1. 所需軟體包2. 安裝過程3. 測試

屬于正式環境中原session複制方案的改進。

下載下傳将jrockit二進制安裝檔案,賦予可執行權限

可不必為整個linux環境設定<code>java_home="/apps/test/java/jrrt-3.1.2-1.6.0"</code>,在tomcat中指定即可。

因為<code>tomcat-native</code>依賴于apr,是以這裡先直接從 httpd-2.2.26/srclib 目錄下安裝apache自帶的<code>apr</code>和<code>apr-util</code>。

建議将srclib下的<code>pcre</code>也裝上,主要是考慮後面轉發請求時可能要使用位址rewrite,需要正則文法的支援。預設centos6.x已經安裝了這個庫。

安裝apache:

解壓apache-tomcat-6.0.32.tar.gz拷貝至/app/test/tomcat0,不建議使用root使用者管理tomcat.

配置tomcat:

tomcat預設參數是為開發環境制定,而非适合生産環境,尤其是記憶體和線程的配置,預設都很低,容易成為性能瓶頸。下面是一些配置示例,需要根據實際需要更改。

bin目錄下建立的可執行檔案<code>setenv.sh</code>會由tomcat自動調用。上面的<code>jmxremote.authenticate</code>在正式環境中請務必設為true并設定使用者名/密碼,減少安全隐患,或者注釋掉<code>catalina_opts</code>。(有時候出于性能調優的目的,才需要設定jmx)。對于具體的連接配接協定有不同的優化屬性,參考如下:

對http:

對ajp:

此時可以看到在<code>/apps/test/apache2/modules</code>下有<code>mod_jk.so</code>檔案,用于連接配接apache與tomcat。

建立配置檔案<code>httpd-jk.conf</code>:

建立工作檔案<code>workers.properties</code>:

以上是3個tomcat的做負載均衡的情況,負載因子<code>lbfactor</code>都為1,session為sticky模式,apache與tomcat連接配接的協定采用ajp/1.3,同一台伺服器上通過端口來區分tomcat0/tomcat1/tomcat2。

在<code>tomcat0/conf/server.xml</code>中加入<code>jvmroute</code>屬性,這個屬性與上面的<code>workers.properties</code>的worker相同:

設定測試應用的通路路徑,在<code>tomcat0/conf/server.xml</code>的<code>&lt;host&gt;</code>節點下添加如下:

為了看到負載均衡的效果,在<code>/apps/test/testapp/test</code>目錄下建立測試頁面test.jsp:

到這裡還差一步就可以看到叢集的效果,那就是3個tomcat之間session同步的問題。可以通過打開<code>&lt;engine&gt;</code>節點下的<code>&lt;cluster&gt;</code>标簽的注釋來簡單的實作session複制:

然後在<code>tomcat0/conf/web.xml</code>的<code>&lt;webapp&gt;</code>根節點下加入<code>&lt;distributable /&gt;</code>

複制tomcat0到tomcat1、tomcat2,修改 的端口避免沖突,修改對應的jvmroute

啟動apache和3個tomcat,就可以看到效果。但這裡我們使用<code>memcached-session-manager</code>來同步session,是以不必打開<code>&lt;cluster&gt;</code>這一步。

這裡memcached搭建在另外一台伺服器上(192.168.10.20),也可以安裝在本地。

如果開啟了防火牆,需要加入11211、11212端口的允許規則。

加入jar包

将<code>asm-3.2.jar</code>, <code>couchbase-client-1.2.2.jar</code>, <code>kryo-1.04.jar</code>, <code>kryo-serializers-0.11.jar</code>, <code>msm-kryo-serializer-1.6.5.jar</code>, <code>memcached-session-manager-1.6.5.jar</code>, <code>memcached-session-manager-tc6-1.6.5.jar</code>, <code>minlog-1.2.jar</code>,<code>reflectasm-1.01.jar</code>, <code>spymemcached-2.10.2.jar</code>這些jar包加入tomcat0/lib/下。可以看到這裡選用的session序列化政策采用的是kryo。另外要注意版本之間的相容性,這裡隻針對tomcat6.x。

修改<code>conf/server.xml</code>:

将節點修改成:

接着将tomcat0完整的複制2份(tomcat1,tomcat2),也可以放到另外一台伺服器上。

修改為<code>workers.properties</code>中定義的ajp等端口:

node tomcat

server port

connector port http

connector port ajp

engine jvmroute

memcached failovernodes

tomcat0

8005

8080

8009

n1

tomcat1

8105

8081

8109

tomcat2

8205

8082

8209

n2

分别啟動tomcat0、tomcat1、tomcat2和apache,注意觀察tomcat的啟動日志和memcached伺服器的日志。

在浏覽器通路<code>http://192.168.10.100/test.jsp</code>。主要測試負載均衡與session共享。