一 WEB技术
1.1 HTTP协议和B/S 结构
操作系统有进程子系统,使用多进程就可以充分利用硬件资源。进程中可以多个线程,每一个线程可以
被
CPU
调度执行,这样就可以让程序并行的执行。这样一台主机就可以作为一个服务器为多个客户端提
供计算服务。
客户端和服务端往往处在不同的物理主机上,它们分属不同的进程,这些进程间需要通信。跨主机的进
程间通信需要使用网络编程。最常见的网络编程接口是
Socket
。
Socket
称为套接字,本意是插座。也就是说网络通讯需要两端,如果一端被动的接收另一端请求并提供
计算和数据的称为服务器端,另一端往往只是发起计算或数据请求,称为客户端。
这种编程模式称为
Client/Server
编程模式,简称
C/S
编程。开发的程序也称为
C/S
程序。
C/S
编程往往使用
传输层协(
TCP/UDP
),较为底层,比如:
QQ
,迅雷
,
云音乐
,
云盘
, foxmail
,
xshell
等
1990
年
HTTP
协议和浏览器诞生。在应用层使用文本跨网络在不同进程间传输数据,最后在浏览器中将服
务器端返回的
HTML
渲染出来。由此,诞生了网页开发。
网页是存储在
WEB
服务器端的文本文件,浏览器发起
HTTP
请求后,到达
WEB
服务程序后,服务程序根据
URL
读取对应的
HTML
文件,并封装成
HTTP
响应报文返回给浏览器端。
起初网页开发主要指的是
HTML
、
CSS
等文件制作,目的就是显示文字或图片,通过超级链接跳转到另一
个
HTML
并显示其内容。
后来,网景公司意识到让网页动起来很重要,傍着
SUN
的
Java
的名气发布了
JavaScript
语言,可以在浏览
器中使用
JS
引擎执行的脚本语言,可以让网页元素动态变化,网页动起来了。
为了让网页动起来,微软使用
ActiveX
技术、
SUN
的
Applet
都可以在浏览器中执行代码,但都有安全性问
题。能不能直接把内容直接在
WEB
服务器端组织成
HTML
,然后把
HTML
返回给浏览器渲染呢?
最早出现了
CGI
(
Common Gateway Interface
)通用网关接口,通过浏览器中输入
URL
直接映射到一个
服务器端的脚本程序执行,这个脚本可以查询数据库并返回结果给浏览器端。这种将用户请求使用程序
动态生成的技术,称为动态网页技术。先后出现了
ASP
、
PHP
、
JSP
等技术,这些技术的使用不同语言编
写的程序都运行在服务器端,所以称为
WEB
后端编程。有一部分程序员还是要编写
HTML
、
CSS
、
JavaScript
,这些代码运行在浏览器端,称为
WEB
前端编程。合起来称为
Browser/Server
编程,即
B/S
编
程。
1.2 前端三大核心技术
1.2.1 HTML
HTML
(
HyperText Markup Language
)超文本标记语言,它不同于一般的编程语言。超文本即超出纯
文本的范畴,例如:描述文本颜色、大小、字体等信息,或使用图片、音频、视频等非文本内容。
HTML
由一个个的标签(标记)组成,这些标签各司其职,有的提供网页信息,有的负责文字,有的负责
图片,有的负责网页布局,所以一个
HTML
文件,是由格式标签和数据组成。
超文本需要显示,就得有软件能够呈现超文本定义的排版格式,例如显示:图片、表格,显示字体的大
小、颜色,这个软件就是浏览器。
超文本的诞生是为了解决纯文本不能格式显示的问题,是为了好看,但是只有通过网络才能分享超文本
的内容,所以制定了
HTTP
协议。
1.2.2 CSS(Cascading Style Sheets)层叠样式表
HTML
本身为了格式化显示文本,但是当网页呈现大家面前的时候,需求
HTML
提供更多样式能力。这使
得
HTML
变得越来越臃肿。这促使了
CSS
的诞生。
1994
年,
W3C
成立,
CSS
设计小组所有成员加入
W3C
,并努力研发
CSS
的标准,微软最终加入。
1996
年
12
月发布
CSS 1.0
。
1998
年
5
月发布
CSS 2.0
CSS 3
采用了模块化思想,每个模块都在
CSS 2
基础上分别增强功能。所以,这些模块是陆续发布的。
不同厂家的浏览器使用的引擎,对
CSS
的支持不一样,导致网页布局、样式在不同浏览器不一样。因此,
想要保证不同用户使用不同浏览器看到的网页效果一直非常困难。
1.2.3 JavaScript
Javascript
简称
JS
,是一种动态的弱类型脚本解释性语言,和
HTML
、
CSS
并称三大
WEB
核心技术,得到
了几乎主流浏览器支持。
二 WEB框架
2.1 web资源和访问
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<title>
首页
</title>
</head>
<body>
<h1>TOMCAT
</h1>
</body>
</html>
PC
端或移动端浏览器访问
从静态服务器请求
HTML
、
CSS
、
JS
等文件发送到浏览器端,浏览器端接收后渲染在浏览器上从图片服务
器请求图片资源显示
从业务服务器访问动态内容,动态内容是请求后有后台服务访问数据库后得到的,最终返回到浏览器端
手机
App
访问
内置了
HTML
和
JS
文件,不需要从静态
WEB
服务器下载
JS
或
HTML
。为的就是减少文件的发送,现代前 端开发使用的JS
文件太多或太大了有必要就从图片服务器请求图片,从业务服务器请求动态数据 客户需求多样,更多的内容还是需要由业务服务器提供,业务服务器往往都是由一组服务器组成。
三 tomcat的功能介绍
Tomcat
服务器是一个免费的开放源代码的
Web
应用服务器,属于轻量级应用服务器,在中小型系统和 并发访问用户不是很多的场合下被普遍使用,Tomcat
具有处理
HTML
页面的功能,它还是一个
Servlet
和 JSP容器起始于SUN
公司的一个
Servlet
的参考实现项目
Java Web Server
,开发者是
James Duncan Davidson
, 在1999
年,将项目贡献给了
apache
软件基金会(
ASF
),和
ASF
现有的项目
JServ
合并,并开源成为顶级 项目
Tomcat
仅仅实现了
Java EE
规范中与
Servlet
、
JSP
相关的类库,是
JavaEE
不完整实现。
1999
年发布初始版本是
Tomcat 3.0
,实现了
Servlet 2.2
和
JSP 1.1
规范。
Tomcat 4.x
发布时,内建了
Catalina
(
Servlet
容器)和
Jasper
(
JSP engine
)等
当前
Tomcat
的正式版本已经更新到
9.0.x
版本,但当前企业中主流版本为
8.x
和
7.x
官网
:
http://tomcat.apache.org/
官网文档
:
https://tomcat.apache.org/tomcat-8.5-doc/index.html
帮助文档
:
https://cwiki.apache.org/confluence/display/tomcat/
https://cwiki.apache.org/confluence/display/tomcat/FAQ
3.1 安装 Tomcat
实验环境:rhel9俩台
,
推荐从
Apache
官网下载源码包直接安装启动
1.
安装
java
环境
#安装前准备:临时
systemctl stop firewalld
setenforce 0
#安装前准备:永久
grubby --update-kernel ALL --args selinux=0
systemctl stop firewalld
systemctl mask firewalld
reboot
[root@tomcat ~]# yum install java-1.8.0-openjdk.x86_64 -y
2.
安装并启动
tomcat
[root@tomcat ~]# tar zxf apache-tomcat-9.0.91.tar.gz -C /usr/local/
[root@tomcat ~]# ln -s /usr/local/apache-tomcat-9.0.91/ /usr/local/tomcat
[root@tomcat ~]# /usr/local/tomcat/bin/startup.sh
3.
查看端口
[root@tomcat ~]# netstat -antlupe | grep java
tcp6 0 0 :::8080 :::* LISTEN 0 63429 32700/java
tcp6 0 0 127.0.0.1:8005 :::* LISTEN 0 64210 32700/java
4.浏览器
访问
tomcat

