设置jkmod的配置文件,conf.d/文件夹下建立mod_jk.conf,(需要mod_jk模块,没有模块需要下载源码编译然后丢到/usr/lib/http/moudle文件夹里并在http.conf文件中load)。配置如下
配置比较简单也容易理解,定义模块配置文件位置,日志位置、格式等,最重要是定义了什么类型的文件送给tomcat处理,这里定义所有jsp、do文件送tomcat
JkWorkersFile /etc/httpd/conf.d/workers.properties
JkShmFile /var/log/httpd/mod_jk.shm
JkLogFile /var/log/httpd/mod_jk.log
JkLogLevel debug //调试完设置成info
JkLogStampFormat "[%a %b %d %H:%M:%S %Y]"
JkOptions +ForwardKeySize +ForwardURICompat -ForwardDirectories
JkRequestLogFormat "%w %V %T"
JkMount /servlet/* loadbalancer
JkMount /*.jsp loadbalancer
JkMount /*.do loadbalancer
注:对于虚拟主机,jkmount和jklogfile等是可以单独配置的,JkWorkerFile只能全局
在JkWorkersFile指定的位置建立配置文件
worker.list=loadbalancer,tomcat1,tomcat2 //定义应用服务tomcat1、2,都负责负载服务。loadbalancer是调度服务,负责均衡负载。
worker.tomcat1.host=192.168.44.200 //定义服务器位置,这里定义了tomcat1的ip,所以ip为200的机器里server.xml里要设置jvmRoute="tomcat1",jvmRoute不设置或设置相同的话会区别不出是集群中的哪个tomcat
worker.tomcat1.lbfactor=1 //优先级
worker.tomcat1.type=ajp13 //协议类型,这里都制定ajp13
worker.tomcat1.port=8009 //端口,tomcat默认端口,这里改的话相应tomcat服务器也要改配置
worker.tomcat1.socket_keepalive=1
worker.tomcat2.host=192.168.44.208
worker.tomcat2.lbfactor=1
worker.tomcat2.type=ajp13
worker.tomcat2.port=8009
worker.tomcat2.socket_keepalive=1 //防止防火墙切断不在使用的连接,通知操作系统向不在使用的连接发送KEEP_ALIVE消信。
worker.loadbalancer.type=lb //定义loadbalancer的类型是lb,也就是负责均衡负载
worker.loadbalancer.balance_workers=tomcat1,tomcat2 //定义调用哪几个
worker.loadbalancer.sticky_session=0 //值为0定义tomcat不保持访问端的连接,也就是访问端刷新后由lb分配连接到指定的tomcat,调试的时候先关闭。如果希望刷新后只连接原来的tomcat,设置为1
测试用jsp
<%@ page contentType="text/html; charset=UTF-8" %>
<%@ page import="java.util.*" %>
Cluster App TestServer Info:
<%
out.println(request.getLocalAddr() + " : " + request.getLocalPort()+"
");%>
<%
out.println("
ID " + session.getId()+"
");
String dataName = request.getParameter("dataName");
if (dataName != null && dataName.length() > 0) {
String dataValue = request.getParameter("dataValue");
session.setAttribute(dataName, dataValue);
}out.print("Session 列表");Enumeration e = session.getAttributeNames();
while (e.hasMoreElements()) {
String name = (String)e.nextElement();
String value = session.getAttribute(name).toString();
out.println( name + " = " + value+"
");
System.out.println( name + " = " + value);
}
%>
名称:
值:
可以在body后面加不同颜色以区分连接的tomcat
tomcat集群通过多播(组播)来进行通讯,在多网卡状态不做绑定设置接受多播的网卡可能会设置在外网网卡上,查看多播相关资料
已经定义的多播地址
常用
“224.0.0.0----224.0.0.255范围内的地址被分配给了低层次的协议。向这些范围内的地址发送数据包,有组播功能的路由器将不会为其提供路由。
239.0.0.0----239.255.255.255间的地址分配用做管理用途。这些地址被分配给局部的每一个组织,但不可以分配到组织外部,组织内的路由器不向在组织外的地址提供路由。”
tomcat默认多播为228.0.0.4——不同tomcat集群之间需要不同多播地址,未定义的可用多播地址都可以使用
测试,直接启动tomcat,运行netstat -ng(-g选项查看多播情况) 发现多播果然在eth0上,而我们的集群为内网集群,多播不应该在wan网卡上,修改servers.xml中集群相关位置
address="228.0.0.4"
port="45564"
frequency="500"
dropTime="3000"/>
需要address前增加bind=”192.168.0.200”来指定接受多播的IP地址,修改后重启tomcat,发现多播地址绑定在了192.168.0.200的网卡上了
此为tomcat6的集群配置5系列集群配置文件应该有相应修改
5系列中用mcastAddr来定义多播与6系列不一样,bind应该为mcastBindAddress
mcastAddr="228.0.0.4"
mcastPort="45564"
mcastFrequency="500"
mcastDropTime="3000"/>
即添加mcastBindAddress=”192.168.0.200”
实例
conf.d/workers.properties
worker.list=tomcat
worker.tomcat.host=127.0.0.1
worker.tomcat.type=ajp13
worker.tomcat.port=8009
worker.tomcat.socket_keepalive=1
httpd.conf
JkWorkersFile /etc/httpd/conf.d/workers.properties
JkShmFile /var/log/httpd/mod_jk.shm
JkLogFile /var/log/httpd/mod_jk.log
JkLogLevel error
JkLogStampFormat "[%a %b %d %H:%M:%S %Y]"
JkOptions +ForwardKeySize +ForwardURICompat -ForwardDirectories
JkRequestLogFormat "%w %V %T"
Include /etc/httpd/conf.d/*.webconf
conf./test.webconf
DocumentRoot /var/www/test
ServerName test.myweb.com
Options FollowSymLinks
JkMount /* tomcat
阅读(1244) | 评论(0) | 转发(0) |