apache2+tomcat5.5集羣+session同步html
做者劉宇liuyu.blog.51cto.com java
msn羣:mgroup49073@hotmail.com linuxtone linux
說明借前人之鑑寫一篇關於tomcat集羣及session同步的問題首先介紹tomcat集成及作集羣的緣由和必要性session同步的做用。而後包括各軟件的安裝配置。 c++
原理tomcat 作個WEB服務器有它的侷限性處理能力低效率低。承受併發小1000左右。但目前有很多網站或者頁面是JSP的。並採用了tomcat作爲WEB所以只能在此基礎上調優。 web
目前採起的辦法是Apache + Mod_JK + tomcat 來解決一部分請求用戶訪問的是apache但有jsp頁面的時候纔會去請求tomcat。若是量一大那麼tomcat沒法承受那麼只能作tomat集羣Apache + Mod_JK 就是負載均衡器了。 apache
Mod_JK2負載均衡能夠把不一樣的jsp請求轉發到不一樣的tomcat服務器還能夠偵測服務器存活。若是有條件能夠給Mod_JK2作一個HA由於作完集羣后壓力就在JK上了。 centos
簡單拓僕圖 tomcat
1、測試環境及軟件安裝-----若是已經安裝過的能夠省略這步 服務器
linux 2.6 內核 centos 5.2 session
本例二臺tomcat 不在同一機器。
先安裝了所需的程序庫
yum -y install gcc gcc-c++ autoconf libjpeg libjpeg-devel libpng libpng-devel freetype freetype-devel libxml2 libxml2-devel zlib zlib-devel glibc glibc-devel glib2 glib2-devel bzip2 bzip2-devel ncurses ncurses-devel curl curl-devel
下載源碼包本文不安裝PHP
apache2 和tomcat5均可以在 apache.org 下載
tomcat5須要JDK1.5的版本。
JK本文用的源碼包tomcat-connectors
Apache 安裝
# tar zxvf httpd- 2.2.8 .tar.gz
#cd httpd- 2.2.8
# ./configure --prefix=/usr/local/apache2 --enable-modules=so --enable-so
# make && make install
/usr/local/apache2/bin/apachectrl start
看到apache就配置成功了。
JDK的安裝
#chmod 755 jdk-1_5_0_16-linux-i586.bin
#./jdk-1_5_0_16-linux-i586.bin
# mv jdk-1_5_0_16 /usr/local/
到此JDK已經安裝完成
到/usr/bin目錄下把原用的java,javac文件刪除:
#rm -rf java
#rm –rf javac
在/usr/bin 下創建 軟鏈接 java
# ln -s /usr/local/jdk-1_5_0_16/bin/java /usr/bin/java
# ln -s /usr/local/jdk-1_5_0_16/bin/javac /usr/bin/javac
# java –version
# javac -version
java version " 1.4.2 _08"
Java(TM) 2 Runtime Environment, Standard Edition (build 1.4.2 _08-b03)
Java HotSpot(TM) Client VM (build 1.4.2 _08-b03, mixed mode)
爲了方便下在的工做創建兩個軟連接
ln -s /usr/local/jdk-1_5_0_16 /usr/local/jdk
ln -s /usr/local/jdk-1_5_0_16/jre /usr/local/jre
Tomcat的安裝
#tar -zxvf apache-tomcat- 5.5.27 .tar.gz
# mv apache-tomcat- 5.5.27 /usr/local/tomcat
設置環境變量:
#Set Environment by NetSeek
JAVA_HOME=/usr/local/jdk
export JAVA_HOME
JRE_HOME=/usr/local/jre
export JRE_HOME
CLASSPATH=/usr=/usr/local/tomcat/common/lib/:/usr/local/jdk/lib:/usr/local/jre/lib
export CLASSPATH
PATH=$PATH:/usr/local/tomcat/bin/:/usr/local/apache/bin:/usr/local/jdk/bin:/usr/local/jre/bin
export PATH
TOMCAT_HOME=/usr/local/tomcat
export TOMCAT_HOME
啓動tomcat以檢查是否存在錯誤
#cd /usr/local/tomcat/bin
#./startup.sh
[url]http://IP[/url]地址:8080 能夠看到貓頭成功了。
在另外一臺機器上也安裝tomcat並配置好。
JK 安裝整合apache tomcat
# tar zxvf tomcat-connectors- 1.2.27 -src.tar.gz
#cd tomcat-connectors- 1.2.27 -src/native
# ./configure --with-apxs=/usr/local/apache2/bin/apxs --with-java-home=/usr/local/jdk
# make && make install
在/usr/local/apache2/modules/下會產生mod_jk.so
修改apache配置文件
LoadModule jk_module modules/mod_jk.so
JkWorkersFile /usr/local/tomcat/conf/jk/workers.properties JK配置文件 負載的配置
JkShmFile logs/mod_jk.shm
JkLogFile /usr/local/tomcat/logs/mod_jk.log 相關日誌的設置
JkLogLevel info
JkMount /*.jsp controller 將jsp的請求轉發給controller(負載均衡控制器)
修改DoucmentRoot與tomcat的目錄一致。
本文修改成/usr/local/tomcat/webapps/
2、調度器JK的配置
創建JK配置文件
#vi /usr/local/tomcat/conf/jk/workers.properties
workers.tomcat_home=/usr/local/tomcat #指定tomcat的目錄――若是2個tomcat在同一臺機器該選項去掉
workers.java_home=/usr/local/jdk #指定jdk的目錄
ps=/
worker.list=controller #指定負載名這個能夠隨便起與下面的worker.controller.type=lb要對應
#========tomcat1======== 第一臺tomcat的配置
worker.tomcat1.port=8009
worker.tomcat1.host=localhost #這裏也能夠寫IP
worker.tomcat1.type=ajp13
worker.tomcat1.lbfactor=1 #權量數值越大分配的機率就最小
#========tomcat2===========
worker.tomcat2.port=8009
worker.tomcat2.host=192.168.19.81 (tomcat2的IP)
worker.tomcat2.type=ajp13
worker.tomcat2.lbfactor=1
#========controller,負載均衡器=======
worker.controller.type=lb
worker.controller.balance_workers=tomcat1,tomcat2 # server.xml配置文件裏的jvmRoute="tomcat1"指定的名字
worker.controller.sticky_session=1
3、tomcat集羣配置session 同步配置
一、tomca1 tomcat 2 在同一臺機器
Tomcat 1 IP: 192.168.19.199
A、修改Engine節點信息 <Engine name="Catalina" defaultHost="localhost" jvmRoute="tomcat1">
B、去掉<Cluster> <\Cluster> 的註釋符
C、修改Cluster 節點信息
<Membership
className="org.apache.catalina.cluster.mcast.McastService"
mcastBindAddress="192.168.19.199"
mcastAddr="224.0.0.1"
mcastPort="45564"
mcastFrequency="500"
mcastDropTime="3000"/>
<Receiver
className="org.apache.catalina.cluster.tcp.ReplicationListener"
tcpListenAddress="192.168.19.199"
tcpListenPort="4001"
tcpSelectorTimeout="100"
tcpThreadCount="6"/>
Tomcat 2 IP: 192.168.19.81
A、修改Engine節點信息 <Engine name="Catalina" defaultHost="localhost" jvmRoute="tomcat2">
B、去掉<Cluster> <\Cluster> 的註釋符
C、修改Cluster 節點信息
<Membership
className="org.apache.catalina.cluster.mcast.McastService"
mcastBindAddress="192.168.19.199"
mcastAddr="224.0.0.1"
mcastPort="45564"
mcastFrequency="500"
mcastDropTime="3000"/>
<Receiver
className="org.apache.catalina.cluster.tcp.ReplicationListener"
tcpListenAddress="192.168.19.199"
tcpListenPort="4002" 必定要改
tcpSelectorTimeout="100"
tcpThreadCount="6"/>
D、將8080 8009 8082三個節點的端口改成
9080 9009 9082 避免 與tomcat1端口衝突
注這裏的IP也能夠不改
二、tomca1 tomcat 2 在不一樣機器上
Tomcat 1 IP: 192.168.19.199
A、修改Engine節點信息 <Engine name="Catalina" defaultHost="localhost" jvmRoute="tomcat1">
B、去掉<Cluster> <\Cluster> 的註釋符
C、修改Cluster 節點信息
<Membership
className="org.apache.catalina.cluster.mcast.McastService"
mcastBindAddress="192.168.19.199"
mcastAddr="224.0.0.1"
mcastPort="45564"
mcastFrequency="500"
mcastDropTime="3000"/>
<Receiver
className="org.apache.catalina.cluster.tcp.ReplicationListener"
tcpListenAddress="192.168.19.199"
tcpListenPort="4001"
tcpSelectorTimeout="100"
tcpThreadCount="6"/>
Tomcat 2 IP: 192.168.19.81
A、修改Engine節點信息 <Engine name="Catalina" defaultHost="localhost" jvmRoute="tomcat1">
B、去掉<Cluster> <\Cluster> 的註釋符
C、修改Cluster 節點信息
<Membership
className="org.apache.catalina.cluster.mcast.McastService"
mcastBindAddress="192.168.19.81"
mcastAddr="224.0.0.1"
mcastPort="45564" mcastFrequency="500"
mcastDropTime="3000"/>
<Receiver
className="org.apache.catalina.cluster.tcp.ReplicationListener"
tcpListenAddress="192.168.19.81"
tcpListenPort="4001"
tcpSelectorTimeout="100"
tcpThreadCount="6"/>
修改web應用裏面WEB-INF目錄下的web.xml文件加入標籤
<distributable/>
直接加在</web-app>以前就能夠了
作tomcat集羣必須須要這一步不然用戶的session就沒法正常使用。
注意事項1、mcastAddr="224.0.0.1" 這主廣播地址所以須要開啓網卡組播功能
route add -net 224.0.0.0 netmask 240.0.0.0 dev eth0
分別在各機器上運行
2、查看端口狀況
Netstat –antl |grep 4001 同步監聽的端口
tomcat1
tomcat2
3、測試廣播
java -cp tomcat-replication.jar MCaster 224.0.0.1 45564 Terminal1
java -cp tomcat-replication.jar MCaster 224.0.0.1 45564 Terminal2
若是不報錯則能正常廣播
tomcat-replication.jar下載:[url]http://cvs.apache.org/~fhanik/tomcat-replication.jar[/url]
若是是二臺機器能夠用tcpdump抓取包
5、測試 集羣及session同步
在webapps 下新建test 目錄
目錄下建WEB-INF目錄下的web.xml文件
<web-app xmlns="http://java.sun.com/xml/ns/j2ee"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://java.sun.com/xml/ns/j2ee [url]http://java.sun.com/xml/ns/j2ee/web-app_2_4.xsd[/url]"
version="2.4">
<display-name>TomcatDemo</display-name>
<distributable/>
</web-app>
再在webapps 下 創建print.jsp test.jsp
Print.jsp :
<%
System.out.println("www.linuxtone.org liuyu.blog.51cto.com");
%>
test.jsp
<%@ page contentType="text/html; charset=GBK" %>
<%@ page import="java.util.*" %>
<html><head><title>Cluster App Test</title></head>
<body>
Server Info:
<%
out.println(request.getLocalAddr() + " : " + request.getLocalPort()+"<br>");%>
<%
out.println("<br> ID " + session.getId()+"<br>");
String dataName = request.getParameter("dataName");
session.setAttribute("myname","session?");
if (dataName != null && dataName.length() > 0) {
String dataValue = request.getParameter("dataValue");
session.setAttribute(dataName, dataValue);
}
out.print("<b>Session P±?b>");
Enumeration e = session.getAttributeNames();
while (e.hasMoreElements()) {
String name = (String)e.nextElement();
String value = session.getAttribute(name).toString();
out.println( name + " = " + value+"<br>");
System.out.println( name + " = " + value);
}
%>
<form action="index.jsp" method="POST">
û³?<input type=text size=20 name="dataName">
<br>
?:<input type=text size=20 name="dataValue">
<br>
<input type=submit>
</form>
</body>
</html>
重啓全部的服務。
訪問 [url]http://192.168.19.199/test/print.jsp[/url]
如圖能夠看出tomcat 集羣配置完成
Session 複製的查看
在同一窗口輸入名稱和值
在日誌能夠看到以下結果. 這種結果代表成功了
tomcat1
tomcat 2
錯誤總彙
skipping state transfer. No members active in cluster group."
mcastBindAddress 沒有添加或添加得不對
?Unknown default host: ajp13
JK 配置不當
其它的不記得了。。。
安慶英語培訓機構 安順英語培訓機構 安陽英語培訓機構 鞍山英語培訓機構 阿拉善英語培訓機構 安康英語培訓機構 阿壩英語培訓機構 阿里英語培訓機構 阿克蘇英語培訓機構 阿勒泰英語培訓機構 北京英語培訓機構 蚌埠英語培訓機構 亳州英語培訓機構 白銀英語培訓機構 北海英語培訓機構 百色英語培訓機構 畢節英語培訓機構 保定英語培訓機構 白山英語培訓機構 白城英語培訓機構 本溪英語培訓機構 包頭英語培訓機構 巴彥淖爾英語培訓機構 濱州英語培訓機構 寶雞英語培訓機構 巴中英語培訓機構 巴音郭楞英語培訓機構 博爾塔拉英語培訓機構 保山英語培訓機構 重慶英語培訓機構 潮州英語培訓機構 滁州英語培訓機構 巢湖英語培訓機構 池州英語培訓機構 崇左英語培訓機構 滄州英語培訓機構 承德英語培訓機構 長沙英語培訓機構 常德英語培訓機構 郴州英語培訓機構 長春英語培訓機構 常州英語培訓機構 朝陽英語培訓機構 赤峯英語培訓機構 長治英語培訓機構 成都英語培訓機構 昌都英語培訓機構 昌吉英語培訓機構 楚雄英語培訓機構 東莞英語培訓機構 定西英語培訓機構 大慶英語培訓機構 大興安嶺英語培訓機構 大連英語培訓機構 丹東英語培訓機構 東營英語培訓機構 德州英語培訓機構 大同英語培訓機構 德陽英語培訓機構 達州英語培訓機構 大理英語培訓機構 德宏英語培訓機構 迪慶英語培訓機構 鄂州英語培訓機構 恩施英語培訓機構 鄂爾多斯英語培訓機構 佛山英語培訓機構 阜陽英語培訓機構 福州英語培訓機構 防城港英語培訓機構 撫州英語培訓機構 撫順英語培訓機構 阜新英語培訓機構 廣州英語培訓機構 甘南英語培訓機構 桂林英語培訓機構 貴港英語培訓機構 貴陽英語培訓機構 贛州英語培訓機構 固原英語培訓機構 果洛英語培訓機構 廣安英語培訓機構 廣元英語培訓機構 甘孜英語培訓機構 惠州英語培訓機構 河源英語培訓機構 杭州英語培訓機構 湖州英語培訓機構 合肥英語培訓機構 淮南英語培訓機構 鶴壁英語培訓機構 黃山英語培訓機構 河池英語培訓機構 賀州英語培訓機構 海口英語培訓機構 邯鄲英語培訓機構 衡水英語培訓機構 哈爾濱英語培訓機構 鶴崗英語培訓機構 黑河英語培訓機構 黃石英語培訓機構 黃岡英語培訓機構 衡陽英語培訓機構 懷化英語培訓機構 淮安英語培訓機構 葫蘆島英語培訓機構 呼和浩特英語培訓機構 呼倫貝爾英語培訓機構 海東英語培訓機構 海北英語培訓機構 黃南英語培訓機構 海西英語培訓機構 菏澤英語培訓機構 漢中英語培訓機構 哈密英語培訓機構 和田英語培訓機構 紅河英語培訓機構 荊門英語培訓機構 揭陽英語培訓機構 嘉興英語培訓機構 金華英語培訓機構 嘉峪關英語培訓機構 金昌英語培訓機構 酒泉英語培訓機構 焦做英語培訓機構 雞西英語培訓機構 佳木斯英語培訓機構 荊州英語培訓機構 吉林英語培訓機構 景德鎮英語培訓機構 九江英語培訓機構 吉安英語培訓機構 錦州英語培訓機構 濟南英語培訓機構 濟寧英語培訓機構 晉城英語培訓機構 晉中英語培訓機構 開封英語培訓機構 克拉瑪依英語培訓機構 喀什英語培訓機構 昆明英語培訓機構 麗水英語培訓機構 六安英語培訓機構 洛陽英語培訓機構 蘭州英語培訓機構 隴南英語培訓機構 臨夏英語培訓機構 柳州英語培訓機構 來賓英語培訓機構 六盤水英語培訓機構 廊坊英語培訓機構 漯河英語培訓機構 婁底英語培訓機構 遼源英語培訓機構 連雲港英語培訓機構 遼陽英語培訓機構 萊蕪英語培訓機構 臨沂英語培訓機構 聊城英語培訓機構 臨汾英語培訓機構 呂梁英語培訓機構 瀘州英語培訓機構 樂山英語培訓機構 涼山英語培訓機構 拉薩英語培訓機構 林芝英語培訓機構 麗江英語培訓機構 臨滄英語培訓機構 茂名英語培訓機構 梅州英語培訓機構 馬鞍山英語培訓機構 牡丹江英語培訓機構 綿陽英語培訓機構 眉山英語培訓機構 寧波英語培訓機構 南平英語培訓機構 寧德英語培訓機構 南寧英語培訓機構 南陽英語培訓機構 南京英語培訓機構 南通英語培訓機構 南昌英語培訓機構 南充英語培訓機構 內江英語培訓機構 那曲英語培訓機構 怒江英語培訓機構 莆田英語培訓機構 平涼英語培訓機構 濮陽英語培訓機構 平頂山英語培訓機構 萍鄉英語培訓機構 盤錦英語培訓機構 攀枝花英語培訓機構 清遠英語培訓機構 欽州英語培訓機構 慶陽英語培訓機構 黔南英語培訓機構 黔東南英語培訓機構 黔西南英語培訓機構 遷安英語培訓機構 秦皇島英語培訓機構 齊齊哈爾英語培訓機構 七臺河英語培訓機構 青島英語培訓機構 曲靖英語培訓機構 日照英語培訓機構 日喀則英語培訓機構 上海英語培訓機構 深圳英語培訓機構 汕頭英語培訓機構 韶關英語培訓機構 汕尾英語培訓機構 紹興英語培訓機構 宿州英語培訓機構 三明英語培訓機構 三亞英語培訓機構 石家莊英語培訓機構 三門峽英語培訓機構 商丘英語培訓機構 雙鴨山英語培訓機構 綏化英語培訓機構 十堰英語培訓機構 隨州英語培訓機構 邵陽英語培訓機構 四平英語培訓機構 松原英語培訓機構 蘇州英語培訓機構 宿遷英語培訓機構 上饒英語培訓機構 瀋陽英語培訓機構 石嘴山英語培訓機構 朔州英語培訓機構 商洛英語培訓機構 遂寧英語培訓機構 山南英語培訓機構 石河子英語培訓機構 天津英語培訓機構 台州英語培訓機構 銅陵英語培訓機構 天水英語培訓機構 銅仁英語培訓機構 唐山英語培訓機構 通化英語培訓機構 泰州英語培訓機構 鐵嶺英語培訓機構 通遼英語培訓機構 泰安英語培訓機構 太原英語培訓機構 銅川英語培訓機構 吐魯番英語培訓機構 塔城英語培訓機構 溫州英語培訓機構 蕪湖英語培訓機構 武威英語培訓機構 梧州英語培訓機構 武漢英語培訓機構 無錫英語培訓機構 烏海英語培訓機構 烏蘭察布英語培訓機構 吳忠英語培訓機構 濰坊英語培訓機構 威海英語培訓機構 渭南英語培訓機構 烏魯木齊英語培訓機構 文山英語培訓機構 宣城英語培訓機構 廈門英語培訓機構 邢臺英語培訓機構 信陽英語培訓機構 新鄉英語培訓機構 許昌英語培訓機構 襄樊英語培訓機構 咸寧英語培訓機構 孝感英語培訓機構 湘潭英語培訓機構 湘西英語培訓機構 徐州英語培訓機構 新餘英語培訓機構 興安盟英語培訓機構 錫林郭勒英語培訓機構 西寧英語培訓機構 忻州英語培訓機構 西安英語培訓機構 咸陽英語培訓機構 西雙版納英語培訓機構 陽江英語培訓機構 雲浮英語培訓機構 義烏英語培訓機構 玉林英語培訓機構 伊春英語培訓機構 宜昌英語培訓機構 岳陽英語培訓機構 益陽英語培訓機構 永州英語培訓機構 延邊英語培訓機構 揚州英語培訓機構 鹽城英語培訓機構 鷹潭英語培訓機構 宜春英語培訓機構 營口英語培訓機構 銀川英語培訓機構 玉樹英語培訓機構 煙臺英語培訓機構 陽泉英語培訓機構 運城英語培訓機構 延安英語培訓機構 榆林英語培訓機構 宜賓英語培訓機構 雅安英語培訓機構 伊犁英語培訓機構 玉溪英語培訓機構 珠海英語培訓機構 湛江英語培訓機構 肇慶英語培訓機構 中山英語培訓機構 舟山英語培訓機構 漳州英語培訓機構 張掖英語培訓機構 資陽英語培訓機構 張家口英語培訓機構 鄭州英語培訓機構 駐馬店英語培訓機構 周口英語培訓機構 株洲英語培訓機構 張家界英語培訓機構 鎮江英語培訓機構 中衛英語培訓機構 淄博英語培訓機構 棗莊英語培訓機構 自貢英語培訓機構 昭通英語培訓機構 英語培訓機構