linuxtomcat集群
A. linux下apache2和tomcat6集群 2個tomcat6在同一台機器上 log4j報錯
報錯從字面上看是沒有序列化的錯誤。
說明在業務場景中存在將org.apache.log4j.Logger 對象進行遠程傳輸的操作。
這種操作是不合理的,我猜測你們在使用日誌記錄的時候直接使用了log4j的實現類而非介面,導致需要傳輸log4j的實體類對象,但是這個對象是沒有被序列號的,理論上不應該這樣用。
處理方法:
檢查是否存在這種場景需要兩台機器或者多台機器之間傳輸帶有 這個對象引入的對象。
理論上不應該存在這樣的對象,如果存在將 import中的org.apache.log4j.Logger,修改為介面,可以使用 slf4j 或者 commons-logging。
最終避免傳輸org.apache.log4j.Logger這個對象。
B. tomcat集群是怎樣弄的
APACHE 2.2.8+TOMCAT6.0.14配置負載均衡
目標:
使用 apache 和 tomcat 配置一個可以應用的 web 網站,要達到以下要求:
1、 Apache 做為 HttpServer ,後面連接多個 tomcat 應用實例,並進行負載均衡。
2、 為系統設定 Session 超時時間,包括 Apache 和 tomcat
3、 為系統屏蔽文件列表,包括 Apache 和 tomcat
註:本常式以一台機器為例子,即同一台機器上裝一個apache和4個Tomcat。
一、前期准備工作:安裝用的程序(前提保證已安裝了JDK1.5以上的版本)
APAHCE 2.2.8下載:apache_2.2.8-win32-x86-no_ssl.msi
TOMCAT6.0.14下載:apache-tomcat-6.0.14.zip直接解壓。
二、安裝過程
APAHCE安裝目錄:D:\Apache。
四個TOMCAT目錄:自行解壓到(D:\Tomcat集群伺服器\)下。分別為 tomcat6.0,tomcat6.01,tomcat6.02,tomcat6.03
這幾個安裝過程就不詳細說明了。
三、配置
1、Apache配置
1.1、httpd.conf配置
修改APACHE的配置文件D:\Apache \conf\httpd.conf
將以下Mole的注釋去掉,這里並沒有使用mod_jk.so進行apache和tomcat的鏈接,從2.X以後apache自身已集成了mod_jk.so的功能。只需簡單的把下面幾行去掉注釋,就相當於以前用mod_jk.so比較繁瑣的配置了。這里主要採用了代理的方法,就這么簡單。
LoadMole proxy_mole moles/mod_proxy.so
LoadMole proxy_connect_mole moles/mod_proxy_connect.so
LoadMole proxy_ftp_mole moles/mod_proxy_ftp.so
LoadMole proxy_http_mole moles/mod_proxy_http.so
LoadMole proxy_ajp_mole moles/mod_proxy_ajp.so
LoadMole proxy_balancer_mole moles/mod_proxy_balancer.so
再找到<IfMole dir_mole></IfMole>加上index.jsp修改成
<IfMole dir_mole>
DirectoryIndex index.html index.jsp
</IfMole>
1.1.1、 在最下面加入
ProxyRequests Off
<proxy balancer://cluster>
BalancerMember ajp://127.0.0.1:8009 loadfactor=1 route=jvm1
BalancerMember ajp:// 127.0.0.1:9009 loadfactor=1 route=jvm2
BalancerMember ajp:// 127.0.0.1:9001 loadfactor=1 route=jvm3
BalancerMember ajp:// 127.0.0.1:9003 loadfactor=1 route=jvm4
</proxy>
上面的四個BalancerMember成員是我們配置的tomcat集群。後面會說明的。
1.2、httpd-vhosts.conf設置
接下來進行虛擬主機的設置。APACHE的虛擬主機設置如下:
首先要修改 conf/httpd.conf找到(#Include conf/extra/httpd-vhosts.conf)
把注釋去掉。
# Virtual hosts
Include conf/extra/httpd-vhosts.conf
在文件(extra/httpd-vhosts.conf)最下面加入
<VirtualHost *:80>
ServerAdmin [email protected]
ServerName localhost
ServerAlias localhost
ProxyPass / balancer://cluster/ stickysession=jsessionid nofailover=On
ProxyPassReverse / balancer://cluster/
</VirtualHost>
其中的域名和路徑根據你自己情況設置
然後再設置TOMCAT虛擬主機
2 配置 tomcat
2.1. 配置 server 的關閉
我們需要在一台機器上跑 4 個不同的 tomcat ,需要修改不同的 tomcat 的關閉口,避免出現埠被佔用的情況。其中tomcat6.0用默認值,不修改。其他三個修改。在tomcat6.01\conf, tomcat6.02\conf下和tomcat6.03\conf下的 server.xml 中找到 server, 將:
<Server port="8005" shutdown="SHUTDOWN">
改為
<Server port="XXXX" shutdown="SHUTDOWN">
XXXX 在這里表示不同的埠:我的其它三個 tomcat 分別使用 9005,8006 , 9007
2.2. 配置 Engine
把原來的配置注釋掉,把下面一句去掉注釋。並標明jvmRoute="jvm2".
<Engine name="Standalone" defaultHost="localhost" jvmRoute="jvm2">
以下是原來的配置。
<!-- <Engine name="Catalina" defaultHost="localhost"> -->
其他(tomcat6.02和tomcat6.03)也要同樣 配置。注意:jvmRoute配置不要一樣。
<Engine name="Standalone" defaultHost="localhost" jvmRoute="jvm3">
<Engine name="Standalone" defaultHost="localhost" jvmRoute="jvm4">
2.3. 配置 Connector
原來的默認配置。
<!-- Define an AJP 1.3 Connector on port 8009 -->
<Connector port="8009" protocol="AJP/1.3" redirectPort="8443" />
這里是apache和tomcat鏈接的關鍵,前台apache就是通過AJP協議與tomcat進行通信的,以完成負載均衡的作用。也可以用HTTP協議。大家注意它們是如何連接通信的,上面的紅色部分(port="8009")就是連接的介面了。
把其他三個tomcat的<Connector port="XXX" />port分別改成與上面
<proxy balancer://cluster>
#與tomcat6.0對應,route與<Engine jvmRoute="jvm1">對應。
BalancerMember ajp://127.0.0.1:8009 loadfactor=1 route=jvm1
#與tomcat6.01對應,route與<Engine jvmRoute="jvm2">對應。
BalancerMember ajp:// 127.0.0.1:9009 loadfactor=1 route=jvm2
#與tomcat6.02對應,route與<Engine jvmRoute="jvm3">對應。
BalancerMember ajp:// 127.0.0.1:9001 loadfactor=1 route=jvm3
#與tomcat6.03對應,route與<Engine jvmRoute="jvm4">對應。
BalancerMember ajp:// 127.0.0.1:9003 loadfactor=1 route=jvm4
</proxy>
中的埠對應,tomcat6.01 的ajp埠port:9009. tomcat6.02 的ajp埠port:9001。tomcat6.03 的ajp埠port:9003.一定要與上面的一致。同時也要把redirectPort的值改成唯一的,確保四個tomcat的都不一樣。
2.5.配置Cluster(每個tomcat中都要修改)
原來的配置。
<Cluster className="org.apache.catalina.ha.tcp.SimpleTcpCluster"/>
修改為以下的代碼:<Receiver port=」XX」/>port也要保證唯一性。
<Cluster className="org.apache.catalina.ha.tcp.SimpleTcpCluster" channelSendOptions="6">
<Manager className="org.apache.catalina.ha.session.BackupManager"
expireSessionsOnShutdown="false"
notifyListenersOnReplication="true"
mapSendOptions="6"/>
<!--
<Manager className="org.apache.catalina.ha.session.DeltaManager"
expireSessionsOnShutdown="false"
notifyListenersOnReplication="true"/>
-->
<Channel className="org.apache.catalina.tribes.group.GroupChannel">
<Membership className="org.apache.catalina.tribes.membership.McastService"
address="228.0.0.4"
port="45564"
frequency="500"
dropTime="3000"/>
<Receiver className="org.apache.catalina.tribes.transport.nio.NioReceiver"
address="auto"
port="5001"
selectorTimeout="100"
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"/>
<Interceptor className="org.apache.catalina.tribes.group.interceptors.MessageDispatch15Interceptor"/>
<Interceptor className="org.apache.catalina.tribes.group.interceptors.ThroughputInterceptor"/>
</Channel>
<Valve className="org.apache.catalina.ha.tcp.ReplicationValve"
filter=".*\.gif;.*\.js;.*\.jpg;.*\.png;.*\.htm;.*\.html;.*\.css;.*\.txt;"/>
<Deployer className="org.apache.catalina.ha.deploy.FarmWarDeployer"
tempDir="/tmp/war-temp/"
deployDir="/tmp/war-deploy/"
watchDir="/tmp/war-listen/"
watchEnabled="false"/>
<ClusterListener className="org.apache.catalina.ha.session.ClusterSessionListener"/>
</Cluster>
這個設置是主要用以tomcat的集群。
四、啟動服務,測試tomcat自帶的例子
1、測試apache和tomcat協作。
先在每個tomcat中的\webapps\ROOT下的index.jsp下面加上以下的測試代碼部分:(X代表不同的tomcat的輸出不同的信息),把index.html刪除,以免影響測試效果。在最後面的加上.即</table></body>之間。
<%
System.out.println("tomcat6.0X deal with request");
%>
然後再通過http:// 127.0.0.1來訪問一下,就會出現大家熟悉的貓貓。
然後再通過分別訪問
http:// 127.0.0.1:8080, http:// 127.0.0.1:9080,http:// 127.0.0.1:8081,http:// 127.0.0.1:9002它們訪問的內容和上面的http:// 127.0.0.1是一樣的。
這樣就說明apache和TOMCAT整合成功!
2、測試均衡器
通過http:// 127.0.0.1多次訪問,要想看到真正的效果,必須用一些壓力測試工具,可用微軟Microsoft Web Application Stress Tool進行簡單壓力測試,不然你靠不停刷新是體現不出來的,你只會在一個tomcat的控制台有輸出結果。只用用壓力測試工具模擬大量用戶同時訪問,你會發現四個tomcat控制台均有打出控制信息,說明均衡器工作正常。
C. Tomcat集群有什麼用
可將請求分給多個tomcat,降低單個tomcat的負荷,同時,也避免一個tomcat崩潰導致無法訪問的窘境。
D. linux 下配置tomcat集群, 配置完成後 無法進入項目,一直在登陸頁處刷新,並且登陸頁也不顯示。
這玩意不靠譜
建議走nginx+多tomcat的方式。
E. linux apache tomcat7集群中session共享失敗
你的集群是通過nginx實現的嗎?tomcat+nginx集群的話,比較容易實現session會話保持,在nginx的 upstream 配置中添加 IP_HASH就可以實現,不需要再去做session復制和共享。
F. linux下apache+tomcat集群詳細配置
環境:
操作系統均為:CentOS 5.1
Apache2.X伺服器一台:IP地址192.168.232.4;安裝路徑/usr/local/apache;
Tomcat6伺服器一台:IP地址192.168.232.5;安裝路徑/usr/local/tomcat;
Tomcat6伺服器一台:IP地址192.168.232.6;安裝路徑/usr/local/tomcat;
配置:
Apache安裝:
#./configure --prefix=/usr/local/apache --enable-moles=so --enable-mods-shared=all --enable-proxy --enable-proxy-connect --enable-proxy-ftp --enable-proxy-http --enable-proxy-ajp --enable-proxy-balancer --enable-rewrite
注釋:激活tomcat集群需要的 enable-proxy,enable-proxy-http,enable-proxy-connect,enable-proxy-ajp和enable-proxy-balancer,其中proxy-ajp和proxy-balancer必須依賴proxy,如果是自定義的編譯除了以上幾個必須的模塊外,mod_status也要編譯進去,切記。enable-proxy-ftp可以不編譯。
#make;make install
製作Apache啟動項:
#cp support/apachectl /etc/rc.d/init.d/httpd
#vi /etc/rc.d/init.d/httpd
添加以下內容:(包括#號)
# Startup script for the Apache Web Server
# chkconfig: 2345 85 15
# description: Apache is a World Wide Web server .It is used to server
# HTML files and CGI.
# processname: httpd
# pidfile: /usr/local/apache/log/httpd.pid
# config: /usr/local/apache/conf/httpd.conf
增加服務項
#chkconfig --add httpd
#chmod 755 /etc/rc.d/init.d/httpd
#chkconfig --level 345 httpd on
JDK安裝:
#chmod a+x jdk-6u4-linux-i586-rpm.bin
#./jdk-6u4-linux-i586-rpm.bin
java環境變數設置:
#vi /etc/profile
在文件最後添加以下內容:
JAVA_HOME=/usr/java/jdk1.6.0_04
CLASSPATH=.:$JAVA_HOME/lib/tools.jar:$JAVA_HOME/lib/dt.jar
PATH=$JAVA_HOME/bin:$PATH
CATALINA_HOME=/usr/local/tomcat
export JAVA_HOME CLASSPATH PATH CATALINA_HOME
執行如下命令使環境變數生效:
source /etc/profile
測試配置是否成功:
java –version
Tomcat安裝:
#wget [url]http://apache.mirror.phpchina.com/tomcat/tomcat-6/v6.0.16/bin/apache-tomcat-6.0.16.tar.gz[/url]
#tar zxvf apache-tomcat-6.0.16.tar.gz
#mv apache-tomcat-6.0.16 /usr/local/tomcat
Tomcat隨機啟動:
#vi /etc/rc.local
添加以下內容:
/usr/local/tomcat/bin/startup.sh
tomcat6配置文件server.xml:
把
<!-- You should set jvmRoute to support load-balancing via AJP ie :
<Engine name="Standalone" defaultHost="localhost" jvmRoute="jvm1">
-->
<Engine name="Catalina" defaultHost="localhost">
改成
<!-- You should set jvmRoute to support load-balancing via AJP ie :
-->
<Engine name="Standalone" defaultHost="localhost" jvmRoute="tomcatX">
<!--
<Engine name="Catalina" defaultHost="localhost">
-->
說明:
第一台tomcat就把jvmRoute="tomcat1"
第二台tomcat就把jvmRoute="tomcat2"
把
<!--
<Cluster className="org.apache.catalina.ha.tcp.SimpleTcpCluster"/>
-->
去掉注釋變為
<Cluster className="org.apache.catalina.ha.tcp.SimpleTcpCluster"/>
***群集詳細配置***
<Cluster className="org.apache.catalina.ha.tcp.SimpleTcpCluster"
channelSendOptions="8">
<Manager className="org.apache.catalina.ha.session.DeltaManager"
expireSessionsOnShutdown="false"
notifyListenersOnReplication="true"/>
<Channel className="org.apache.catalina.tribes.group.GroupChannel">
<Membership className="org.apache.catalina.tribes.membership.McastService"
address="228.0.0.4"
port="45564"
frequency="500"
dropTime="3000"/>
<Receiver className="org.apache.catalina.tribes.transport.nio.NioReceiver"
address="auto"
port="4000"
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"/>
<Interceptor className="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"/>
<ClusterListener className="org.apache.catalina.ha.session."/>
<ClusterListener className="org.apache.catalina.ha.session.ClusterSessionListener"/>
</Cluster>
配置應用的web.xml:
在每個webapps應用中,修改配置文件web.xml文件 添加元素<distributable/>
在web.xml文件中<web-app>元素下增加以下內容:
<!--此應用將與群集伺服器復制Session-->
<distributable/>
具體修改如下:
修改前:
<?xml version="1.0" encoding="ISO-8859-1"?>
<web-app xmlns="[url]http://java.sun.com/xml/ns/javaee[/url]"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://java.sun.com/xml/ns/javaee [url]http://java.sun.com/xml/ns/javaee/web-app_2_5.xsd[/url]"
version="2.5">
</web-app>
修改後:
<?xml version="1.0" encoding="ISO-8859-1"?>
<web-app xmlns="[url]http://java.sun.com/xml/ns/javaee[/url]"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://java.sun.com/xml/ns/javaee [url]http://java.sun.com/xml/ns/javaee/web-app_2_5.xsd[/url]"
version="2.5">
<!--此應用將與群集伺服器復制Session-->
<distributable/>
</web-app>
配置apache的ajp負載均衡功能:
確保將以下Mole的注釋去掉
LoadMole proxy_mole moles/mod_proxy.so
LoadMole proxy_connect_mole moles/mod_proxy_connect.so
LoadMole proxy_ftp_mole moles/mod_proxy_ftp.so
LoadMole proxy_http_mole moles/mod_proxy_http.so
LoadMole proxy_ajp_mole moles/mod_proxy_ajp.so
LoadMole proxy_balancer_mole moles/mod_proxy_balancer.so
LoadMole status_mole moles/mod_status.so
增加以下內容:
# Proxypass Config
Include conf/extra/httpd-modproxy.conf
建立文件httpd-modproxy.conf輸入內容:
<Location /server-status>
SetHandler server-status
Order Deny,Allow
Deny from all
Allow from all
</Location>
<Location /balancer-manager>
SetHandler balancer-manager
Order Deny,Allow
Deny from all
Allow from all
</Location>
ProxyRequests Off
ProxyPass / balancer://tomcatcluster stickysession=jsessionid nofailover=On
<Proxy balancer://tomcatcluster>
BalancerMember [url]http://192.168.232.5:8080[/url] loadfactor=1
BalancerMember [url]http://192.168.232.6:8080[/url] loadfactor=2
</Proxy>
注釋:
ProxyRequests Off 表示啟用反向代理,必須開啟;
ProxyPass為代理轉發的Url,即將所有訪問/的請求轉發到群集balancer://tomcatcluster,這里為/即將所有訪問/的請求轉發到群集balancer://tomcatcluster的/test目錄;
BalancerMember為群集的成員,即群集伺服器1或2,負載均衡伺服器會根據均衡規則來將請求轉發給BalancerMember;
調試負載均衡集群系統:
訪問apache伺服器的web服務:[url]http://192.168.232.4/balancer-manager[/url]
如果顯示負載均衡有關信息則說明成功了,接著可以訪問[url]http://192.168.232.4/[/url]即訪問到了tomcat的應用
***必須先啟動Tomcat服務再啟動Apache服務!***
參考文檔:
[url]http://tomcat.apache.org/tomcat-6.0-doc/cluster-howto.html[/url]
[url]http://tomcat.apache.org/tomcat-6.0-doc/balancer-howto.html[/url]
[url]http://man.chinaunix.net/newsoft/ApacheMenual_CN_2.2new/mod/mod_proxy.html[/url]
[url]http://man.chinaunix.net/newsoft/ApacheMenual_CN_2.2new/mod/mod_proxy_balancer.html[/url]