非常感谢 http://andashu.blog.51cto.com/8673810/1381369
一、安装JDK
export JAVA_HOME=/opt/jdk1.6.0_45
export PATH=$JAVA_HOME/bin:$PATH
export CLASSPATH=".;$JAVA_HOME/lib/dt.jar;$JAVA_HOME/lib/tools.jar:$CLASSPATH"
二、安装TOMCAT
apache-tomcat-7.0.41.tar.gz
#tar -zxvf apache-tomcat-6.0.18.tar.gz
#./apache-tomcat-6.0.18/bin/startup.sh
重启命令:
#./apache-tomcat-6.0.18/bin/shutdown.sh
#./apache-tomcat-6.0.18/bin/startup.sh
三、TOMCAT集群
1.两个tomcat
#mv apache-tomcat-6.0.18 /usr/local/TC6_A
#cd /usr/local
#cp -a TC6_A TC6_B
2.修改 两个Tomcat 实例监听的端口
# vim /usr/local/TC6_A/conf/server.xml
Server | <Server port="8005" shutdown="SHUTDOWN"> | <Server port="10005" shutdown="SHUTDOWN"> | 20005 |
AJP Connector |
<!-- Define an AJP 1.3 Connector on port 8009 --> |
<!-- Define an AJP 1.3 Connector on port 8009 --> |
10009 20043 |
HTTP Connector |
<Connector port = "8080" protocol = "HTTP/1.1" connectionTimeout = "20000" |
<Connector port = "10001" protocol = "HTTP/1.1" connectionTimeout = "20000" |
20001 20043 |
Engine |
<!-- You should set jvmRoute to support load-balancing via AJP ie : |
<Engine name = "Standalone" defaultHost = "localhost" jvmRoute = " Tomcat1"> | Tomcat2 |
Cluster | <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.JvmRouteSessionIDBinderListener" /> <ClusterListener className = "org.apache.catalina.ha.session.ClusterSessionListener" /> </Cluster> |
可访问 http://192.168.0.101:10001 http://192.168.0.101:20001
3、测试页面
/usr/local/TC6_A/webapps/ROOT 、/usr/local/TC6_B/webapps/ROOT 目录下 vim Hello.jsp。
<%@ page contentType="text/html;charset=GBK"%>
<html>
<head>
<title>Tomcat 测试 </title>
</head>
<body>
<font color="red" size="20">
<!— 使用 out 内建对象打印一条消息到输出页面 -->
<% out.print( "Tomcat 集群测试 A !!! " ); %>
</font>
</body>
</html>
TC6_B的改一行输出:
<% out.print( "Tomcat 集群测试 B !!! " ); %>
可访问 http://192.168.0.101:10001/Hello.jsp 、http://192.168.0.101:20001/Hello.jsp
四、Apache负载均衡器
1.安装
# tar -zxvf httpd-2.4.10.tar.gz
# cd httpd-2.4.10
#./configure --prefix=/usr/local/apache2 --enable-cache --enable-disk-cache -enable-mem-cache --enable-file-cache --with-ssl --enable-ssl --enable-so --enable-mime-magic --enable-proxy --enable-proxy-ajp --enable-proxy-balancer --enable-mods-shared=most --with-mpm=worker --with-apr-util=/usr/local/apr-util --with-pcre=/usr/local/pcre/
# make
# make install
2.配置Apache 为 Tomcat 集群的负载均衡器
vim /usr/local/apache2/conf/httpd.conf
加载:
LoadModule rewrite_module modules/mod_rewrite.so
LoadModule slotmem_shm_module modules/mod_slotmem_shm.so
LoadModule speling_module modules/mod_speling.so
LoadModule ssl_module modules/mod_ssl.so
##################################################
#:如果只是修改配置 不编译重装的话 打开:
LoadModule proxy_module modules/mod_proxy.so
LoadModule proxy_ajp_module modules/mod_proxy_ajp.so
LoadModule rewrite_module modules/mod_rewrite.so
LoadModule proxy_balancer_module modules/mod_proxy_balancer.so
LoadModule proxy_connect_module modules/mod_proxy_connect.so
LoadModule proxy_ftp_module modules/mod_proxy_ftp.so
LoadModule proxy_http_module modules/mod_proxy_http.so
LoadModule slotmem_shm_module modules/mod_slotmem_shm.so
LoadModule speling_module modules/mod_speling.so
LoadModule ssl_module modules/mod_ssl.so
##################################################
末尾添加:
ProxyRequests Off
ProxyPass / balancer://myCluster/
<Proxy balancer://myCluster/>
BalancerMember ajp://localhost:10009 route=Tomcat1
BalancerMember ajp://localhost:20009 route=Tomcat2
</Proxy>
说明:其中" myCluster "是集群的名称," ajp://localhost:10009 route=Tomcat1 " 对应 Tomcat 集群中的 TC6_A 实例," ajp://localhost:20009 route=Tomcat2 " 对应 Tomcat 集群中的 TC6_B 实例。
3.访问页面
- 重启apache httpd后,访问:http://192.168.0.101/Hello.jsp
由 于 Apache 为 Tomcat 集群的负载均衡器,使用的是轮换算法,其均匀地将请求发送到集群中的各个 Tomcat 实例。因此轮换访问两个不同 Tomcat 实例中的 Hello.jsp 。
[root@centos1 opt]# netstat -tnlp
Active Internet connections (only servers)
Proto Recv-Q Send-Q Local Address Foreign Address State PID/Program name
tcp 0 0 0.0.0.0:22 0.0.0.0:* LISTEN 1078/sshd
tcp 0 0 127.0.0.1:25 0.0.0.0:* LISTEN 1554/master
tcp 0 0 :::20009 :::* LISTEN 2427/java
tcp 0 0 :::3306 :::* LISTEN 1452/mysqld
tcp 0 0 :::80 :::* LISTEN 23130/httpd
tcp 0 0 :::30001 :::* LISTEN 2471/java
tcp 0 0 :::10001 :::* LISTEN 2396/java
tcp 0 0 :::81 :::* LISTEN 1564/httpd
tcp 0 0 ::ffff:127.0.0.1:30005 :::* LISTEN 2471/java
tcp 0 0 ::ffff:127.0.0.1:10005 :::* LISTEN 2396/java
tcp 0 0 :::22 :::* LISTEN 1078/sshd
tcp 0 0 :::30009 :::* LISTEN 2471/java
tcp 0 0 :::10009 :::* LISTEN 2396/java
tcp 0 0 ::1:25 :::* LISTEN 1554/master
tcp 0 0 ::ffff:127.0.0.1:4000 :::* LISTEN 2396/java
tcp 0 0 ::ffff:127.0.0.1:4001 :::* LISTEN 2427/java
tcp 0 0 :::20001 :::* LISTEN 2427/java
tcp 0 0 ::ffff:127.0.0.1:4002 :::* LISTEN 2471/java
tcp 0 0 ::ffff:127.0.0.1:20005 :::* LISTEN 2427/java