Fork me on GitHub
Suzf  Blog

Tag tomcat

Nginx+Redis+Tomcat实现session共享的集群

Nginx 作为目前最流行的开源反向代理HTTP Server,用于实现资源缓存、web server负载均衡等功能,由于其轻量级、高性能、高可靠等特点在互联网项目中有着非常普遍的应用,相关概念网上有丰富的介绍。分布式web server集群部署后需要实现session共享,针对 tomcat 服务器的实现方案多种多样,比如 tomcat cluster session 广播、nginx IP hash策略、nginx sticky module等方案,本文主要介绍了使用 redis 服务器进行 session 统一存储管理的共享方案。

使 用Nginx作为Tomcat的负载平衡器,Tomcat的会话Session数据存储在Redis,能够实现0当机的7×24运营效果。因为将会话存储 在Redis中,因此Nginx就不必配置成stick粘粘某个Tomcat方式,这样才能真正实现后台多个Tomcat负载平衡,用户请求能够发往任何 一个tomcat主机,当我们需要部署新应用代码时,只要停止任何一台tomcat,所有当前在线用户都会导向到运行中的tomcat实例,因为会话数据 被序列化到Redis,在线用户不会受到影响,一旦停掉的tomcat实例上线,另外其他重复部署过程。

Tomcat 自动更新脚本

之前总是要更新基于 Tomcat 的web项目,而且更新频繁。 手工更新太烦人了,遂写了一个半自动的脚本。已经一年多没接触 Tomcat ,脚本仅供参考 。

#!/bin/bash
# Author: Jeffery.Su
# Mail: [email protected]
# Site: http://suzf.net
# Date: Jun 1,2014
# Version: 1.0.2

# Definite variable
PRO_NAME=javacenter
WORK_PATH=/usr/local/tomcat/webapps
BACK_PATH=/opt/backup/${PRO_NAME}
UPLOAD_PATH=/root/$PRONAME
DATE=$(date '+%Y%m%d')
BACK_NAME="$PRO_NAME-$DATE.tar.gz"
#eval `date "+day=%d; month=%m; year=%Y"`
#BACK_NAME="$PRO_NAME-$year-$month-$day.tar.gz"

# Backup and Gzip the whole folder
[ -d $BACK_PATH ] || mkdir -p $BACK_PATH
cd $WORK_PATH
tar Ppzcf $BACK_PATH/$BACK_NAME $PRO_NAME
echo -e " $(date) Loading backup programmer, please waiting a moment....\n"
if [ $? -eq 0 ];then
echo -e " $(date) Backup the file succeed !\n"
else
echo -e " $(date) Backup the file failed ! please check !!!\n"
return 1;
fi

# Move the current webapps
mv $PRONAME/ $BACK_PATH/$BACK_NAME
rm -rvf $PRONAME.war

# Upload the new webapps
# Check the file complete upload
[ -d $UPLOAD_PATH ] || mkdir $UPLOAD_PATH
mv $UPLOAD_PATH/$PRO_NAME/* .
if [ "$?" == "0" ];then
echo "Please upload the webapps to $UPLOAD_PATH"
sleep 360;
fi

# Restart tomcat
echo -e " $(date) Stop tomcat\n"
../bin/shutdown.sh

i=0
while (($i <5)) do 
  PID=`ps aux|grep tomcat |grep -v "grep\|sh"|awk '{print $2}'` 
  if [[ "$PID" == "" ]];then
    echo "$PID not exits , tomcat hava stop success"
  else 
   echo "$PID is exits , tomcat is running" 
   let "i++" 
   sleep 5; 
   echo "$(date) Forced to stop tomcat" 
   # kill -9 $PID 
  fi 
done 
echo -e "$(date) start tomcat\n" 
../bin/startup.sh 
# Remove the old backups 
find $BACK_PATH -mtime +15 -exec rm -rf {}\; > /dev/null 2>&1

# Watch the log of catalina.out
#tailf ../logs/catalina.out

 

Zabbix之JMX监控Tomcat

zabbix从2.0开始添加了支持用于监控JMX应用程序的服务进程,称为"ZabbixJavagateway";它是用java写的一个程序。

一.工作原理:

zabbixserver想知道一台主机上的特定的JMX值时,它向ZabbixJavagateway询问,而ZabbixJavagateway使用"XmanagementAPI"询特定的应用程序,而前提是应用程序这端在开启时需要&l"com.sun.management.jmxremote&r"来开启JMX查询就行了。

Zabbixserver有一个特殊的进程用来连接Javagateway叫StartJavaPollers;Javagateway通过配置文件中START_POLLERS参数设置启动多个线程,在zabbix服务器这边如果一个连接所用时间超过Timeout,将会被中断,但是Javagateway将继续从JMXcounter取数据。所以

StartJavaPollers设置的值要小于等于START_POLLERS设置的值。

ZabbixJavagateway就相当于一个代理。