Tag Archives: tomcat

Tomcat 集群之 Persistent session

之前写过一篇tomcat的简单集群,但是只适合小规模的集群。 今天研究了一下把tomcat的session保存在数据库中,不是很复杂,写下来供大家参考。

准备工作:

  1. 两架Ubuntu Server 12.04 64位,确定两级服务器可以互相ping的通并属于同一个网段
  2. 安装jdk1.6或者jdk1.7
  3. 安装tomcat 6或者tomcat7
  4. 测试multicast 参考文章http://php-yhjhoo.rhcloud.com/archives/840.html
  5. 在你的程序中的web.xml中加入<distributable/> 并测试是否可以运行
  6. 确认所有的session 属性全部有implements java.io.Serializable

1. 修改conf/context.xml 加入如下内容:

<Manager className='org.apache.catalina.session.PersistentManager'
		saveOnRestart='false' minIdelSwap='0' maxIdleSwap='0'  maxIdleBackup='1'> 
		<Store className="org.apache.catalina.session.JDBCStore" 
			driverName="com.mysql.jdbc.Driver"
			connectionURL="jdbc:mysql://localhost/tomcat_session?user=root&amp;password=123456"
			sessionTable="sessions" 
			sessionIdCol="session_id"
			sessionDataCol="session_data"
			sessionValidCol="valid_session" 
			sessionMaxInactiveCol="max_inactive"
			sessionLastAccessedCol="last_access"
			checkInterval="10"
			sessionAppCol='app_name' />
	</Manager>

这种配置将会把所有这个tomcat下面的session全部复制到数据库中,如果你只想要复制某个程序的话,将这个context.xml 保存到META-INF里面

2. 将mysql的jdbc 驱动复制到tomcat/lib下面

3. 修改catalina.sh, 在其最上面加入

JAVA_OPTS='-Dorg.apache.catalina.session.StandardSession.ACTIVITY_CHECK=true'


完毕,你现在可以部署程序测试了

参考文章:http://www.intelligrape.com/blog/2010/07/21/tomcat-6-session-persistence-through-jdbcstore/
http://tomcat.apache.org/tomcat-6.0-doc/config/manager.html
http://www.datadisk.co.uk/html_docs/java_app/tomcat6/tomcat6_clustering.htm

Tomcat 简单集群之session Replication

做一个小型的tomcat集群没有想象中的那么复杂,但是需要你具备一定的网络知识和java开发经验

所涉及的知识:

  1. 服务器安装经验
  2. 网络经验: 服务器IP设置和multicast 测试
  3. Java session对象 Serializable

准备工作:

  1. 两架Ubuntu Server 12.04 64位,确定两级服务器可以互相ping的通并属于同一个网段
  2. 安装jdk1.6或者jdk1.7
  3. 安装tomcat 6或者tomcat7
  4. 测试multicast 参考文章http://php-yhjhoo.rhcloud.com/archives/840.html
  5. 在你的程序中的web.xml中加入<distributable/> 并测试是否可以运行
  6. 确认所有的session 属性全部有implements java.io.Serializable

假设上述工作全部做完。

修改hosts文件

  1. 在服务器中执行命令
    $hostname
    ubuntu1
    
  2. 你的服务器名字是ubuntu1, 执行命令 $ping ubuntu1,假如你看到的回执是127.0.0.1请执行第三步和第四步
  3. $ifconfig 
    eth0      Link encap:Ethernet  HWaddr 08:00:27:af:5c:2d  
              inet addr:192.168.56.101  Bcast:192.168.56.255  Mask:255.255.255.0
              inet6 addr: fe80::a00:27ff:feaf:5c2d/64 Scope:Link
              UP BROADCAST RUNNING MULTICAST  MTU:1500  Metric:1
              RX packets:1863 errors:0 dropped:0 overruns:0 frame:0
              TX packets:1373 errors:0 dropped:0 overruns:0 carrier:0
              collisions:0 txqueuelen:1000 
              RX bytes:176018 (176.0 KB)  TX bytes:742825 (742.8 KB)
    
  4. 将下面的加入你的 /etc/hosts文件里面

     

    192.168.56.101    ubuntu1
    

 

