摘要:使用解決多集群時(shí)同步問題所需包安裝過程下載將二進(jìn)制安裝文件,賦予可執(zhí)行權(quán)限可不必為整個(gè)環(huán)境設(shè)置,在中指定即可。啟動(dòng)兩個(gè)節(jié)點(diǎn),端口分別為如果開啟了防火墻,需要加入端口的允許規(guī)則。再次配置加入包將這些包加入下。
注意本文不討論原理,只講述具體的搭建過程,而且步驟都經(jīng)過了整理,否則過程可能會(huì)出現(xiàn)其他異常,請(qǐng)自行g(shù)oogle。apache與tomcat整合的方式除了jk之外,使用apache自帶的mod_ajp_proxy模塊也可以很方便的完成。
先來看一下架構(gòu)圖:
屬于正式環(huán)境中原session復(fù)制方案的改進(jìn)。
jrrt-3.1.2-1.6.0-linux-x64.bin(或jdk1.6.0_33) jvm httpd-2.2.26.tar.gz web服務(wù)器,處理靜態(tài)資源 apache-tomcat-6.0.32.tar.gz 應(yīng)用服務(wù)器,Servlet容器處理動(dòng)態(tài)請(qǐng)求 tomcat-connectors-1.2.30-src.tar.gz apache與tomcat整合插件mod_jk.so tomcat-native.tar.gz APR加速tomcat,提高線程并發(fā)能力。使用tomcat自帶版本。 memcached-session-manager 使用msm解決多tomcat集群時(shí)session同步問題所需jar包 asm-3.2.jar, couchbase-client-1.2.2.jar, kryo-1.04.jar, kryo-serializers-0.11.jar msm-kryo-serializer-1.6.5.jar memcached-session-manager-1.6.5.jar memcached-session-manager-tc6-1.6.5.jar minlog-1.2.jar, reflectasm-1.01.jar spymemcached-2.10.2.jar2. 安裝過程 2.1 JDK
下載將JRockit二進(jìn)制安裝文件,賦予可執(zhí)行權(quán)限
# pwd /apps/test/java # chmod o+x jrrt*.bin # ./jrrt-3.1.2-1.6.0-linux-x64.bin
可不必為整個(gè)linux環(huán)境設(shè)置JAVA_HOME="/apps/test/java/jrrt-3.1.2-1.6.0",在tomcat中指定即可。
2.2 編譯安裝apache因?yàn)?b>tomcat-native依賴于apr,所以這里先直接從 httpd-2.2.26/srclib 目錄下安裝apache自帶的apr和apr-util。
[root@cachets httpd-2.2.26]# pwd /apps/test/soft_src/httpd-2.2.26 [root@test httpd-2.2.26]# cd srclib/apr [root@test apr]# ./configure --prefix=/usr/local/apr [root@test apr]# make && make install [root@test apr]# cd ../apr-util/ [root@test apr-util]# ./configure --prefix=/usr/local/apr-util --with-apr=/usr/local/apr [root@test apr-util]# make && make install
建議將srclib下的pcre也裝上,主要是考慮后面轉(zhuǎn)發(fā)請(qǐng)求時(shí)可能要使用地址rewrite,需要正則語法的支持。默認(rèn)CentOS6.x已經(jīng)安裝了這個(gè)庫。
安裝apache:
[root@test httpd-2.2.26]# ./configure --prefix=/apps/test/apache2 --enable-mods-shared=all --enable-modules=so --enable-rewrite --enable-deflate --with-mpm=worker --with-apr=/usr/local/apr --with-apr-util=/usr/local/apr-util [root@test httpd-2.2.26]# make && make install2.3 安裝tomcat
解壓apache-tomcat-6.0.32.tar.gz拷貝至/app/test/tomcat0,不建議使用root用戶管理tomcat.
[test@cachets soft_src]$ tar -zxvf apache-tomcat-6.0.32.tar.gz [test@cachets soft_src]$ cp -a apache-tomcat-6.0.32 /app/crm/tomcat0 // 安裝tomcat-native(不用多帶帶下載,在tomcat的bin目錄中自帶) # yum install -y openssl-devel apr-devel [root@cachets ~]# cd /app/test/soft_src/apache-tomcat-6.0.32/bin [root@cachets bin]# tar -zxvf tomcat-native.tar.gz [root@cachets bin]# cd tomcat-native-1.1.20-src/jni/native/ [root@cachets native]# ./configure --with-apr=/usr/local/apr/bin/apr-1-config --with-ssl --with-java-home=/apps/test/java/jrrt-3.1.2-1.6.0 [root@cachets native]# make && make install
配置tomcat:
tomcat默認(rèn)參數(shù)是為開發(fā)環(huán)境制定,而非適合生產(chǎn)環(huán)境,尤其是內(nèi)存和線程的配置,默認(rèn)都很低,容易成為性能瓶頸。下面是一些配置示例,需要根據(jù)實(shí)際需要更改。
[crm@cachets tomcat0]$ vi bin/setenv.sh JAVA_OPTS="-XX:PermSize=128M -XX:MaxPermSize=256M -Xms1536M -Xmx2048M -verbosegc " CATALINA_OPTS="-Dcom.sun.management.jmxremote.port=7091 -Dcom.sun.management.jmxremote.ssl=false -Dcom.sun.management.jmxremote.authenticate=false -Djava.rmi.server.hostname=192.168.10.100" JAVA_HOME="/apps/test/java/jrrt-3.1.2-1.6.0" CATALINA_OPTS="$CATALINA_OPTS -Djava.library.path=/usr/local/apr/lib" [crm@cachets tomcat0]$ chmod 755 bin/setenv.sh
bin目錄下新建的可執(zhí)行文件setenv.sh會(huì)由tomcat自動(dòng)調(diào)用。上面的jmxremote.authenticate在正式環(huán)境中請(qǐng)務(wù)必設(shè)為true并設(shè)置用戶名/密碼,減少安全隱患,或者注釋掉CATALINA_OPTS。(有時(shí)候出于性能調(diào)優(yōu)的目的,才需要設(shè)置JMX)。對(duì)于具體的連接協(xié)議有不同的優(yōu)化屬性,參考如下:
對(duì)HTTP:
對(duì)AJP:
2.4 安裝jk
[crm@test soft_src]$ tar -zxvf tomcat-connectors-1.2.30-src.tar.gz [crm@test soft_src]$ cd tomcat-connectors-1.2.30-src/native [root@test native]# ./configure --with-apxs=/apps/test/apache2/bin/apxs [root@test native]# make && make install
此時(shí)可以看到在/apps/test/apache2/modules下有mod_jk.so文件,用于連接apache與tomcat。
2.5 配置(集群)負(fù)載均衡選項(xiàng) 2.5.1 apache建立配置文件httpd-jk.conf:
[root@cachets ~]# cd /app/test/ [root@cachets crm]# vi apache2/conf/extra/httpd-jk.conf # Load mod_jk module LoadModule jk_module modules/mod_jk.so # 指定保存了worker相關(guān)工作屬性定義的配置文件 JkWorkersFile conf/extra/workers.properties # Specify jk log file JkLogFile /app/test/apache2/logs/mod_jk.log # Specify jk log level [debug/error/info] JkLogLevel info #指定哪些請(qǐng)求交給tomcat處理,"controller"為在workers.properties里指定的負(fù)載分配控制器名 JkMount /servlet/* controller JkMount /*.jsp controller JkMount /*.do controller // 在conf/httpd.conf最后加上 Include conf/extra/httpd-vhosts.conf Include conf/extra/httpd-jk.conf
建立工作文件workers.properties:
[root@cachets crm]# vi apache2/conf/extra/workers.properties # servers worker.list=controller # ====== tomcat0 ======= worker.tomcat0.port=8009 worker.tomcat0.host=192.168.10.100 worker.tomcat0.type=ajp13 worker.tomcat0.lbfactor=1 # ====== tomcat1 ======= worker.tomcat1.port=8109 worker.tomcat1.host=192.168.10.100 worker.tomcat1.type=ajp13 worker.tomcat1.lbfactor=1 # ====== tomcat2 ======= worker.tomcat2.port=8209 worker.tomcat2.host=192.168.10.100 worker.tomcat2.type=ajp13 worker.tomcat2.lbfactor=1 # ====== controller ==== worker.controller.type=lb worker.controller.balance_workers=tomcat0,tomcat1,tomcat2 worker.controller.sticky_session = 1
以上是3個(gè)tomcat的做負(fù)載均衡的情況,負(fù)載因子lbfactor都為1,session為sticky模式,apache與tomcat連接的協(xié)議采用AJP/1.3,同一臺(tái)服務(wù)器上通過端口來區(qū)分tomcat0/tomcat1/tomcat2。
2.5.2 tomcat在tomcat0/conf/server.xml中加入jvmRoute屬性,這個(gè)屬性與上面的workers.properties的worker相同:
設(shè)置測(cè)試應(yīng)用的訪問路徑,在tomcat0/conf/server.xml的
2.5.3 app-TEST
為了看到負(fù)載均衡的效果,在/apps/test/testapp/TEST目錄下建立測(cè)試頁面test.jsp:
<%@ page contentType="text/html; charset=UTF-8" %> <%@ page import="java.util.*" %>Cluster App Test Server Info: <% out.println(request.getLocalAddr() + " : " + request.getLocalPort()+"
");%> <% out.println("
ID " + session.getId()+"
"); // 如果有新的 Session 屬性設(shè)置 String dataName = request.getParameter("dataName"); if (dataName != null && dataName.length() > 0) { String dataValue = request.getParameter("dataValue"); session.setAttribute(dataName, dataValue); } out.println("Session 列表
"); System.out.println("============================"); Enumeration e = session.getAttributeNames(); while (e.hasMoreElements()) { String name = (String)e.nextElement(); String value = session.getAttribute(name).toString(); out.println( name + " = " + value+"
"); System.out.println( name + " = " + value); } %>
到這里還差一步就可以看到集群的效果,那就是3個(gè)tomcat之間session同步的問題。可以通過打開
然后在tomcat0/conf/web.xml的
復(fù)制tomcat0到tomcat1、tomcat2,修改 的端口避免沖突,修改對(duì)應(yīng)的jvmRoute
啟動(dòng)apache和3個(gè)tomcat,就可以看到效果。但這里我們使用memcached-session-manager來同步session,所以不必打開
這里memcached搭建在另外一臺(tái)服務(wù)器上(192.168.10.20),也可以安裝在本地。
[root@cachets msm]# yum install libevent libevent-devel [root@cachets msm]# tar -zxvf memcached-1.4.19.tar.gz [root@cachets msm]# cd memcached-1.4.19 && ./configure && make && make install // 啟動(dòng)兩個(gè)memcached節(jié)點(diǎn),端口分別為11211、11212 [root@cachets ~]#memcached -d -m 64 -p 11211 -u daemon -P /var/run/memcached.pid [root@cachets ~]#memcached -d -m 64 -p 11212 -u daemon -P /var/run/memcached2.pid
如果開啟了防火墻,需要加入11211、11212端口的允許規(guī)則。
2.6.2 再次配置tomcat加入jar包
將asm-3.2.jar, couchbase-client-1.2.2.jar, kryo-1.04.jar, kryo-serializers-0.11.jar, msm-kryo-serializer-1.6.5.jar, memcached-session-manager-1.6.5.jar, memcached-session-manager-tc6-1.6.5.jar, minlog-1.2.jar, reflectasm-1.01.jar, spymemcached-2.10.2.jar這些jar包加入tomcat0/lib/下??梢钥吹竭@里選用的session序列化策略采用的是kryo。另外要注意版本之間的兼容性,這里只針對(duì)tomcat6.x。
修改conf/server.xml:
將節(jié)點(diǎn)修改成:
接著將tomcat0完整的復(fù)制2份(tomcat1,tomcat2),也可以放到另外一臺(tái)服務(wù)器上。
修改為workers.properties中定義的AJP等端口:
node tomcat | Server port | Connector port http | Connector port ajp | Engine jvmRoute | memcached failoverNodes |
---|---|---|---|---|---|
tomcat0 | 8005 | 8080 | 8009 | tomcat0 | n1 |
tomcat1 | 8105 | 8081 | 8109 | tomcat1 | n1 |
tomcat2 | 8205 | 8082 | 8209 | tomcat2 | n2 |
分別啟動(dòng)tomcat0、tomcat1、tomcat2和apache,注意觀察tomcat的啟動(dòng)日志和memcached服務(wù)器的日志。
[test@cachets ~]$ /apps/test/tomcat0/bin/startup.sh [test@cachets ~]$ /apps/test/tomcat1/bin/startup.sh [test@cachets ~]$ /apps/test/tomcat2/bin/startup.sh [root@cachets ~]# /apps/test/apache2/bin/apachectl start
在瀏覽器訪問http://192.168.10.100/test.jsp。主要測(cè)試負(fù)載均衡與session共享。
原文鏈接地址:http://seanlook.com/2014/10/29/apache-3tomcat-cluster-jk-memcached/
文章版權(quán)歸作者所有,未經(jīng)允許請(qǐng)勿轉(zhuǎn)載,若此文章存在違規(guī)行為,您可以聯(lián)系管理員刪除。
轉(zhuǎn)載請(qǐng)注明本文地址:http://specialneedsforspecialkids.com/yun/35722.html
摘要:使用解決多集群時(shí)同步問題所需包安裝過程下載將二進(jìn)制安裝文件,賦予可執(zhí)行權(quán)限可不必為整個(gè)環(huán)境設(shè)置,在中指定即可。啟動(dòng)兩個(gè)節(jié)點(diǎn),端口分別為如果開啟了防火墻,需要加入端口的允許規(guī)則。再次配置加入包將這些包加入下。 注意本文不討論原理,只講述具體的搭建過程,而且步驟都經(jīng)過了整理,否則過程可能會(huì)出現(xiàn)其他異常,請(qǐng)自行g(shù)oogle。apache與tomcat整合的方式除了jk之外,使用apache自...
摘要:在本文中,我們將介紹如何通過服務(wù)器配置簡(jiǎn)單的負(fù)載均衡器。一個(gè)負(fù)載均衡器,負(fù)責(zé)管理和負(fù)載均衡多個(gè)。。定義節(jié)點(diǎn)的強(qiáng)度,在將請(qǐng)求轉(zhuǎn)發(fā)給節(jié)點(diǎn)時(shí),負(fù)載均衡器將參考這個(gè)值。 翻譯:瘋狂的技術(shù)宅原文標(biāo)題:Load balancing tomcat with Apache原文鏈接:http://programmergate.com/loa...本文首發(fā)微信公眾號(hào):充實(shí)的腦洞 有時(shí)候我們需要把自己的應(yīng)用...