Tomcat 利用memcached实现会话Cluster复制和高可用性。 Tomcat8 和 memcached 1.5.22安装在同一台主机(也可以安装在不同主机上,通过网络通信交互数据,考虑到实验的快捷,本次就安装在同一主
Tomcat 利用memcached实现会话Cluster复制和高可用性。 Tomcat8 和 memcached 1.5.22安装在同一台主机(也可以安装在不同主机上,通过网络通信交互数据,考虑到实验的快捷,本次就安装在同一主机上),采用sticky 模式实现。
1. 理解MSM sticky工作模式
sticky工作模式:在Tomcat本机上(t1)存一份session,在后端的session共享器 (memcached或者redis)m2上(一般为交叉节点)也存放一份副本,当m2故障了,新session会被写入到t1 和 m1 上去,同时m2故障发生同时还存活在t1上的session 还会被写到m1 上去。t2接收的session同样的方式被存放和容错。
The following description shows an example for a setup with sticky sessions, with two instances of tomcat and two instances of memcached installed.Tomcat-1 (t1) will primarily store it's sessions in memcached-2 (m2) which is running on another machine (m2 is a regular node for t1). Only if m2 is not available, t1 will store it's sessions in memcached-1 (m1, m1 is the failoverNode for t1). With this configuration, sessions won't be lost when machine 1 (serving t1 and m1) crashes. The following really nice ASCII art shows this setup.
<t1> <t2>
. \ / .
. X .
. / \ .
<m1> <m2>
2. 架构拓扑及主机
IP
主机名
角色
软件
192.168.250.8
proxy.shone.cn
反向代理调度
nginx
192.168.250.58
t58.shone.cn
Tomcat 主机58
JDK、Tomcat、Memcached
192.168.250.68
t68.shone.cn
Tomcat 主机68
JDK、Tomcatt、Memcached
环境准备:时间同步,确保NTP或Chrony服务正常运行。
防火墙规则
禁用SELinux
3. Nginx 反向代理服务器配置
# 关闭防火墙、优化CentOS、修改主机名等[root@CentOS84-IP08 ]#hostnamectl set-hostname proxy.shone.cn
[root@CentOS84-IP08 ]#exit
[root@proxy ]#hostname
proxy.shone.cn
[root@proxy ]#timedatectl set-timezone Asia/Shanghai
[root@proxy ]#sed -i 's/pool 2.centos.pool.ntp.org iburst/server ntp1.aliyun.com iburst/g' /etc/chrony.conf
[root@proxy ]#systemctl enable --now chronyd.service
# 修改本地的主机名解析
[root@proxy ]#vim /etc/hosts
[root@proxy ]#cat /etc/hosts
192.168.250.8 proxy.shone.cn proxy
192.168.250.58 t58.shone.cn t58
192.168.250.68 t68.shone.cn t68
[root@proxy ]#
# 安装Nginx
[root@proxy ]#yum -y install nginx
# 配置Nginx
[root@proxy ]#vim /etc/nginx/nginx.conf
[root@proxy ]#cat /etc/nginx/nginx.conf
user nginx;
worker_processes auto;
error_log /var/log/nginx/error.log;
pid /run/nginx.pid;
# Load dynamic modules. See /usr/share/doc/nginx/README.dynamic.
include /usr/share/nginx/modules/*.conf;
events {
worker_connections 1024;
}
http {
log_format main '$remote_addr - $remote_user [$time_local] "$request" '
'$status $body_bytes_sent "$http_referer" '
'"$http_user_agent" "$http_x_forwarded_for"';
access_log /var/log/nginx/access.log main;
sendfile on;
tcp_nopush on;
tcp_nodelay on;
keepalive_timeout 65;
types_hash_max_size 2048;
include /etc/nginx/mime.types;
default_type application/octet-stream;
upstream tomcat-servers {
#ip_hash;
#hash $cookie_JSESSIONID
server t58.shone.cn:8080;
server t68.shone.cn:8080;
}
server {
location ~* \.(jsp|do)$ {
proxy_pass http://tomcat-servers;
}
}
}
# 启动Nginx服务
[root@proxy ]#systemctl enable --now nginx
Created symlink /etc/systemd/system/multi-user.target.wants/nginx.service → /usr/lib/systemd/system/nginx.service.
[root@proxy ]#systemctl reload nginx
[root@proxy ]#
[root@proxy ]#
[root@proxy ]#ss -tln
State Recv-Q Send-Q Local Address:Port Peer Address:Port Process
LISTEN 0 511 [::]:80 [::]:*
[root@proxy ]#
4. 配置后端两台服务器
4.1 配置基础环境
4.1.1 t68主机
#### t68.shone.cn 的配置过程[root@CentOS84-IP68 ]#cd /data/
[root@CentOS84-IP68 ]#hostnamectl set-hostname t68.shone.cn
[root@CentOS84-IP68 ]#exit
[root@t68 ]#cd /data/
# 用脚本完成时间同步,主机名修改
[root@t68 ]#vim /data/xjzth.sh
timedatectl set-timezone Asia/Shanghai
sed -i 's/pool 2.centos.pool.ntp.org iburst/server ntp1.aliyun.com iburst/g' /etc/chrony.conf
systemctl enable --now chronyd.service
systemctl restart chronyd.service
date
[root@t68 ]#
[root@t68 ]#bash xjzth.sh
#### 准备好Tomcat和JDK安装包,用脚本一键完成安装
[root@t68 ]#ll
total 151880
-rw-r--r-- 1 root root 10577344 Apr 15 23:59 apache-tomcat-8.5.78.tar.gz
-rw-r--r-- 1 root root 3104 Apr 15 23:59 install_tomcat2022.sh
-rw-r--r-- 1 root root 144935989 Apr 15 23:59 jdk-8u291-linux-x64.tar.gz
-rw-r--r-- 1 root root 637 Apr 15 23:59 xjzth.sh
# 安装tomcat 和 jdk,注意脚本中的软件包的名称要和上面准备好的完全相同
[root@t68 ]#vim /data/install_tomcat2022.sh
DIR=`pwd`
JDK_FILE="jdk-8u291-linux-x64.tar.gz"
TOMCAT_FILE="apache-tomcat-8.5.78.tar.gz"
JDK_DIR="/usr/local"
TOMCAT_DIR="/usr/local"
color () {
RES_COL=60
MOVE_TO_COL="echo -en \\033[${RES_COL}G"
SETCOLOR_SUCCESS="echo -en \\033[1;32m"
SETCOLOR_FAILURE="echo -en \\033[1;31m"
SETCOLOR_WARNING="echo -en \\033[1;33m"
SETCOLOR_NORMAL="echo -en \E[0m"
echo -n "$2" && $MOVE_TO_COL
echo -n "["
if [ $1 = "success" -o $1 = "0" ] ;then
${SETCOLOR_SUCCESS}
echo -n $" OK "
elif [ $1 = "failure" -o $1 = "1" ] ;then
${SETCOLOR_FAILURE}
echo -n $"FAILED"
else
${SETCOLOR_WARNING}
echo -n $"WARNING"
fi
${SETCOLOR_NORMAL}
echo -n "]"
echo
}
install_jdk(){
if ! [ -f "$DIR/$JDK_FILE" ];then
color 1 "$JDK_FILE 文件不存在"
exit;
elif [ -d $JDK_DIR/jdk ];then
color 1 "JDK 已经安装"
exit
else
[ -d "$JDK_DIR" ] || mkdir -pv $JDK_DIR
fi
tar xvf $DIR/$JDK_FILE -C $JDK_DIR
cd $JDK_DIR && ln -s jdk* jdk
cat > /etc/profile.d/jdk.sh <<EOF
export JAVA_HOME=$JDK_DIR/jdk
export JRE_HOME=\$JAVA_HOME/jre
export CLASSPATH=\$JAVA_HOME/lib/:\$JRE_HOME/lib/
export PATH=\$PATH:\$JAVA_HOME/bin
EOF
. /etc/profile.d/jdk.sh
java -version && color 0 "JDK 安装完成" || { color 1 "JDK 安装失败" ; exit; }
}
install_tomcat(){
if ! [ -f "$DIR/$TOMCAT_FILE" ];then
color 1 "$TOMCAT_FILE 文件不存在"
exit;
elif [ -d $TOMCAT_DIR/tomcat ];then
color 1 "TOMCAT 已经安装"
exit
else
[ -d "$TOMCAT_DIR" ] || mkdir -pv $TOMCAT_DIR
fi
tar xf $DIR/$TOMCAT_FILE -C $TOMCAT_DIR
cd $TOMCAT_DIR && ln -s apache-tomcat-*/ tomcat
echo "PATH=$TOMCAT_DIR/tomcat/bin:"'$PATH' > /etc/profile.d/tomcat.sh
id tomcat &> /dev/null || useradd -r -s /sbin/nologin tomcat
cat > $TOMCAT_DIR/tomcat/conf/tomcat.conf <<EOF
JAVA_HOME=$JDK_DIR/jdk
EOF
chown -R tomcat.tomcat $TOMCAT_DIR/tomcat/
cat > /lib/systemd/system/tomcat.service <<EOF
[Unit]
Description=Tomcat
#After=syslog.target network.target remote-fs.target nss-lookup.target
After=syslog.target network.target
[Service]
Type=forking
EnvironmentFile=$TOMCAT_DIR/tomcat/conf/tomcat.conf
ExecStart=$TOMCAT_DIR/tomcat/bin/startup.sh
ExecStop=$TOMCAT_DIR/tomcat/bin/shutdown.sh
RestartSec=3
PrivateTmp=true
User=tomcat
Group=tomcat
[Install]
WantedBy=multi-user.target
EOF
systemctl daemon-reload
systemctl enable --now tomcat.service &> /dev/null
systemctl is-active tomcat.service &> /dev/null && color 0 "TOMCAT 安装完成" || { color 1 "TOMCAT 安装失败" ; exit; }
}
install_jdk
install_tomcat
[root@t68 ]#
# 调用基本一键安装
[root@t68 ]#bash install_tomcat2022.sh
...........................
JDK 安装完成 [ OK ]
TOMCAT 安装完成 [ OK ]
[root@t68 ]#
4.1.2 t58主机
#### t58.shone.cn 的配置过程[root@CentOS84-IP58 ]#cd /data/
[root@CentOS84-IP58 ]#hostnamectl set-hostname t58.shone.cn
[root@CentOS84-IP58 ]#exit
[root@t58 ]#cd /data/
#### 准备好Tomcat和JDK安装包,用脚本一键完成安装
[root@t58 ]#ll
-rw-r--r-- 1 root root 10577344 Apr 15 23:59 apache-tomcat-8.5.78.tar.gz
-rw-r--r-- 1 root root 3104 Apr 15 23:59 install_tomcat2022.sh
-rw-r--r-- 1 root root 144935989 Apr 15 23:59 jdk-8u291-linux-x64.tar.gz
-rw-r--r-- 1 root root 637 Apr 15 23:59 xjzth.sh
# 用脚本完成时间同步等配置
[root@t58 ]#bash xjzth.sh
# 安装tomcat 和 jdk,注意脚本中的软件包的名称要和上面准备好的完全相同
[root@t58 ]#bash install_tomcat2022.sh
...........................
JDK 安装完成 [ OK ]
TOMCAT 安装完成 [ OK ]
[root@t58 ]#
4.2 配置memcached
4.2.1 配置t68主机上的memcached
[root@t68 ]#yum -y install memcached[root@t68 ]#vim /etc/sysconfig/memcached
PORT="11211"
USER="memcached"
MAXCONN="1024"
CACHESIZE="64"
#OPTIONS="-l 127.0.0.1,::1"
[root@t68 ]#
[root@t68 ]#systemctl enable --now memcached.service
[root@t68 ]#memcached --version
memcached 1.5.22
[root@t68 ]#
4.2.2 配置t58主机上的memcached
[root@t58 ]#yum -y install memcached[root@t58 ]#vim /etc/sysconfig/memcached
PORT="11211"
USER="memcached"
MAXCONN="1024"
CACHESIZE="64"
#OPTIONS="-l 127.0.0.1,::1"
[root@t58 ]#
[root@t58 ]#systemctl enable --now memcached.service
[root@t58 ]#memcached --version
memcached 1.5.22
[root@t58 ]#
4.3 配置Tomcat
4.3.1 配置t68主机上的Tomcat
# 按照拓扑图实践修改后的 /usr/local/tomcat/conf/server.xml 文件,本次实践先保持用默认的/ROOT/主页路径,展示一个用于测试的index.jsp主页[root@t68 ]#vim /usr/local/tomcat/conf/server.xml
<?xml version="1.0" encoding="UTF-8"?>
<Server port="8005" shutdown="SHUTDOWN">
<Listener className="org.apache.catalina.startup.VersionLoggerListener" />
<Listener className="org.apache.catalina.core.AprLifecycleListener" SSLEngine="on" />
<Listener className="org.apache.catalina.core.JreMemoryLeakPreventionListener" />
<Listener className="org.apache.catalina.mbeans.GlobalResourcesLifecycleListener" />
<Listener className="org.apache.catalina.core.ThreadLocalLeakPreventionListener" />
<GlobalNamingResources>
<Resource name="UserDatabase" auth="Container"
type="org.apache.catalina.UserDatabase"
description="User database that can be updated and saved"
factory="org.apache.catalina.users.MemoryUserDatabaseFactory"
pathname="conf/tomcat-users.xml" />
</GlobalNamingResources>
<Service name="Catalina">
<Connector port="8080" protocol="HTTP/1.1"
connectionTimeout="20000"
redirectPort="8443" />
<Engine name="Catalina" defaultHost="localhost" jvmRoute="jvm68">
<Realm className="org.apache.catalina.realm.LockOutRealm">
<Realm className="org.apache.catalina.realm.UserDatabaseRealm"
resourceName="UserDatabase"/>
</Realm>
<Host name="localhost" appBase="webapps"
unpackWARs="true" autoDeploy="true">
<Valve className="org.apache.catalina.valves.AccessLogValve" directory="logs"
prefix="localhost_access_log" suffix=".txt"
pattern="%h %l %u %t "%r" %s %b" />
</Host>
</Engine>
</Service>
</Server>
#################################################################################
# 修改 /usr/local/tomcat/conf/context.xml 文件,
[root@t68 ]#vim /usr/local/tomcat/conf/context.xml
<?xml version="1.0" encoding="UTF-8"?>
<Context>
<WatchedResource>WEB-INF/web.xml</WatchedResource>
<WatchedResource>${catalina.base}/conf/web.xml</WatchedResource>
<Manager className="de.javakaffee.web.msm.MemcachedBackupSessionManager"
memcachedNodes="n1:192.168.250.58:11211,n2:192.168.250.68:11211"
failoverNodes="n2"
requestUriIgnorePattern=".*\.(ico|png|gif|jpg|css|js)$"
transcoderFactoryClass="de.javakaffee.web.msm.serializer.kryo.KryoTranscoderFactory"
/>
</Context>
[root@t68 ]#
#################################################################################
#### 上传 必须的jar 包,这些jar 包可以在官网上下载到合适的版本,不能随便采用最新版本,或导致不能正常使用
# 复制jar 包之前默认的清单
[root@t68 ]#ll /usr/local/tomcat/lib/
total 8740
-rw-r----- 1 tomcat tomcat 12356 Apr 1 00:05 annotations-api.jar
-rw-r----- 1 tomcat tomcat 54059 Apr 1 00:05 catalina-ant.jar
-rw-r----- 1 tomcat tomcat 120997 Apr 1 00:05 catalina-ha.jar
-rw-r----- 1 tomcat tomcat 1721764 Apr 1 00:05 catalina.jar
-rw-r----- 1 tomcat tomcat 77625 Apr 1 00:05 catalina-storeconfig.jar
-rw-r----- 1 tomcat tomcat 294101 Apr 1 00:05 catalina-tribes.jar
-rw-r----- 1 tomcat tomcat 2450404 Apr 1 00:05 ecj-4.6.3.jar
-rw-r----- 1 tomcat tomcat 89441 Apr 1 00:05 el-api.jar
-rw-r----- 1 tomcat tomcat 170106 Apr 1 00:05 jasper-el.jar
-rw-r----- 1 tomcat tomcat 602651 Apr 1 00:05 jasper.jar
-rw-r----- 1 tomcat tomcat 26799 Apr 1 00:05 jaspic-api.jar
-rw-r----- 1 tomcat tomcat 61742 Apr 1 00:05 jsp-api.jar
-rw-r----- 1 tomcat tomcat 249335 Apr 1 00:05 servlet-api.jar
-rw-r----- 1 tomcat tomcat 10648 Apr 1 00:05 tomcat-api.jar
-rw-r----- 1 tomcat tomcat 883924 Apr 1 00:05 tomcat-coyote.jar
-rw-r----- 1 tomcat tomcat 285968 Apr 1 00:05 tomcat-dbcp.jar
-rw-r----- 1 tomcat tomcat 75372 Apr 1 00:05 tomcat-i18n-de.jar
-rw-r----- 1 tomcat tomcat 106263 Apr 1 00:05 tomcat-i18n-es.jar
-rw-r----- 1 tomcat tomcat 159755 Apr 1 00:05 tomcat-i18n-fr.jar
-rw-r----- 1 tomcat tomcat 180465 Apr 1 00:05 tomcat-i18n-ja.jar
-rw-r----- 1 tomcat tomcat 179224 Apr 1 00:05 tomcat-i18n-ko.jar
-rw-r----- 1 tomcat tomcat 48430 Apr 1 00:05 tomcat-i18n-ru.jar
-rw-r----- 1 tomcat tomcat 164122 Apr 1 00:05 tomcat-i18n-zh-CN.jar
-rw-r----- 1 tomcat tomcat 149103 Apr 1 00:05 tomcat-jdbc.jar
-rw-r----- 1 tomcat tomcat 34823 Apr 1 00:05 tomcat-jni.jar
-rw-r----- 1 tomcat tomcat 185499 Apr 1 00:05 tomcat-util.jar
-rw-r----- 1 tomcat tomcat 214053 Apr 1 00:05 tomcat-util-scan.jar
-rw-r----- 1 tomcat tomcat 238006 Apr 1 00:05 tomcat-websocket.jar
-rw-r----- 1 tomcat tomcat 38449 Apr 1 00:05 websocket-api.jar
[root@t68 ]#
# 上传一批jar包
[root@t68 ]#rz
rz waiting to receive.
Starting zmodem transfer. Press Ctrl+C to cancel.
Transferring asm-5.2.jar...
100% 52 KB 52 KB/sec 00:00:01 0 Errors
Transferring kryo-3.0.3.jar...
100% 278 KB 278 KB/sec 00:00:01 0 Errors
Transferring kryo-serializers-0.45.jar...
100% 123 KB 123 KB/sec 00:00:01 0 Errors
Transferring memcached-session-manager-2.3.2.jar...
100% 163 KB 163 KB/sec 00:00:01 0 Errors
Transferring memcached-session-manager-tc8-2.3.2.jar...
100% 10 KB 10 KB/sec 00:00:01 0 Errors
Transferring minlog-1.3.1.jar...
100% 5 KB 5 KB/sec 00:00:01 0 Errors
Transferring msm-kryo-serializer-2.3.2.jar...
100% 37 KB 37 KB/sec 00:00:01 0 Errors
Transferring objenesis-2.6.jar...
100% 54 KB 54 KB/sec 00:00:01 0 Errors
Transferring reflectasm-1.11.9.jar...
100% 70 KB 70 KB/sec 00:00:01 0 Errors
Transferring spymemcached-2.12.3.jar...
100% 462 KB 462 KB/sec 00:00:01 0 Errors
# 上传完成后的jar 合集
[root@t68 ]#ll /usr/local/tomcat/lib/
total 10016
-rw-r----- 1 tomcat tomcat 12356 Apr 1 00:05 annotations-api.jar
-rw-r--r-- 1 root root 53259 Apr 15 17:49 asm-5.2.jar
-rw-r----- 1 tomcat tomcat 54059 Apr 1 00:05 catalina-ant.jar
-rw-r----- 1 tomcat tomcat 120997 Apr 1 00:05 catalina-ha.jar
-rw-r----- 1 tomcat tomcat 1721764 Apr 1 00:05 catalina.jar
-rw-r----- 1 tomcat tomcat 77625 Apr 1 00:05 catalina-storeconfig.jar
-rw-r----- 1 tomcat tomcat 294101 Apr 1 00:05 catalina-tribes.jar
-rw-r----- 1 tomcat tomcat 2450404 Apr 1 00:05 ecj-4.6.3.jar
-rw-r----- 1 tomcat tomcat 89441 Apr 1 00:05 el-api.jar
-rw-r----- 1 tomcat tomcat 170106 Apr 1 00:05 jasper-el.jar
-rw-r----- 1 tomcat tomcat 602651 Apr 1 00:05 jasper.jar
-rw-r----- 1 tomcat tomcat 26799 Apr 1 00:05 jaspic-api.jar
-rw-r----- 1 tomcat tomcat 61742 Apr 1 00:05 jsp-api.jar
-rw-r--r-- 1 root root 285211 Apr 15 17:39 kryo-3.0.3.jar
-rw-r--r-- 1 root root 126366 Apr 15 17:52 kryo-serializers-0.45.jar
-rw-r--r-- 1 root root 167294 Apr 15 18:33 memcached-session-manager-2.3.2.jar
-rw-r--r-- 1 root root 10826 Apr 15 19:37 memcached-session-manager-tc8-2.3.2.jar
-rw-r--r-- 1 root root 5923 Apr 15 17:49 minlog-1.3.1.jar
-rw-r--r-- 1 root root 38372 Apr 15 17:51 msm-kryo-serializer-2.3.2.jar
-rw-r--r-- 1 root root 55684 Apr 15 17:50 objenesis-2.6.jar
-rw-r--r-- 1 root root 72265 Apr 15 17:47 reflectasm-1.11.9.jar
-rw-r----- 1 tomcat tomcat 249335 Apr 1 00:05 servlet-api.jar
-rw-r--r-- 1 root root 473774 Apr 15 17:42 spymemcached-2.12.3.jar
-rw-r----- 1 tomcat tomcat 10648 Apr 1 00:05 tomcat-api.jar
-rw-r----- 1 tomcat tomcat 883924 Apr 1 00:05 tomcat-coyote.jar
-rw-r----- 1 tomcat tomcat 285968 Apr 1 00:05 tomcat-dbcp.jar
-rw-r----- 1 tomcat tomcat 75372 Apr 1 00:05 tomcat-i18n-de.jar
-rw-r----- 1 tomcat tomcat 106263 Apr 1 00:05 tomcat-i18n-es.jar
-rw-r----- 1 tomcat tomcat 159755 Apr 1 00:05 tomcat-i18n-fr.jar
-rw-r----- 1 tomcat tomcat 180465 Apr 1 00:05 tomcat-i18n-ja.jar
-rw-r----- 1 tomcat tomcat 179224 Apr 1 00:05 tomcat-i18n-ko.jar
-rw-r----- 1 tomcat tomcat 48430 Apr 1 00:05 tomcat-i18n-ru.jar
-rw-r----- 1 tomcat tomcat 164122 Apr 1 00:05 tomcat-i18n-zh-CN.jar
-rw-r----- 1 tomcat tomcat 149103 Apr 1 00:05 tomcat-jdbc.jar
-rw-r----- 1 tomcat tomcat 34823 Apr 1 00:05 tomcat-jni.jar
-rw-r----- 1 tomcat tomcat 185499 Apr 1 00:05 tomcat-util.jar
-rw-r----- 1 tomcat tomcat 214053 Apr 1 00:05 tomcat-util-scan.jar
-rw-r----- 1 tomcat tomcat 238006 Apr 1 00:05 tomcat-websocket.jar
-rw-r----- 1 tomcat tomcat 38449 Apr 1 00:05 websocket-api.jar
# 上面的jar 包是组合出来完全能使用的,实践过程中采用过较新的安装包,导致服务无法启动、启动后也不能正常访问主页等各种问题的,这个地方一定要确保jar 包完整、版本合适
[root@t68 ]#systemctl restart tomcat
#################################################################################
# 创建测试主页文件,本实践通过修改默认主页目录下的index.jsp 简单实现
[root@t68 ]#cd /usr/local/tomcat/webapps/ROOT/
# 在修改之前都可以先备份下原始文件
[root@t68 ]#cp index.jsp{,.bak}
[root@t68 ]#ll
total 176
-rw-r----- 1 tomcat tomcat 27235 Apr 1 00:05 asf-logo-wide.svg
-rw-r----- 1 tomcat tomcat 713 Apr 1 00:05 bg-button.png
-rw-r----- 1 tomcat tomcat 1918 Apr 1 00:05 bg-middle.png
-rw-r----- 1 tomcat tomcat 1401 Apr 1 00:05 bg-nav.png
-rw-r----- 1 tomcat tomcat 3103 Apr 1 00:05 bg-upper.png
-rw-r----- 1 tomcat tomcat 21630 Apr 1 00:05 favicon.ico
-rw-r----- 1 tomcat tomcat 12160 Apr 1 00:05 index.jsp
-rw-r----- 1 root root 12160 Apr 15 20:47 index.jsp.bak
-rw-r----- 1 tomcat tomcat 7136 Apr 1 00:05 RELEASE-NOTES.txt
-rw-r----- 1 tomcat tomcat 5542 Apr 1 00:05 tomcat.css
-rw-r----- 1 tomcat tomcat 67795 Apr 1 00:05 tomcat.svg
drwxr-x--- 2 tomcat tomcat 21 Apr 15 20:38 WEB-INF
[root@t68 ]#rm -rf index.jsp
[root@t68 ]#rz
rz waiting to receive.
Starting zmodem transfer. Press Ctrl+C to cancel.
Transferring index.jsp...
100% 397 bytes 397 bytes/sec 00:00:01 0 Errors
[root@t68 ]#cat /usr/local/tomcat/webapps/ROOT/index.jsp
<%@ page import="java.util.*" %>
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<title>tomcat test</title>
</head>
<body>
<h1> Tomcat Website </h1>
<div>On <%=request.getServerName() %></div>
<div><%=request.getLocalAddr() + ":" + request.getLocalPort() %></div>
<div>SessionID = <span style="color:blue"><%=session.getId() %></span></div>
<%=new Date()%>
</body>
</html>
[root@t68 ]#
[root@t68 ]#vim /etc/hosts
192.168.250.8 proxy.shone.cn proxy
192.168.250.58 t58.shone.cn t58
192.168.250.68 t68.shone.cn t68
[root@t68 ]#
[root@t68 ]#systemctl restart tomcat memcached
[root@t68 ]#
4.3.3 配置t58主机上的Tomcat
#### t58.shone.cn 的配置过程# 修改/usr/local/tomcat/conf/server.xml配置文件 只有一行和 t68不一样,其他都相同
[root@t58 ]#vim /usr/local/tomcat/conf/server.xml
.......................
<Engine name="Catalina" defaultHost="localhost" jvmRoute="jvm58">
.......................
# 修改/usr/local/tomcat/conf/context.xml 文件
[root@t58 ]#vim /usr/local/tomcat/conf/context.xml
.......................
<Manager className="de.javakaffee.web.msm.MemcachedBackupSessionManager"
memcachedNodes="n1:192.168.250.58:11211,n2:192.168.250.68:11211"
failoverNodes="n1"
requestUriIgnorePattern=".*\.(ico|png|gif|jpg|css|js)$"
transcoderFactoryClass="de.javakaffee.web.msm.serializer.kryo.KryoTranscoderFactory"
/>
</Context>
[root@t58 ]#
## 同样的方法和步骤上传jar包、创建好测试用index.jsp文件等
[root@t58 ]#systemctl restart tomcat memcached
5. 查看日志验证配置成功
# t68 配置成功后tail -f /usr/local/tomcat/logs/catalina.ou查看日志;这样的日志在t58 上也可见# 开启tomcat 看到的日志信息
[root@t68 ]#tail -f /usr/local/tomcat/logs/catalina.out
16-Apr-2022 05:06:26.361 INFO [localhost-startStop-1] org.apache.catalina.startup.HostConfig.deployDirectory Deployment of web application directory [/usr/local/apache-tomcat-8.5.78/webapps/docs] has finished in [144] ms
16-Apr-2022 05:06:26.361 INFO [localhost-startStop-1] org.apache.catalina.startup.HostConfig.deployDirectory Deploying web application directory [/usr/local/apache-tomcat-8.5.78/webapps/examples]
16-Apr-2022 05:06:26.584 INFO [localhost-startStop-1] org.apache.jasper.servlet.TldScanner.scanJars At least one JAR was scanned for TLDs yet contained no TLDs. Enable debug logging for this logger for a complete list of JARs that were scanned but no TLDs were found in them. Skipping unneeded JARs during scanning can improve startup time and JSP compilation time.
16-Apr-2022 05:06:26.614 INFO [localhost-startStop-1] de.javakaffee.web.msm.MemcachedSessionService.startInternal starts initialization... (configured nodes definition n1:192.168.250.58:11211,n2:192.168.250.68:11211, failover nodes n2)
2022-04-16 05:06:26.615 INFO net.spy.memcached.MemcachedConnection: Setting retryQueueSize to -1
2022-04-16 05:06:26.616 INFO net.spy.memcached.MemcachedConnection: Added {QA sa=/192.168.250.58:11211, #Rops=0, #Wops=0, #iq=0, topRop=null, topWop=null, toWrite=0, interested=0} to connect queue
2022-04-16 05:06:26.616 INFO net.spy.memcached.MemcachedConnection: Added {QA sa=/192.168.250.68:11211, #Rops=0, #Wops=0, #iq=0, topRop=null, topWop=null, toWrite=0, interested=0} to connect queue
16-Apr-2022 05:06:26.618 INFO [localhost-startStop-1] de.javakaffee.web.msm.RequestTrackingHostValve.<init> Setting ignorePattern to .*\.(ico|png|gif|jpg|css|js)$
16-Apr-2022 05:06:26.619 INFO [localhost-startStop-1] de.javakaffee.web.msm.MemcachedSessionService.setLockingMode Setting lockingMode to null
16-Apr-2022 05:06:26.619 INFO [localhost-startStop-1] de.javakaffee.web.msm.MemcachedSessionService.createTranscoderFactory Creating transcoder factory de.javakaffee.web.msm.serializer.kryo.KryoTranscoderFactory
16-Apr-2022 05:06:26.619 INFO [localhost-startStop-1] de.javakaffee.web.msm.serializer.kryo.KryoTranscoder.<init> Starting with initialBufferSize 102400, maxBufferSize 2048000 and defaultSerializerFactory de.javakaffee.web.msm.serializer.kryo.DefaultFieldSerializerFactory
16-Apr-2022 05:06:26.619 INFO [localhost-startStop-1] de.javakaffee.web.msm.MemcachedSessionService.startInternal --------
- finished initialization:
- sticky: true
- operation timeout: 1000
- node ids: [n1]
- failover node ids: [n2]
- storage key prefix: null
- locking mode: null (expiration: 5s)
--------
16-Apr-2022 05:06:26.626 INFO [localhost-startStop-1] org.apache.catalina.startup.HostConfig.deployDirectory Deployment of web application directory [/usr/local/apache-tomcat-8.5.78/webapps/examples] has finished in [265] ms
16-Apr-2022 05:06:26.626 INFO [localhost-startStop-1] org.apache.catalina.startup.HostConfig.deployDirectory Deploying web application directory [/usr/local/apache-tomcat-8.5.78/webapps/host-manager]
16-Apr-2022 05:06:26.721 INFO [localhost-startStop-1] org.apache.jasper.servlet.TldScanner.scanJars At least one JAR was scanned for TLDs yet contained no TLDs. Enable debug logging for this logger for a complete list of JARs that were scanned but no TLDs were found in them. Skipping unneeded JARs during scanning can improve startup time and JSP compilation time.
16-Apr-2022 05:06:26.725 INFO [localhost-startStop-1] org.apache.catalina.startup.HostConfig.deployDirectory Deployment of web application directory [/usr/local/apache-tomcat-8.5.78/webapps/host-manager] has finished in [99] ms
16-Apr-2022 05:06:26.725 INFO [localhost-startStop-1] org.apache.catalina.startup.HostConfig.deployDirectory Deploying web application directory [/usr/local/apache-tomcat-8.5.78/webapps/manager]
16-Apr-2022 05:06:26.840 INFO [localhost-startStop-1] org.apache.jasper.servlet.TldScanner.scanJars At least one JAR was scanned for TLDs yet contained no TLDs. Enable debug logging for this logger for a complete list of JARs that were scanned but no TLDs were found in them. Skipping unneeded JARs during scanning can improve startup time and JSP compilation time.
16-Apr-2022 05:06:26.842 INFO [localhost-startStop-1] org.apache.catalina.startup.HostConfig.deployDirectory Deployment of web application directory [/usr/local/apache-tomcat-8.5.78/webapps/manager] has finished in [117] ms
16-Apr-2022 05:06:26.852 INFO [main] org.apache.coyote.AbstractProtocol.start Starting ProtocolHandler ["http-nio-8080"]
16-Apr-2022 05:06:26.863 INFO [main] org.apache.catalina.startup.Catalina.start Server startup in 1277 ms
6. 客户端浏览器访问测试
配置到这个阶段,实现了Tomcat 利用memcached实现了sticky 模式会话Cluster复制和高可用性。可以通过组合测试模拟出memcached 停掉等故障,依然可以看到session被持久保持,实现了session的高可用性。
### 可以通过浏览器看到 主机在轮询访问中 session 不发生变化了# hosts文件 要加入下面行
192.168.250.8 proxy.shone.cn proxy