修改Tomcat的server.xml   

<Cluster className="org.apache.catalina.ha.tcp.SimpleTcpCluster">  
               <Manager className="org.apache.catalina.ha.session.DeltaManager"
                            expireSessionsOnShutdown="false"
                            notifyListenersOnReplication="true"/>
</Cluster>

完整的server.xml在这里下载


部署测试

参考文章:http://tomcat.apache.org/tomcat-7.0-doc/cluster-howto.html
http://tomcat.apache.org/tomcat-6.0-doc/cluster-howto.html
http://www.ramkitech.com/2012/11/tomcat-clustering-series-part-3-session.html

Tomcat Muticast Testing

iperf 是一个在linux下和windows下都可以用的软件

ubuntu 安装:

sudo apt-get install iperf

tomcat 在session Replication 使用DeltaManager需要用到multicast, 在配置tomcat简单集群的时候最好测试一下,以下所用参数全被为tomcat默认参数。

接受端

iperf -s -u -B 228.0.0.4 -i 1 -p 45564

发送端

iperf -c 228.0.0.4 -u -T 32 -t 3 -i 1 -p 45564

参考文章:http://serverfault.com/questions/211482/tools-to-test-multicast-routing

Ubuntu 中取代chkconfig 的命令

chkconfig 原本是Red Hat中的管理命令,后来被ubuntu学习了。随着ubuntu的不断升级,这个被当做外来的命令越来越难用。经常出来很多错误,后来到ubuntu 12.10,默认安装直接不能用了,虽然可以通过一些修改使其工作,显得不完美。我们都是追求完美的生物,所以经过一番搜索。发现了sysv-rc-conf

具体用法:

sudo apt-get install sysv-rc-conf

sysv-rc-conf --list

查看apache的启动情况:

sysv-rc-conf --list apache2

apache2      0:off	1:off	2:on	3:on	4:on	5:on	6:off

Tomcat linux 开机启动

tomcat shell 代码

#! /bin/sh
# This shell script takes care of starting and stopping
# the glassfish DAS and glassfish instance.
#
# chkconfig: - 64 36
# description: Tomcat auto start
# /etc/init.d/tomcatd
# Tomcat auto-start
# Source function library.
#. /etc/init.d/functions
# source networking configuration.
#. /etc/sysconfig/network
RETVAL=0
#export JRE_HOME=/usr/jre1.6.0_22
export CATALINA_HOME=/opt/apache-tomcat-6.0.35
export CATALINA_BASE=/opt/apache-tomcat-6.0.35
start()
{
        if [ -f $CATALINA_HOME/bin/startup.sh ];
          then
            echo $"Starting Tomcat"
                $CATALINA_HOME/bin/startup.sh
            RETVAL=$?
            echo " OK"
            return $RETVAL
        fi
}
stop()
{
        if [ -f $CATALINA_HOME/bin/shutdown.sh ];
          then
            echo $"Stopping Tomcat"
                $CATALINA_HOME/bin/shutdown.sh
            RETVAL=$?
            sleep 1
            ps -fwwu yhjhoo | grep apache-tomcat|grep -v grep | grep -v PID | awk '{print $2}'|xargs kill -9
            echo " OK"
            # [ $RETVAL -eq 0 ] && rm -f /var/lock/...
            return $RETVAL
        fi
}

case "$1" in
 start) 
        start
        ;;
 stop)  
        stop
        ;;
                                                
 restart)
         echo $"Restaring Tomcat"
         $0 stop
         sleep 1
         $0 start
         ;;
 *)
        echo $"Usage: $0 {start|stop|restart}"
        exit 1
        ;;
esac
exit $RETVAL

将上面shell 复制到/etc/init.d/tomcat 。
sudo chmod +x /etc/init.d/tomcat

测试/etc/init.d/tomcat start  

如果测试成功的话
chkconfig –add tomcat
chkconfig  tomcat on

之后进行重启测试