偶尔接触了一下集群,感觉挺有用的。试着配置了一下,过程中遇到了有些问题,总结一下,以备以后参考。
1.配置环境
JDK1.6,Tomcat6.0,Apache2.2这些基本安装就一笔带过了
2.测试安装情况
Jdk验证 cmd中查看jdk版本java -version jdk1.6.45
tomcat 登录http://localhost:8080 看到小猫
apache 登录http://localhost/ 看到It Works!
Ok ,All right.
3.配置文件的修改
1).Apache配置文件
a.${apache_home}/conf/httpd.conf
Listen 80 ------> Listen 127.0.0.1:80 #这个不一定需要
添加index.jsp到以下代码:
<IfModule dir_module>
DirectoryIndex index.html
</IfModule>
改为:
<IfModule dir_module>
DirectoryIndex index.html index.jsp
</IfModule>
将一下代码从注释状态释放出来
LoadModule proxy_module modules/mod_proxy.so
LoadModule proxy_ajp_module modules/mod_proxy_ajp.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 proxy_scgi_module modules/mod_proxy_scgi.so
Include conf/extra/httpd-vhosts.conf #虚拟主机配置
文件末尾添加一下代码:
ProxyRequests Off #关闭正向代理
<proxy balancer://cluster>
BalancerMember ajp://192.168.0.111:8009 loadfactor=1 route=jvm1 #ajp是apache和Tomcat的通信协议,端口号要和toamcat配置一直,开始的时候将ajp写成了http造成一直调试不通,页面报503错误
BalancerMember ajp://192.168.0.111:9009 loadfactor=1 route=jvm2
</proxy>
注意:修改了以上文件保存,保存文件后一定需要重启服务,就是在控制面板--》管理工具-->组件服务--》服务 或直接从apache控制面板中的service中启动,重启服务很重要,因为修改后没有重启服务,白白浪费了2个小时在调试上面。
b.${apache_home}/conf/extra/httpd_vhosts.conf
添加以下代码:
<VirtualHost *:80>
ServerAdmin zfy1355@gmail.com
ServerName 192.168.0.111 #本机Ip,刚开始使用127.0.0.1不知道什么原因没有成功,就没有再调试,或许是没有重启服务吧,呵呵
ServerAlias localhost
ProxyPass / balancer://cluster/ stickysession=jsessionid nofailover=On #有说
ProxyPassReverse / balancer://cluster/ #代理反转
ErrorLog "logs/error.log" #错误日志
CustomLog "logs/access.log" common #登录日志
</VirtualHost>
2)Tomcat配置
需要打开server.xml
两台Pc情况:
<Engine name="Catalina" defaultHost="localhost"> --》<Engine name="Catalina" defaultHost="localhost" jvmRoute="jvm1">
上面的jvmRoute要和httpd.conf配置的一致。
添加以下集群广播代码,以便session同步:
<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>
上述代码可以在Tomcat的doc中找到。
同一台Pc两只小猫
除了上述修改的位置,还要修改端口。因为是同一台机器,所以不能使用同样的port,在第二只猫的
<Server port="8005" shutdown="SHUTDOWN">
<Connector port="8080" protocol="HTTP/1.1"
connectionTimeout="20000"
redirectPort="8443" />
<Connector port="8009" protocol="AJP/1.3" redirectPort="8443" />
三个位置修改port,笔者分别改为9005,9080,9009。
有朋友说需要修改下面代码中的port,且port值范围为4001-4009,笔者没有修改,Tomcat启动时自动获取了port值
<Receiver className="org.apache.catalina.tribes.transport.nio.NioReceiver"
address="auto"
port="4000"
autoBind="100"
selectorTimeout="5000"
maxThreads="6"/>
3)Tomcat的web.xml
在每只小猫的web.xml中加入以下代码,方便session共享:
<distributable/> <!--位置在</web-app>里面就可以-->
到此就算配置好了。
4.验证
经过以上的配置,集群就算是搭建起来了,启动tomcat,apache服务器,地址栏输入http://localhost/ 是否看到小猫了,看到了证明就是Ok了。
为了证明集群的负载均衡,在Tomcat webapps/examples/目录下生成pressTest.jsp
pressTest.jsp 内容:<%System.out.println("You are Visiting Tomcat X“);%>
X为Tomcat的区别数字
使用apache 的压力测试命令:ab -n1000 -c10 http://localhost/examples/pressTest.jsp //-n1000访问1000次 -c10并发10
看两个小猫的控制台,分别打印了各自的输出。
收工,继续学习。