实战案例 : Tomcat8 利用memcached1.5实现会话Cluster (

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服务正常运行。防火墙规则禁用SELinux3. Nginx 反向代理服务器配置# 关闭防火墙、优化CentOS、修改主机名等[root@CentOS84-IP08 ]#hostnamectl set-hostname proxy.shone.cn [root@CentOS84-IP08 ]#exit[root@proxy ]#hostnameproxy.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/hosts192.168.250.8 proxy.shone.cn proxy192.168.250.58 t58.shone.cn t58192.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.confuser 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 nginxCreated 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 -tlnState 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 #!/bin/bashtimedatectl set-timezone Asia/Shanghaised -i ‘s/pool 2.centos.pool.ntp.org iburst/server ntp1.aliyun.com iburst/g’ /etc/chrony.confsystemctl enable –now chronyd.servicesystemctl restart chronyd.servicedate[root@t68 ]#[root@t68 ]#bash xjzth.sh#### 准备好Tomcat和JDK安装包,用脚本一键完成安装[root@t68 ]#lltotal 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 #!/bin/bashDIR=`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 已经安装” exitelse [ -d “$JDK_DIR” ] || mkdir -pv $JDK_DIRfitar xvf $DIR/$JDK_FILE -C $JDK_DIRcd $JDK_DIR && ln -s jdk* jdk cat > /etc/profile.d/jdk.sh <<EOFexport JAVA_HOME=$JDK_DIR/jdkexport JRE_HOME=\$JAVA_HOME/jreexport CLASSPATH=\$JAVA_HOME/lib/:\$JRE_HOME/lib/export PATH=\$PATH:\$JAVA_HOME/binEOF. /etc/profile.d/jdk.shjava -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 已经安装” exitelse [ -d “$TOMCAT_DIR” ] || mkdir -pv $TOMCAT_DIRfitar xf $DIR/$TOMCAT_FILE -C $TOMCAT_DIRcd $TOMCAT_DIR && ln -s apache-tomcat-*/ tomcatecho “PATH=$TOMCAT_DIR/tomcat/bin:”‘$PATH’ > /etc/profile.d/tomcat.shid tomcat &> /dev/null || useradd -r -s /sbin/nologin tomcatcat > $TOMCAT_DIR/tomcat/conf/tomcat.conf <<EOFJAVA_HOME=$JDK_DIR/jdkEOFchown -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.targetAfter=syslog.target network.target [Service]Type=forkingEnvironmentFile=$TOMCAT_DIR/tomcat/conf/tomcat.confExecStart=$TOMCAT_DIR/tomcat/bin/startup.shExecStop=$TOMCAT_DIR/tomcat/bin/shutdown.shRestartSec=3PrivateTmp=trueUser=tomcatGroup=tomcat[Install]WantedBy=multi-user.targetEOFsystemctl daemon-reloadsystemctl enable –now tomcat.service &> /dev/nullsystemctl 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 配置memcached4.2.1 配置t68主机上的memcached[root@t68 ]#yum -y install memcached[root@t68 ]#vim /etc/sysconfig/memcachedPORT=”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 –versionmemcached 1.5.22[root@t68 ]#4.2.2 配置t58主机上的memcached[root@t58 ]#yum -y install memcached[root@t58 ]#vim /etc/sysconfig/memcachedPORT=”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 –versionmemcached 1.5.22[root@t58 ]#4.3 配置Tomcat4.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 ]#rzrz 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 ]#lltotal 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.svgdrwxr-x— 2 tomcat tomcat 21 Apr 15 20:38 WEB-INF[root@t68 ]#rm -rf index.jsp[root@t68 ]#rzrz 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/hosts192.168.250.8 proxy.shone.cn proxy192.168.250.58 t58.shone.cn t58192.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 memcached5. 查看日志验证配置成功# t68 配置成功后tail -f /usr/local/tomcat/logs/catalina.ou查看日志;这样的日志在t58 上也可见# 开启tomcat 看到的日志信息[root@t68 ]#tail -f /usr/local/tomcat/logs/catalina.out16-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] ms16-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 -12022-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 queue2022-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 queue16-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 null16-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.KryoTranscoderFactory16-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.DefaultFieldSerializerFactory16-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] ms16-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] ms16-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] ms16-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 ms6. 客户端浏览器访问测试

配置到这个阶段,实现了Tomcat 利用memcached实现了sticky 模式会话Cluster复制和高可用性。可以通过组合测试模拟出memcached 停掉等故障,依然可以看到session被持久保持,实现了session的高可用性。

### 可以通过浏览器看到 主机在轮询访问中 session 不发生变化了# hosts文件 要加入下面行192.168.250.8 proxy.shone.cn proxy

【本文转自:韩国服务器 复制请保留原URL】人之相识,贵在相知;人之相知,贵在知心。

实战案例 : Tomcat8 利用memcached1.5实现会话Cluster (

相关文章:

你感兴趣的文章:

标签云: