以spring中配置为例:
<bean id="cs-dataSource" class="com.mchange.v2.c3p0.ComboPooledDataSource" destroy-method="close">
<property name="driverClass" value="oracle.jdbc.driver.OracleDriver" />
<property name="jdbcUrl" value="jdbc://" />
<property name="user" value="username" />
<property name="password" value="password" />
<property name="minPoolSize" value="2" />
<property name="maxPoolSize" value="10" />
<property name="preferredTestQuery" value="SELECT SYSDATE FROM DUAL" /> <!-- 测试数据库连接SQL语句-->
<property name="breakAfterAcquireFailure" value="true" /> <!-- 取得连接失败后返回,非阻塞,自动重连所需参数 -->
<property name="connectionTesterClassName" value="com.mchange.v2.c3p0.impl.DefaultConnectionTester" /> <!-- 数据库连接测试类 -->
<property name="idleConnectionTestPeriod" value="1800" /> <!-- 空闲连接测试间隔,秒为单位-->
<property name="acquireIncrement" value="5" />
<property name="maxIdleTime" value="3600" /> <!-- 最长空闲时间 -->
<property name="maxIdleTimeExcessConnections" value="600" />
<property name="initialPoolSize" value="2" />
<property name="acquireRetryAttempts" value="0" /> <!-- 自动重连尝试次数,小于等于0表示无限制 -->
<property name="acquireRetryDelay" value="30000" /> <!-- 自动重连间隔时间,毫秒为单位 -->
<property name="testConnectionOnCheckout" value="false" />
<property name="testConnectionOnCheckin" value="true" /> <!--连接检出时进行测试 -->
<property name="checkoutTimeout" value="5000" />
</bean>
2008年2月28日星期四
2008年2月27日星期三
Tomcat 6 集群配置
所需软件:
- tomcat 6.0.16
- apache-2.2.8
- mod_jk 1.2.26
- 修改两台tomcat的server.xml
加入:<Cluster className="org.apache.catalina.ha.tcp.SimpleTcpCluster"
address及port可修改为不同的值,但集群内的配置必须相同。
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>
在Engine配置项中加入jvmRoute如下: - 配置Session复制
- 所有需要复制的session属性必须实现
java.io.Serializable。 - 需要复制Session的应用web.xml加入
<distributable/>元素。 - 如果使用mod_jk,需要在server.xml中配置Engine的jvmRoute,例如:<Engine name="Catalina" defaultHost="localhost" jvmRoute="node01" >,jvmRoute的名称要和workers.properties中匹配,且集群中的每一个节点都有自己的jvmRoute,不能重复。
- 集群中的节点时间应使用ntp服务同步。
- apache中配置sticky session
- 需要jdk 1.5
- 所有需要复制的session属性必须实现
- 配置apache
- 将mod_jk.so复制到modules目录中
- 修改httpd.conf,加入
LoadModule jk_module modules/mod_jk.so
JkWorkersFile conf/workers.properties
JkLogFile logs/mod_jk.log
JkLogLevel info
JkLogStampFormat "[%a %b %d %H:%M:%S %Y] "
JkOptions +ForwardKeySize +ForwardURICompat -ForwardDirectories
JkRequestLogFormat "%w %V %T"
JkMount /*.jsp controller - 在conf目录下新建文本文件workers.properties,内容:
worker.list = controller,node01,node02
worker.node01.port=8009
worker.node01.host=localhost
worker.node01.type=ajp13
worker.node01.lbfactor = 1
worker.node02.port=8009
worker.node02.host=10.100.1.156
worker.node02.type=ajp13
worker.node02.lbfactor = 1
worker.controller.type=lb
worker.controller.balance_workers=node01,node02
worker.controller.sticky_session=1
node01,node02是节点机器的jvmRoute名称,port及host根据具体配置修改
- 测试
创建一个web应用,在web.xml中添加<distributable/>,应用根目录下编辑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>");
// 如果有新的 Session 属性设置
String dataName = request.getParameter("dataName");
if (dataName != null && dataName.length() > 0) {
String dataValue = request.getParameter("dataValue");
session.setAttribute(dataName, dataValue);
}
out.print("<b>Session 列表</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="test.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>
浏览器中打开http://localhost/ClusterSession/test.jsp,添加Session属性,停掉第一个tomcat节点,刷新原有页面,发现Session已经被复制到第二台节点,apache也将浏览器导向了第二节点,集群已经生效。
订阅:
评论 (Atom)