3.2 tomcat的文件结构和组成
目录结构
目录 说明
-------------------------------------------------------
bin 服务启动、停止等相关程序和文件
conf 配置文件
lib 库目录
logs 日志目录
webapps 应用程序,应用部署目录,相当于nginx的默认发布目录
work jsp 编译后的结果文件,建议提前预热访问
查看
tomcat
相关目录和文件
[root@tomcat ~]# ls /usr/local/tomcat/
bin CONTRIBUTING.md logs RELEASE-NOTES webapps
BUILDING.txt lib NOTICE RUNNING.txt work
conf LICENSE README.md temp
3.3 生成tomcat的启动文件
1.
生成
tomcat
的主配置文件
[root@tomcat ~]# vim /usr/local/tomcat/conf/tomcat.conf
JAVA_HOME=/etc/alternatives/jre_openjdk
2.生成启动文件
[root@tomcat ~]# vim /lib/systemd/system/tomcat.service
[Unit]
Description=Tomcat
#After=syslog.target network.target remote-fs.target nss-lookup.target
After=syslog.target network.target
[Service]
Type=forking
EnvironmentFile=/usr/local/tomcat/conf/tomcat.conf
ExecStart=/usr/local/tomcat/bin/startup.sh
ExecStop=/usr/local/tomcat/bin/shutdown.sh
PrivateTmp=true
User=tomcat #用户设置为tomcat
Group=tomcat #组设置为tomcat
[Install]
WantedBy=multi-user.target
[root@tomcat conf]# useradd -s /sbin/nologin -M tomcat
[root@tomcat conf]# chown tomcat.tomcat -R /usr/local/tomcat/
[root@tomcat conf]# systemctl daemon-reload
[root@tomcat conf]# systemctl enable --now tomcat
#第二台布置:本机IP:172.25.254.88
[root@tomcat1 ~]# systemctl stop firewalld
[root@tomcat1 ~]# setenforce 0
[root@tomcat1 ~]# yum install -y lrz*
[root@tomcat1 ~]# yum install java-1.8.0-openjdk.x86_64 -y
[root@tomcat1 ~]# tar zxf apache-tomcat-9.0.91.tar.gz -C /usr/local/
[root@tomcat1 ~]# ln -s /usr/local/apache-tomcat-9.0.91/ /usr/local/tomcat
[root@tomcat1 ~]# /usr/local/tomcat/bin/startup.sh
Using CATALINA_BASE: /usr/local/tomcat
Using CATALINA_HOME: /usr/local/tomcat
Using CATALINA_TMPDIR: /usr/local/tomcat/temp
Using JRE_HOME: /usr
Using CLASSPATH: /usr/local/tomcat/bin/bootstrap.jar:/usr/local/tomcat/bin/tomcat-juli.jar
Using CATALINA_OPTS:
Tomcat started.
[root@tomcat1 ~]# netstat -antlupe | grep java
tcp6 0 0 :::8080 :::* LISTEN 0 65720 32694/java
tcp6 0 0 127.0.0.1:8005 :::* LISTEN 0 65732 32694/java
####浏览器访问:172.25.254.88:8080
[root@tomcat1 ~]# vim /usr/local/tomcat/conf/tomcat.conf
JAVA_HOME=/etc/alternatives/jre_openjdk
[root@tomcat1 ~]# vim /lib/systemd/system/tomcat.service
[Unit]
Description=Tomcat
#After=syslog.target network.target remote-fs.target nss-lookup.target
After=syslog.target network.target
[Service]
Type=forking
EnvironmentFile=/usr/local/tomcat/conf/tomcat.conf
ExecStart=/usr/local/tomcat/bin/startup.sh
ExecStop=/usr/local/tomcat/bin/shutdown.sh
PrivateTmp=true
User=tomcat
Group=tomcat
[Install]
WantedBy=multi-user.target
[root@tomcat1 ~]# chown -R tomcat.tomcat /usr/local/tomcat/
[root@tomcat1 ~]# systemctl daemon-reload
[root@tomcat1 ~]# systemctl enable --now tomcat
[root@tomcat1 ~]# /usr/local/tomcat/bin/startup.sh
Using CATALINA_BASE: /usr/local/tomcat
Using CATALINA_HOME: /usr/local/tomcat
Using CATALINA_TMPDIR: /usr/local/tomcat/temp
Using JRE_HOME: /usr
Using CLASSPATH: /usr/local/tomcat/bin/bootstrap.jar:/usr/local/tomcat/bin/tomcat-juli.jar
Using CATALINA_OPTS:
Tomcat started.
####浏览器访问:172.25.254.88:8080
四 结合反向代理实现tomcat部署
4.1 常见部署方式介绍
standalone
模式,
Tomcat
单独运行,直接接受用户的请求,不推荐。
反向代理,单机运行,提供了一个
Nginx
作为反向代理,可以做到静态由
nginx
提供响应,动态
jsp
代
理给
Tomcat
LNMT
:
Linux + Nginx + MySQL + Tomcat
LAMT
:
Linux + Apache
(
Httpd
)
+ MySQL + Tomcat
前置一台
Nginx
,给多台
Tomcat
实例做反向代理和负载均衡调度,
Tomcat
上部署的纯动态页面更
适合
LNMT
:
Linux + Nginx + MySQL + Tomcat
多级代理
LNNMT
:
Linux + Nginx + Nginx + MySQL + Tomcat
4.2 利用 nginx 反向代理实现
利用
nginx
反向代理功能,实现图中的代理功能,将用户请求全部转发至指定的同一个
tomcat
主机
利用
nginx
指令
proxy_pass
可以向后端服务器转发请求报文
,
并且在转发时会保留客户端的请求报文中的 host首部
#####在主机:172.25.254.88#######
[root@tomcat1 ~]#vim test.jps
<%@ 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>");
String dataName = request.getParameter("dataName");
if (dataName != null && dataName.length() > 0) {
String dataValue = request.getParameter("dataValue");
session.setAttribute(dataName, dataValue);
}
out.print("<b>Session list</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">
name:<input type=text size=20 name="dataName">
<br>
key:<input type=text size=20 name="dataValue">
<br>
<input type=submit>
</form>
</body>
</html>
[root@tomcat1 ~]# cp test.jsp /usr/local/tomcat/webapps/ROOT/
######在主机:172.25.254.77######
[root@tomcat ~]# yum install -y nginx
[root@tomcat conf.d]# cd /etc/nginx/conf.d/
[root@tomcat conf.d]# vim host.conf
server {
listen 80;
server_name www.a.com;
location ~ \.jsp$ {
proxy_pass http://172.25.254.88:8080;
}
}
[root@tomcat conf.d]# systemctl restart nginx
#######浏览器访问:http://172.25.254.77:8080/test.jsp
4.3 实现tomcat中的负载均衡
动态服务器的问题,往往就是并发能力太弱,往往需要多台动态服务器一起提供服务。如何把并发的压
力分摊,这就需要调度,采用一定的调度策略,将请求分发给不同的服务器,这就是
Load Balance
负载
均衡。
当单机
Tomcat
,演化出多机多级部署的时候,一个问题便凸显出来,这就是
Session
。而这个问题的由
来,都是由于
HTTP
协议在设计之初没有想到未来的发展。
4.3.1 HTTP的无状态,有连接和短连接
无状态:指的是服务器端无法知道 2 次请求之间的联系,即使是前后 2 次请求来自同一个浏览器,也没有任何数据能够判断出是同一个浏览器的请求。后来可以通过 cookie 、 session 机制来判断。
浏览器端第一次 HTTP 请求服务器端时,在服务器端使用 session 这种技术,就可以在服务器端 产生一个随机值即SessionID 发给浏览器端,浏览器端收到后会保持这个 SessionID 在 Cookie 当 中,这个Cookie 值一般不能持久存储,浏览器关闭就消失。浏览器在每一次提交 HTTP 请求的 时候会把这个SessionID 传给服务器端,服务器端就可以通过比对知道是谁了
Session 通常会保存在服务器端内存中,如果没有持久化,则易丢失
Session 会定时过期。过期后浏览器如果再访问,服务端发现没有此 ID ,将给浏览器端重新发新的 SessionID
更换浏览器也将重新获得新的 SessionID
- 有连接:是因为它基于TCP协议,是面向连接的,需要3次握手、4次断开。
- 短连接:Http 1.1之前,都是一个请求一个连接,而Tcp的连接创建销毁成本高,对服务器有很大的 影响。所以,自Http 1.1开始,支持keep-alive,默认也开启,一个连接打开后,会保持一段时间 (可设置),浏览器再访问该服务器就使用这个Tcp连接,减轻了服务器压力,提高了效率。
服务器端如果故障,即使
Session
被持久化了,但是服务没有恢复前都不能使用这些
SessionID
。
如果使用
HAProxy
或者
Nginx
等做负载均衡器,调度到了不同的
Tomcat
上,那么也会出现找不到
SessionID
的情况。
4.3.2 tomcat负载均衡实现
[root@tomcat conf.d]# vim /etc/nginx/conf.d/host.conf
upstream tomcat {
hash $cookie_JSESSIONID;
server 172.25.254.77:8080;
server 172.25.254.88:8080;
}
server {
listen 80;
server_name www.a.com;
root /data/html;
location ~ \.jsp$ {
proxy_pass http://tomcat;
}
}
[root@tomcat conf.d]# systemctl restart nginx
访问:
[root@tomcat conf.d]# curl www.a.com/test.jsp
<html><head><title>Cluster App Test</title></head>
<body>
Server Info:
172.25.254.77 : 8080<br> #第一次调77主机
<br> ID 98E8A7EC3F5584F786EC2CA841D3B47B<br>
<b>Session list</b>
<form action="test.jsp" method="POST">
name:<input type=text size=20 name="dataName">
<br>
key:<input type=text size=20 name="dataValue">
<br>
<input type=submit>
</form>
</body>
</html>
[root@tomcat conf.d]# curl www.a.com/test.jsp
<html><head><title>Cluster App Test</title></head>
<body>
Server Info:
172.25.254.88 : 8080<br> #第二次调88主机
<br> ID 4C46DB22EC5346F22462190296860237<br>
<b>Session list</b>
<form action="test.jsp" method="POST">
name:<input type=text size=20 name="dataName">
<br>
key:<input type=text size=20 name="dataValue">
<br>
<input type=submit>
</form>
</body>
</html>
五 Memcached
5.1 Memcached简介
Memcached 只支持能序列化的数据类型,不支持持久化,基于 Key-Value 的内存缓存系统 memcached 虽然没有像redis 所具备的数据持久化功能,比如 RDB 和 AOF 都没有,但是可以通过做集群同步的方式, 让各memcached 服务器的数据进行同步,从而实现数据的一致性,即保证各 memcached 的数据是一样 的,即使有任何一台 memcached 发生故障,只要集群中有一台 memcached 可用就不会出现数据丢 失,当其他memcached 重新加入到集群的时候 , 可以自动从有数据的 memcached 当中自动获取数据并 提供服务。
Memcached 借助了操作系统的 libevent 工具做高效的读写。 libevent 是个程序库,它将 Linux 的 epoll 、 BSD类操作系统的 kqueue 等事件处理功能封装成统一的接口。即使对服务器的连接数增加,也能发挥高 性能。memcached 使用这个 libevent 库,因此能在 Linux 、 BSD 、 Solaris 等操作系统上发挥其高性能
Memcached 支持最大的内存存储对象为 1M ,超过 1M 的数据可以使用客户端压缩或拆分报包放到多个 key中,比较大的数据在进行读取的时候需要消耗的时间比较长, memcached 最适合保存用户的 session实现 session 共享
Memcached 存储数据时 , Memcached 会去申请 1MB 的内存 , 把该块内存称为一个 slab, 也称为一 pageMemcached 支持多种开发语言,包括: JAVA,C,Python,PHP,C#,Ruby,Perl 等Memcached 官网: http://memcached.org/
5.2 memcached的安装与启动
[root@tomcat ~]# vim /etc/sysconfig/memcached
PORT="11211"
USER="memcached"
MAXCONN="1024"
CACHESIZE="64"
OPTIONS="-l 0.0.0.0,::1"
[root@tomcat ~]# systemctl enable --now memcached
[root@tomcat conf.d]# netstat -antlupe | grep memcache
tcp 0 0 0.0.0.0:11211 0.0.0.0:* LISTEN 976 88427 34805/memcached
tcp6 0 0 ::1:11211 :::* LISTEN 976 88428 34805/memcached
5.3 memcached 操作命令
五种基本
memcached
命令执行最简单的操作。这些命令和操作包括:
- set
- add
- replace
- get
- delete
#前三个命令是用于操作存储在 memcached 中的键值对的标准修改命令,都使用如下所示的语法:
command <key> <flags> <expiration time> <bytes>
<value>
#参数说明如下:
command set/add/replace
key key 用于查找缓存值
flags 可以包括键值对的整型参数,客户机使用它存储关于键值对的额外信息
expiration time 在缓存中保存键值对的时间长度(以秒为单位,0 表示永远)
bytes 在缓存中存储的字节数
value 存储的值(始终位于第二行)
#增加key,过期时间为秒,bytes为存储数据的字节数
add key flags exptime bytes
示例:
[root@tomcat ~]# telnet localhost 11211
Trying ::1...
Connected to localhost.
Escape character is '^]'.
#增加
add leekey 0 60 4 #0 是否压缩 60 过期时间 4 字长
test
STORED
add leekey1 0 60 3
lee
STORED
#查看
get leekey
VALUE leekey 0 4
test
get leekey1
VALUE leekey1 0 3
lee
#改
set leekey 0 60 5
test1
STORED
get leekey
VALUE leekey 0 5
test1
END
add leekey1 0 60 4
test
#删除
delete leekey
DELETED
get leekey
END
get leekey1
VALUE leekey1 0 3
lee
#清空
flush_all
OK
get leekey1
END
六 session 共享服务器
6.1 msm 介绍
msm
(
memcached session manager
)提供将
Tomcat
的
session
保持到
memcached
可以实现高可用。
项目早期托管在
google code,
目前在
Github
github
网站链接
:
https://github.com/magro/memcached-session-manager
支持
Tomcat
的
6.x
、
7.x
、
8.x
、
9.x
Tomcat
的
Session
管理类,
Tomcat
版本不同
memcached-session-manager-2.3.2.jar
memcached-session-manager-tc9-2.3.2.jar
Session
数据的序列化、反序列化类
官方推荐
kyro
在
webapp
中
WEB-INF/lib/
下
驱动类
memcached(spymemcached.jar)
Redis(jedis.jar)
6.2 安装
参考链接
:
https://github.com/magro/memcached-session-manager/wiki/SetupAndConfiguration
将
spymemcached.jar
、
memcached-session-manage
、
kyro
相关的
jar
文件都放到
Tomcat
的
lib
目录
中,这个目录是
$CATALINA_HOME/lib/
,对应本次安装就是
将下面这些包下载到下面目录:两台主机都要有
/usr/local/tomcat/lib
。
kryo-3.0.3.jar
asm-5.2.jar
objenesis-2.6.jar
reflectasm-1.11.9.jar
minlog-1.3.1.jar
kryo-serializers-0.45.jar
msm-kryo-serializer-2.3.2.jar
memcached-session-manager-tc9-2.3.2.jar
spymemcached-2.12.3.jar
memcached-session-manager-2.3.2.jar
t1
和
m1
部署可以在一台主机上,
t2
和
m2
部署也可以在同一台。
当新用户发请求到
Tomcat1
时
, Tomcat1
生成
session
返回给用户的同时
,
也会同时发给
memcached2
备
份。即
Tomcat1 session
为主
session
,
memcached2 session
为备用
session
,使用
memcached
相当于
备份了一份
Session
如果
Tomcat1
发现
memcached2
失败
,
无法备份
Session
到
memcached2,
则将
Sessoin
备份存放在
memcached1
中
6.3 配置过程
下载相关
jar
包
下载相关
jar
包
,
参考下面官方说明的下载链接
https://github.com/magro/memcached-session-manager/wiki/SetupAndConfiguration
修改
tomcat
配置
主机88:
[root@tomcat1 conf.d]# vim /usr/local/tomcat/conf/context.xml
<Manager
className="de.javakaffee.web.msm.MemcachedBackupSessionManager"
memcachedNodes="n1:172.25.254.77:11211,n2:172.25.254.88:11211"
failoverNodes="n2"
requestUriIgnorePattern=".*\.(ico|png|gif|jpg|css|js)$"
transcoderFactoryClass="de.javakaffee.web.msm.serializer.kryo.KryoTranscoderFactory"
/>
主机77:
<Manager className="de.javakaffee.web.msm.MemcachedBackupSessionManager" memcachedNodes="n1:172.25.254.77:11211,n2:172.25.254.88:11211" failoverNodes="n1" requestUriIgnorePattern=".*\.(ico|png|gif|jpg|css|js)$" transcoderFactoryClass="de.javakaffee.web.msm.serializer.kryo.KryoTranscoderFactory" />
[root@tomcat lib]# systemctl restart tomcat.service
浏览器访问:www.a.com/test.jsp
77主机挂:[root@tomcat lib]# systemctl stop tomcat.service