Apache tomcat 集羣搭建
準備:
OS:rhel-server-5.4-x86_64-dvd.iso
JDK: jdk-7u71-linux-x64.tar.gz
Apache:httpd-2.4.10.tar.gz
Tomcat:apache-tomcat-7.0.57.tar.gz
Mod_jk:tomcat-connectors-1.2.37-src.tar.gz
Apache 輔助包:apr-1.5.1.tar.gz,apr-util-1.5.3.tar.gz,pcre-8.32.tar.gz
JDK安裝:
cp /software/jdk-7u71-linux-x64.tar.gz /usr/local/Java
cd /usr/local/Java。
tar -zxvf jdk-7u45-linux-i586.tar.gz
vi /etc/profile 添加如下配置
export JAVA_HOME=/usr/local/Java/jdk1.7.0_71
exportCLASSPATH=.:$CLASSPATH:$JAVA_HOME/lib:$JAVA_HOME/jre/lib
export PATH=$PATH:$JAVA_HOME/bin:$JAVA_HOME/jre/bin
source /etc/profile ,使文件立即生效。
java –version 查看jdk版本
安裝apr
cp apr-1.5.1.tar.gz /home/hadoop
cd /home/hadoop
tar -zxvf apr-1.5.0.tar.gz
cd apr-1.5.1
./configure --prefix=/home/hadoop /apr
make
make install
安裝apr-util
cp
cd /home/hadoop
tar -zxvf apr-util-1.5.3.tar.gz
cd apr-util-1.5.3
./configure --prefix=/home/hadoop/apr-util --with-apr=/home/hadoop /apr
make
make install
安裝pcre
cp pcre-8.32.tar.gz /home/hadoop
cd /home/hadoop
tar -zxvf pcre-8.32.tar.gz
cd pcre-8.32
./configure --prefix=/home/hadoop/pcre
make
make install
Aapache安裝
rpm -qa|grep httpd 查看是否已經安裝apache
rpm -e httpd 刪除存在的Apache,不存在不用刪
cp httpd-2.4.7.tar.gz /home/hadoop /home/hadoop是我創建目錄,用戶可以自定義
cd httpd-2.4.10
./configure --prefix=/home/hadoop/apache--with-apr=/home/hadoop/apr/ --with-apr-util=/home/hadoop /apr-util/ --with-pcre=/home/hadoop /pcre
make
make install
------------至此安裝完成,修改相關配置----------
cd /home/hadoop/apache/conf/
vi httpd.conf
修改一下內容:
ServerName 192.168.0.2 你本機的ip
DirectoryIndex index.html index.jsp DirectoryIndex中添加 index.jsp
Includeconf/extra/httpd-mpm.conf
Includeconf/extra/httpd-default.conf
<Directory"/home/hadoop/apache">
Require allgranted
Orderallow,deny
Allow fromall
</Directory>
保存退出
./home/hadoop/apache/bin/apachectl start
訪問http://127.0.0.1 。頁面出現“It's Works!”字樣即爲成功
(1)啓動apache服務:# /home/hadoop/ pache/bin/apachectl start
(2)關閉apache服務:# /home/hadoop/apache/bin/apachectl stop
(3)重啓apache服務:# /home/hadoop/apache/bin/apachectl restart
Tomcat安裝
cp apache-tomcat-7.0.47.tar.gz /home/hadoop
cd /home/hadoop
tar -zxvf apache-tomcat-7.0.47.tar.gz
mv apache-tomcat-7.0.57 tomcat
vi /etc/profile
export TOMCAT_HOME=/home/hadoop/tomcat
export CATALINA_HOME=/home/hadoop/tomcat
source /etc/profile
啓動tomcat
./home/hadoop/tomcat/bin/startup.sh
訪問http://127.0.0.1:8080,可以看到tomcat的啓動歡迎頁面,證明tomcat配置正確
(1)啓動tomcat服務:
# /home/hadoopl/tomcat/bin/startup.sh
# /home/hadoopl/tomcat/bin/catalina.sh start
(2)關閉tomcat服務:
# /home/hadoopl/tomcat/bin/shutdown.sh
#/home/hadoopl/tomcat/bin/catalina.sh stop
mod_jk安裝
cp tomcat-connectors-1.2.37-src.tar.gz /home/hadoop
cd /home/hadoop
tar -zxvf tomcat-connectors-1.2.37-src.tar.gz
編譯安裝mod_jk。
cd /tomcat-connectors-1. 2.37-src/native
chmod 755 buildconf.sh
./buildconf.sh
./configure --with-apxs=/home/hadoop/apache/bin/apxs
make
make install
/tomcat-connectors-1.2.37/apache-2.0下的mod_jk.so文件拷貝到apache安裝目錄下的modules文件夾下面。
cp ./apache-2.0/mod_jk.so/usr/local/apache/modules/
配置負載均衡
1. 修改tomcat server.xml
修改< Connector>節點值,是關於使用ajp連接apache和tomcat時的配置。修改成如下形式:<Connectorport="8009" protocolhandlerclassname="org.apache.jk.server.jkcoyotehandler"protocol="AJP/1.3" redirectPort="8443"/>
注意:如果一臺機器上同時運行多個tomcat,一定要將每個tomcat對應的Connector標籤的port端口設爲不同的值
添加tomcat實例名
<Engine name=”Catalina” defaultHost=”localhost” jvmRoute=”tomcat1”>
在<Engine>元素下添加以下內容
<Clusterclass Name="org.apache.catalina.ha.tcp.SimpleTcpCluster"> <Manager className="org.apache.catalina.ha.session.BackupManager"
expireSessionsOnShutdown="false"
notifyListenersOnReplication="true"
mapSendOptions="6"/>
<Channel className="org.apache.catalina.tribes.group.GroupChannel">
<Membership className="org.apache.catalina.tribes.membership.McastService"
address="224.0.0.1 " #廣播地址,同一組tomcat集羣一樣
port="45564" #同一組tomcat集羣一樣
frequency="500"
dropTime="3000"/>
<Receiver className="org.apache.catalina.tribes.transport.nio.NioReceiver"
address="192.162.0.2 " #本機ip
port="4001" #tomcat默認可以檢測到4000~4100之間的端口
autoBind="100"
selectorTimeout="5000"
maxThreads="6"/>
<Sender className="org.apache.catalina.tribes.transport.ReplicationTransmitter"> <Transport className="org.apache.catalina.tribes.transport.nio.PooledParallelSender"/>
</Sender> <Interceptor className="org.apache.catalina.tribes.group.interceptors.TcpFailureDetector"/>
<InterceptorclassName="org.apache.catalina.tribes.group.interceptors.MessageDispatch15Interceptor"/>
</Channel> <Valve className="org.apache.catalina.ha.tcp.ReplicationValve"filter=""/> <Valve className="org.apache.catalina.ha.session.JvmRouteBinderValve"/> <Deployer className="org.apache.catalina.ha.deploy.FarmWarDeployer"
tempDir="/tmp/war-temp/"
deployDir="/tmp/war-deploy/"
watchDir="/tmp/war-listen/"
watchEnabled="false"/>
<ClusterListenerclassName="org.apache.catalina.ha.session.JvmRouteSessionIDBinderListener"/> <ClusterListener className="org.apache.catalina.ha.session.ClusterSessionListener"/>
</Cluster>
2. 修改待發布項目的web.xml
在每個待發布項目的web.xml末尾的</web-app>標籤裏添加<distributable/>,確保session能夠複製。
3. 修改 httpd.conf
在apache的conf下的httpd.conf文件尾部追加以下內容:
#加載mod_jk Module
LoadModulejk_module modules/mod_jk.so
<Ifmodulemod_jk.c>
#指定workers.properties文件路徑
JkWorkersFile /home/hadoop/apache/conf/workers.properties
#指定jk logs文件存放位置
JkLogFile /home/hadoop/apache/logs/mod_jk.log
#Setthe jk log level [debug/error/info]
JkLogLevelinfo
#Selectthe log format
JkLogStampFormat"[%a %b %d%H:%M:%S %Y]"
#JkOptionsindicate to send SSL KEYSIZE,
JkOptions+ForwardKeySize +ForwardURICompat-ForwardDirectories
#JkRequestLogFormatset the requestformat
JkRequestLogFormat"%w %V %T %q %U%R"
#JkShmFileto put logs
JkShmFilehome /hadoop/apache/logs/mod_jk.shm
</IfModule>
#指定哪些請求交給tomcat處理,哪些請求交給apache處理
#注意:" loadbalancer "爲在workers.propertise裏指定的負載分配控制器
JkMount/*.jsp loadbalancer #所有的jsp都交給tomcat處理
4. 創建workers.properties
httpd.conf的最後添加的配置中workers.properties文件是不存在的,需要我們自己在apache/conf路徑下創建。workers.properties文件用於對負載均衡的負載器worker
(即tomcat)進行具體的登記,此處的2個tomcat就作爲2個worker被登記在這個文件中。
workers.properties具體配置如下:
#workers.properties
#in unix, weuse forward slashes:
ps=/
#workers 列表
worker.list=tomcat1,tomcat2,loadbalancer, status
#--------------------------------------------------------------------
#第一個tomcat
#--------------------------------------------------------------------
worker.tomcat1.port=8009#對應tomcat的server.xml中配置的ajp13端口號
worker.tomcat1.host=127.0.0.1#tomcat1的主機地址,如不爲本機,請填寫IP地址
worker.tomcat1.type=ajp13#定向包協議
worker.tomcat1.lbfactor=1#server的負載分配權重,值越高,分得的請求越多
#以下爲非必要配置,這部分配置tomcat2的配置同tomcat1
#worker.tomcat1.cachesize=1000#配置tomcat的jk連接緩存大小 (非必要)
#worker.tomcat1.cachesize_timeout=600# (非必要)
#worker.tomcat1.reclycle_timeout=300# (非必要)
#worker.tomcat1.socket_keepalive=1#防止防火牆切斷未激活的網絡連接(非必要)
#worker.tomcat1.socket_timeout=300#(非必要)
#worker.tomcat1.local_worker=1# (非必要)
#worker.tomcat1.retries=3# (非必要)
#----------------------------------------------------------------------
#第二個tomcat
#----------------------------------------------------------------------
worker.tomcat2.port=8009
worker.tomcat2.host=172.**.***.202#tomcat2的主機IP地址
worker.tomcat2.type=ajp13
worker.tomcat2.lbfactor=1
#----------------------------------------------------------------------
#load balancerworker -負載均衡控制器
#---------------------------------------------------------------------
worker.loadbalancer.type=lb
worker.loadbalancer.balanced_workers=tomcat1,tomcat2#指定分擔請求的tomcat
worker.loadbalancer.sticky_session=1#設置爲粘性session
worker.loadbalancer.sticky_session_force=0#設置當多次請求未響應,請求將轉發
worker.status.type=status
#end workers.properties
5. 設置apache對項目的訪問路徑
修改/apache/conf/目錄下的httpd.conf文件中的DocumentRoot和Directory值,將文件訪問路徑定位到tomcat的webapps文件夾,即待發布項目的存放位置,修改結果如下:
DocumentRoot"/home/hadoop/tomcat/webapps"
<Directory"/home/hadoop/tomcat/webapps">
Requireall granted
Orderallow,deny
Allowfrom all
</Directory>
如此對apache的修改完成,加之tomcat設置了默認訪問項目,此時就可以實現直接通過apache所在主機的IP地址來訪問項目。(實際配置中,是否實現IP地址直接訪問以實際需求爲準)
負載均衡集羣Session測試
1. 新建一個Java Web工程Test,在工程下新建index.jsp,文件內容如下:
<%@ pageimport="java.util.*" %>
<html>
<head>
<title>Test</title>
</head>
<body bgcolor="red">
<%
out.print("session Id:"+session.getId());
%>
<formaction="index.jsp"method="post">
key<inputtype="text" name="key"/>
<br />
value<input type="text"name="value" />
<br />
<inputtype="submit"value="Submit" />
<br />
</form>
<%
String key=request.getParameter("key");
if(key!=null&&key.isEmpty()==false)
{
Stringvalue =request.getParameter("value");
session.setAttribute(key,value);
Enumeration e =session.getAttributeNames();
while(e.hasMoreElements())
{
String sKey = (String)e.nextElement();
String sValue = (String)session.getAttribute(sKey);
out.print(sKey+ " ="+sValue+"<br>");
}
}
%>
</body>
</html>
2. session粘性測試
啓動同組tomcat以及apache。瀏覽器訪問apache所在的主機IP地址:http://192.168.0.2/。從頁面顯示的session Id可以看出請求訪問的是tomcat1。發現多次刷新或submit後,請求訪問的一直是tomcat1,並且session Id一直保持不變,session中的數據也能夠保持,說明session粘性良好。
3. session複製測試
4. 啓動同組tomcat以及apache。瀏覽器訪問apache所在的主機IP地址:http://172.18.145.201/,從頁面顯示的session Id可以看出請求訪問的是tomcat1。此時停掉tomcat1,再次提交session數據,或刷新頁面,結果如圖二所示,發現請求被轉發給tomcat2,頁面訪問正常。頁面顏色改變,但Session Id保持不變,session數據也全部傳遞給tomcat2,表明session複製良好。
設置Apache,tomcat開機啓動
vi /etc/rc.d/rc.local
/home/tomcat/bin/catalina.shstart
/home/hadoop /apache/bin/apachectlstart