tomcat练习

[TOC]

一、JDK的安装

JDK是 Java 语言的软件开发工具包,JDK协议基于 JRL(JavaResearch License)协议

java程序的源码是.java,需要使用JDK里面的javac将.java转换为字节码(.class),在通过虚拟机将字节码转换为Linux和Windows里的机器码

JDK分为免费版(openjdk:测试环境使用)和收费版(oraclejdk 8版本以后收费:生产环境使用)

openjdk的安装,只需要yum或者apt即可安装

1
2
3
[root@Rocky ~]#yum -y install java-1.8.0-openjdk-devel

[root@ubuntu2204 ~]#apt -y install openjdk-11-jdk

1.1、安装oracle官方JDK

官方下载链接:

1
#注意需要注册登录后,才能下载JDK https://www.oracle.com/java/technologies/downloads/#java8 https://www.oracle.com/java/technologies/downloads/#java11 https://www.oracle.com/java/technologies/javase/javase-jdk8-downloads.html
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
[root@Rocky ~]#ls
anaconda-ks.cfg jdk-8u321-linux-x64.tar.gz
[root@Rocky ~]#tar xf jdk-8u321-linux-x64.tar.gz -C /usr/local
[root@Rocky ~]#cd /usr/local
[root@Rocky local]#ls
bin etc games include jdk1.8.0_321 lib lib64 libexec sbin share src
[root@Rocky local]#ln -s jdk1.8.0_321/ jdk #设置软连接
[root@Rocky local]#ls
bin etc games include jdk jdk1.8.0_321 lib lib64 libexec sbin share src

#初始化环境变量
[root@Rocky ~]#vim /etc/profile.d/jdk.sh
export JAVA_HOME=/usr/local/jdk export
PATH=$PATH:$JAVA_HOME/bin
#以下两项非必须项
export JRE_HOME=$JAVA_HOME/jre
export CLASSPATH=.:$JAVA_HOME/lib/:$JRE_HOME/lib/
:wq
[root@Rocky ~]#. /etc/profile.d/jdk.sh

#注意:JAVA_HOME变量必须设置,否则tomcat启动时会出下面错误
[root@Rocky ~]#catalina.sh #安装Tomcat才有这个脚本
Neither the JAVA_HOME nor the JRE_HOME environment variable is defined At least one of these environment variable is needed to run this program [root@centos8 ~]#startup.sh Neither the JAVA_HOME nor the JRE_HOME environment variable is defined At least one of these environment variable is needed to run this program

#验证安装
[root@Rocky ~]#java -version
java version "1.8.0_321"
Java(TM) SE Runtime Environment (build 1.8.0_321-b07)
Java HotSpot(TM) 64-Bit Server VM (build 25.321-b07, mixed mode)
[root@Rocky ~]#which java
/usr/local/jdk/bin/java

二、Tomcat的二进制安装

注意:安装tomcat前必须先部署JDK

官方和镜像站点下载:

1
2
https://tomcat.apache.org
https://mirrors.tuna.tsinghua.edu.cn/apache/tomcat/

image-20221202110441970

2.1、Tomcat的安装

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
[root@Rocky ~]#wget https://dlcdn.apache.org/tomcat/tomcat-9/v9.0.59/bin/apache-tomcat-9.0.59.tar.gz
[root@Rocky ~]#ls
anaconda-ks.cfg apache-tomcat-9.0.59.tar.gz jdk-8u321-linux-x64.tar.gz
[root@Rocky ~]#tar xf apache-tomcat-9.0.59.tar.gz -C /usr/local
[root@Rocky ~]#cd /usr/local
[root@Rocky local]#ls
apache-tomcat-9.0.59 bin etc games include jdk jdk1.8.0_321 lib lib64 libexec sbin share src
[root@Rocky local]#ln -s apache-tomcat-9.0.59/ tomcat

#设置环境变量
[root@Rocky local]#echo 'PATH=/usr/local/tomcat/bin:$PATH' > /etc/profile.d/tomcat.sh
[root@Rocky local]#. /etc/profile.d/tomcat.sh
[root@Rocky local]#echo $PATH
/usr/local/tomcat/bin:/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/root/bin:/usr/local/jdk/bin

#查看当前变量设置和命令用法
[root@Rocky local]#catalina.sh
Using CATALINA_BASE: /usr/local/tomcat
Using CATALINA_HOME: /usr/local/tomcat
Using CATALINA_TMPDIR: /usr/local/tomcat/temp
Using JRE_HOME: /usr/local/jdk/jre
Using CLASSPATH: /usr/local/tomcat/bin/bootstrap.jar:/usr/local/tomcat/bin/tomcat-juli.jar
Using CATALINA_OPTS:
Usage: catalina.sh ( commands ... )
commands:
debug Start Catalina in a debugger
debug -security Debug Catalina with a security manager
jpda start Start Catalina under JPDA debugger
run Start Catalina in the current window
run -security Start in the current window with security manager
start Start Catalina in a separate window
start -security Start in a separate window with security manager
stop Stop Catalina, waiting up to 5 seconds for the process to end
stop n Stop Catalina, waiting up to n seconds for the process to end
stop -force Stop Catalina, wait up to 5 seconds and then use kill -KILL if still running
stop n -force Stop Catalina, wait up to n seconds and then use kill -KILL if still running
configtest Run a basic syntax check on server.xml - check exit code for result
version What version of tomcat are you running?
Note: Waiting for the process to end and use of the -force option require that $CATALINA_PID is defined

#启动tomcat
[root@Rocky local]#startup.sh #此脚本等同于catalina.sh + start
Using CATALINA_BASE: /usr/local/tomcat
Using CATALINA_HOME: /usr/local/tomcat
Using CATALINA_TMPDIR: /usr/local/tomcat/temp
Using JRE_HOME: /usr/local/jdk/jre
Using CLASSPATH: /usr/local/tomcat/bin/bootstrap.jar:/usr/local/tomcat/bin/tomcat-juli.jar
Using CATALINA_OPTS:
Tomcat started.
[root@Rocky local]#ss -ntl #查看Tomcat的8080端口已开启
State Recv-Q Send-Q Local Address:Port Peer Address:Port Process
LISTEN 0 128 0.0.0.0:22 0.0.0.0:*
LISTEN 0 1 [::ffff:127.0.0.1]:8005 *:*
LISTEN 0 100 *:8080 *:*
LISTEN 0 128 *:80 *:*
LISTEN 0 128 [::]:22 [::]:*

#关闭tomcat
[root@Rocky local]#shutdown.sh #此脚本等同于catalina.sh + stop
Using CATALINA_BASE: /usr/local/tomcat
Using CATALINA_HOME: /usr/local/tomcat
Using CATALINA_TMPDIR: /usr/local/tomcat/temp
Using JRE_HOME: /usr/local/jdk/jre
Using CLASSPATH: /usr/local/tomcat/bin/bootstrap.jar:/usr/local/tomcat/bin/tomcat-juli.jar
Using CATALINA_OPTS:
#或者以下也可以,指定10s后停止,默认5s
[root@centos8 ~]#catalina.sh stop 10

#再次用不同方式启动tomcat
[root@Rocky local]#catalina.sh start
Using CATALINA_BASE: /usr/local/tomcat
Using CATALINA_HOME: /usr/local/tomcat
Using CATALINA_TMPDIR: /usr/local/tomcat/temp
Using JRE_HOME: /usr/local/jdk/jre
Using CLASSPATH: /usr/local/tomcat/bin/bootstrap.jar:/usr/local/tomcat/bin/tomcat-juli.jar
Using CATALINA_OPTS:
Tomcat started.
#再次用不同方式关闭tomcat
[root@Rocky local]#catalina.sh stop
Using CATALINA_BASE: /usr/local/tomcat
Using CATALINA_HOME: /usr/local/tomcat
Using CATALINA_TMPDIR: /usr/local/tomcat/temp
Using JRE_HOME: /usr/local/jdk/jre
Using CLASSPATH: /usr/local/tomcat/bin/bootstrap.jar:/usr/local/tomcat/bin/tomcat-juli.jar
Using CATALINA_OPTS:

image-20221202112918035

注意:为了后期更方便管理,需添加service文件

2.2、配置tomcat自启动的service文件

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
#创建tomcat专用帐户
[root@Rocky ~]#useradd -r -s /sbin/nologin tomcat

#准备service文件中相关环境文件
[root@Rocky ~]#vim /usr/local/tomcat/conf/tomcat.conf
#如果不指定上面变量,/var/log/messages文件中会出现下面无法启动错误提示 Mar 15 14:30:09 centos8 startup.sh[1530]: Neither the JAVA_HOME nor the JRE_HOME environment variable is defined Mar 15 14:30:09 centos8 startup.sh[1530]: At least one of these environment variable is needed to run this program

[root@Rocky ~]#chown -R tomcat. /usr/local/tomcat/

#创建tomcat.service文件
[root@Rocky ~]#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
:wq
[root@Rocky ~]#systemctl daemon-reload #重新加载
[root@Rocky ~]#systemctl enable --now tomcat

三、tomcat的文件结构和组成

目录 说明
bin 服务启动、停止等相关程序和文件
conf 配置文件
lib 库目录
logs 日志目录
webapps 应用程序,应用部署目录
work jsp编译后的结果文件,建议提前预热访问,升级应用后,删除此目录数据才能更新

注意:当java程序更新时,需要将work目录数据删除(rm -rf /usr/local/tomcat/work/*)

3.1、JSP WebApp目录结构

$CATALINA_BASE/webapps下面的每个目录对应的WebApp,可能有以下子目录,但下面子目录是非必须的

①主页配置:默认按以下顺序查找主页文件 index.html,index.htm、index.jsp

②WEB-INF/:当前目录WebApp的私有资源路径,通常存储当前应用使用的web.xml和context.xml配置文件

③META-INF/:类似于WEB-INF,也是私有资源的配置信息,和WEB-INF/目录一样浏览器无法访问

④classes/:类文件,当前webapp需要的类

⑤lib/:当前应用依赖的jar包

3.2、主页设置

3.2.1、全局配置实现修改默认主页文件

默认情况下 tomcat 会在**$CATALINA_BASE**/webapps/ROOT/目录下按以下次序查找文件,找到第一个则进行显示

​ ——index.html

​ ——index.htm

​ ——index.jsp

可以通过修改 $CATALINA_BASE/conf/web.xml 中的下面 标签 内容修改默认页文件

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
#此是修改所有网站的优先级
[root@Rocky ~]#vim /usr/local/tomcat/conf/web.xml
<welcome-file-list>
<welcome-file>index.html</welcome-file> #调整此三行的前后顺序,即可解决其优先级
<welcome-file>index.htm</welcome-file>
<welcome-file>index.jsp</welcome-file>
</welcome-file-list>

</web-app>
[root@Rocky ~]#systemctl restart tomcat

#单独修改其中一个网站的优先级(比如修改ROOT)
[root@Rocky ~]#vim /usr/local/tomcat/webapps/ROOT/WEB-INF/web.xml
<display-name>Welcome to Tomcat</display-name>
<description>
Welcome to Tomcat
</description>
<welcome-file-list> #添此5行到此位置
<welcome-file>index.html</welcome-file> #调整此三行的前后顺序,即可解决其优先级
<welcome-file>index.htm</welcome-file>
<welcome-file>index.jsp</welcome-file>
</welcome-file-list>
</web-app>
:wq


#如果是针对特定APP目录设置专用配置文件
[root@Rocky tomcat]#cp -rp webapps/ROOT/WEB-INF/ webapps/magedu/

[root@Rocky tomcat]#chown -R tomcat.tomcat webapps/magedu/

四、部署基于JAR包的博客系统Halo

Halo 是一款现代化的基于JAVA实现的博客/CMS系统

Halo 官网: https://halo.run/

Halo 部署: https://docs.halo.run/install/linux

docker 部署: https://docs.halo.run/install/docker

jar包不依赖于Tomcat

1
2
3
4
#注意:运行当前版本Halo的最低依赖要求为 JRE 11,目前介绍两种 Linux 发行版的安装方式,均为 OpenJRE,不推荐 Oracle 版本。
[root@Rocky opt]#ls #下载jar包,可以直接执行程序
halo-1.4.17.jar
[root@Rocky opt]#java -jar halo-1.4.17.jar

image-20221202151148398

五、自动的应用部署war包

5.1、将jsp文件制作成war包

1
2
3
4
5
6
7
8
9
10
11
[root@centos8 ~]#ls /data/app2/
test.jsp
[root@centos8 ~]#cd /data/app2/
#生成war包文件app2.war,此文件的名称决定了tomcat子目录的名称
[root@centos8 app2]#jar cvf /data/app2.war *
added manifest adding: test.html(in = 28) (out= 27)(deflated 3%)
adding: test.jsp(in = 329) (out= 275)(deflated 16%)
[root@centos8 app2]#cd /data/
[root@centos8 data]#ls app2
app2.war
[root@centos8 data]#chown tomcat.tomcat /data/app2.war

5.2、自动应用部署上面的war包

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
[root@centos8 data]#cd /usr/local/tomcat
[root@centos8 tomcat]#cp -p /data/app2.war webapps/

#再次查看,tomcat将app2.war自动解压缩
[root@centos8 tomcat]#ll webapps/
total 8
drwxr-x--- 15 tomcat tomcat 4096 Feb 9 11:02 docs
drwxr-x--- 6 tomcat tomcat 83 Feb 9 11:02 examples
drwxr-x--- 5 tomcat tomcat 87 Feb 9 11:02 host-manager
drwxr-x--- 5 tomcat tomcat 103 Feb 9 11:02 manager
drwxr-x--- 3 tomcat tomcat 300 Feb 9 19:59 ROOT
drwxr-x--- 3 tomcat tomcat 55 Feb 9 20:14 app2
-rw-r--r-- 1 tomcat tomcat 862 Feb 9 20:05 app2.war
[root@centos8 tomcat]#ll webapps/app2
total 8
drwxr-x--- 2 tomcat tomcat 44 Feb 9 20:14 META-INF
-rw-r----- 1 tomcat tomcat 329 Aug 30 02:30 test.jsp

六、基于WEB的管理Server status和Manager APP实现应用部署

tomcat 提供了基于WEB的管理页面,默认由 tomcat-admin-webapps.noarch包提供相关文件

打开浏览器可以访问tomcat管理的默认管理页面,点击下图两个按钮都会出现下面提示403的错误提示

image-20221202154610064

image-20221202154807444

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
#修改conf/tomcat-users.xml,我们需要一个角色manager-gui。
[root@centos8 tomcat]#vim conf/tomcat-users.xml
<tomcat-users xmlns="http://tomcat.apache.org/xml"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://tomcat.apache.org/xml tomcat-users.xsd"
version="1.0">
#加下面两行,指定用户和密码
<role rolename="manager-gui"/>
<user username="admin" password="123456" roles="manager-gui"/>
</tomcat-users>
:wq
#修改全局配置文件需要重启服务生效
[root@centos8 tomcat]#systemctl restart tomcat

#注意此时只能本地访问,不能远程,所以需修改webapps/manager/META-INF/context.xml
[root@centos8 tomcat]#vim webapps/manager/META-INF/context.xml
<Context antiResourceLocking="false" privileged="true" >
<Valve className="org.apache.catalina.valves.RemoteAddrValve"
allow="127\.\d+\.\d+\.\d+|::1|0:0:0:0:0:0:0:1|10\.0\.0\.\d+" /> #添加|10\.0\.0\.\d+其中d表示一个数字+表示多个数字
<Manager sessionAttributeValueClassNameFilter="java\.lang\.
:wq
#修改WebApp的配置无需重启服务即可生效

七、tomcat实现多虚拟主机

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
[root@Rocky ~]#cd /usr/local/tomcat
[root@Rocky tomcat]#vim conf/server.xml
<Host name="localhost" appBase="webapps"
unpackWARs="true" autoDeploy="true">

<!-- SingleSignOn valve, share authentication between web applications
Documentation at: /docs/config/valve.html -->
<!--
<Valve className="org.apache.catalina.authenticator.SingleSignOn" />
-->

<!-- Access log processes all example.
Documentation at: /docs/config/valve.html
Note: The pattern used is equivalent to using pattern="common" -->
<Valve className="org.apache.catalina.valves.AccessLogValve" directory="logs"
prefix="localhost_access_log" suffix=".txt"
pattern="%h %l %u %t &quot;%r&quot; %s %b" />

</Host>
#添加下面内容即可增加另一台虚拟主机
<Host name="n68.magedu.org" appBase="/data/tomcat/n68" #n68.magedu.org必须是网站名,/data/tomcat/n68是文件存放路径
unpackWARs="true" autoDeploy="true">
<Valve className="org.apache.catalina.valves.AccessLogValve" directory="logs"
prefix="n68_access_log" suffix=".txt" #日志的名称
pattern="%h %l %u %t &quot;%r&quot; %s %b" />

</Host>
:wq

#对每个虚拟主机,准备数据
[root@Rocky tomcat]#mkdir -p /data/tomcat/n68/ROOT
[root@Rocky tomcat]#cd /data/tomcat/n68/ROOT
[root@Rocky ROOT]#vim index.html
<h1> 10.0.0.186 </h1>
:wq

#设置权限
[root@Rocky ROOT]#chown -R tomcat. /data/tomcat/n68/


#此外还需要DNS进行解析
[root@DNS ~]#vim /var/named/magedu.org.zone
$TTL 1D
@ IN SOA master admin.magedu.org ( 6 1D 10M 1D 6H )
NS master
NS slave1
master A 10.0.0.128
slave1 A 10.0.0.184
n68 A 10.0.0.186
:wq
[root@DNS ~]#rndc reload

[root@Rocky tomcat]#systemctl restart tomcat

image-20221202163609685

八、tomcat的负载均衡

image-20221202173530849

8.1、Tomcat配置

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
[root@tomcat1 ~]#cd /usr/local/tomcat
[root@tomcat1 tomcat]#vim conf/server.xml
<Host name="www.magedu.org" appBase="/data/tomcat/node1/"
unpackWARs="true" autoDeploy="true">
<Valve className="org.apache.catalina.valves.AccessLogValve" directory="logs"
prefix="node1_access_log" suffix=".txt"
pattern="%h %l %u %t &quot;%r&quot; %s %b" />
</Host>
:wq
[root@tomcat1 ~]#mkdir -p /data/tomcat/node1/ROOT
[root@tomcat1 ~]#cd /data/tomcat/node1/ROOT
[root@tomcat1 ROOT]#vim index.jsp
[root@tomcat1 ROOT]#cat 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 node1 </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@tomcat1 ~]#chown -R tomcat. /data/tomcat/node1/
[root@tomcat1 ROOT]#systemctl restart tomcat
-----------------------------------------------------------------------------------
[root@tomcat2 ~]#cd /usr/local/tomcat
[root@tomcat2 tomcat]#vim conf/server.xml
<Host name="www.magedu.org" appBase="/data/tomcat/node2/"
unpackWARs="true" autoDeploy="true">
<Valve className="org.apache.catalina.valves.AccessLogValve" directory="logs"
prefix="node2_access_log" suffix=".txt"
pattern="%h %l %u %t &quot;%r&quot; %s %b" />
</Host>
:wq
[root@tomcat2 ~]#mkdir -p /data/tomcat/node2/ROOT
[root@tomcat2 ~]#cd /data/tomcat/node2/ROOT
[root@tomcat2 ROOT]#vim index.jsp
[root@tomcat2 ROOT]#cat 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 node2 </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@tomcat2 ~]#chown -R tomcat. /data/tomcat/node2/
[root@tomcat2 ROOT]#systemctl restart tomcat

8.2、DNS解析

1
2
3
4
5
6
7
8
9
10
11
[root@DNS ~]#vim /var/named/magedu.org.zone 
$TTL 1D
@ IN SOA master admin.magedu.org ( 6 1D 10M 1D 6H )
NS master
NS slave1
master A 10.0.0.128
slave1 A 10.0.0.184
node1 A 10.0.0.216
node2 A 10.0.0.217
:wq
[root@DNS ~]#rndc reload

8.3、nginx的配置(反向代理与负载均衡)

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
[root@nginx ~]#vim /apps/nginx/conf/nginx.conf
http {
upstream tomcat { #添加此模块
server 10.0.0.216:8080;
server 10.0.0.217:8080;
}

server {
listen 80;
server_name localhost;
location / {
root html;
index index.html index.htm;
proxy_pass http://tomcat; #添加以下两行
proxy_set_header Host $http_host;
}
}
}
:wq
[root@nginx ~]#systemctl restart nginx
#此时访问方式是轮询,但session一直发生变化
8.3.1、保持session不发生变化
1
2
3
4
5
6
7
8
9
[root@nginx ~]#vim /apps/nginx/conf/nginx.conf
upstream tomcat {
hash $cookie_JSESSIONID; #添加此行,当jsession相同时,就往同一台机器上调度
server 10.0.0.216:8080;
server 10.0.0.217:8080;
}
:wq
[root@nginx ~]#systemctl restart nginx

image-20221202185420285

image-20221202185443412

九、tomcat和memcached集成在一台主机,实现session共享

msm(memcached session manager)提供将Tomcat的session保持到memcached或redis的程序,可以实现高可用。

注意:msm不支持Tomcat10版本

项目早期托管在google code,目前在Github

github网站链接:

1
https://github.com/magro/memcached-session-manager

安装参考链接:

1
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。

1
2
3
4
5
6
7
8
9
10
11
memcached-session-manager-2.3.2.jar
memcached-session-manager-tc9-2.3.2.jar #如果是Tomcat8,需要安装tc8
spymemcached-2.12.3.jar

msm-kryo-serializer-2.3.2.jar
kryo-serializers-0.45.jar
kryo-3.0.3.jar
minlog-1.3.1.jar
reflectasm-1.11.9.jar
asm-5.2.jar
objenesis-2.6.jar

image-20221203090558919

9.1、Tomcat配置

和上面8.1、Tomcat配置相同

9.2、DNS解析

和上面8.2、DNS解析相同

9.3、nginx的配置(反向代理与负载均衡)

和上面8.3、nginx的配置(反向代理与负载均衡)相同

9.4、memcached的配置

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
[root@tomcat1 ~]#yum -y install memcached
[root@tomcat1 ~]#vim /etc/sysconfig/memcached
PORT="11211"
USER="memcached"
MAXCONN="1024" #最大连接数
CACHESIZE="64" #最大使用内存,正常生产中此处应该设置为内存的一半大小
OPTIONS="" #注意有的版本此处写的127.0.0.1,则需要注释掉此行
:wq
[root@tomcat1 ~]#systemctl enable --now memcached.service
[root@tomcat1 ~]#ss -ntl
State Recv-Q Send-Q Local Address:Port Peer Address:Port
LISTEN 0 128 *:11211 *:*
------------------------------------------------------------------------------------
[root@tomcat2 ~]#yum -y install memcached
[root@tomcat2 ~]#systemctl enable --now memcached.service
[root@tomcat2 ~]#ss -ntl
State Recv-Q Send-Q Local Address:Port Peer Address:Port
LISTEN 0 128 *:11211 *:*

9.5、Tomcat和memcached的关联设置

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
[root@tomcat1 tomcat]#vim conf/context.xml
-->
#添加以下内容
<Manager className="de.javakaffee.web.msm.MemcachedBackupSessionManager"
memcachedNodes="n1:10.0.0.216:11211,n2:10.0.0.217:11211"
failoverNodes="n1"
requestUriIgnorePattern=".*\.(ico|png|gif|jpg|css|js)$"
transcoderFactoryClass="de.javakaffee.web.msm.serializer.kryo.KryoTranscoderFactory"
/>
#添加以上内容
</Context>
:wq
[root@tomcat1 tomcat]#cd lib
[root@tomcat1 lib]#rz -E #将前面所说的jar文件导入这个目录下
rz waiting to receive.
[root@tomcat1 lib]#ls |wc -l
43
[root@tomcat1 lib]#systemctl restart tomcat
------------------------------------------------------------------------------------
[root@tomcat2 tomcat]#vim conf/context.xml
-->
#添加以下内容
<Manager className="de.javakaffee.web.msm.MemcachedBackupSessionManager"
memcachedNodes="n1:10.0.0.216:11211,n2:10.0.0.217:11211"
failoverNodes="n2"
requestUriIgnorePattern=".*\.(ico|png|gif|jpg|css|js)$"
transcoderFactoryClass="de.javakaffee.web.msm.serializer.kryo.KryoTranscoderFactory"
/>
#添加以上内容
</Context>
:wq
[root@tomcat2 tomcat]#cd lib
#将前面所说的jar文件导入这个目录下
[root@tomcat2 lib]#ls |wc -l #查看现在有多少文件
43
[root@tomcat2 lib]#systemctl restart tomcat

image-20221203102125576

image-20221203102452083

十、redis实现non-sticky模式的msm,实现session共享

将spymemcached.jar、memcached-session-manage、kyro相关的jar文件都放到Tomcat的lib目录中

去,这个目录是 $CATALINA_HOME/lib/ ,对应本次安装就是/usr/local/tomcat/lib。

1
2
3
4
5
6
7
8
9
10
11
12
13
memcached-session-manager-2.3.2.jar
memcached-session-manager-tc9-2.3.2.jar #如果是Tomcat8,需要安装tc8
spymemcached-2.12.3.jar

jedis-3.0.0.jar

msm-kryo-serializer-2.3.2.jar
kryo-serializers-0.45.jar
kryo-3.0.3.jar
minlog-1.3.1.jar
reflectasm-1.11.9.jar
asm-5.2.jar
objenesis-2.6.jar

image-20221203104449102

10.1、Tomcat配置

和上面8.1、Tomcat配置相同

10.2、DNS解析

和上面8.2、DNS解析相同

10.3、nginx的配置(反向代理与负载均衡)

和上面8.3、nginx的配置(反向代理与负载均衡)相同

10.4、redis配置

1
2
3
4
5
6
[root@redis ~]#yum -y install redis
[root@redis ~]#vim /etc/redis.conf
bind 0.0.0.0 #将127.0.0.1改为0.0.0.0
:wq
[root@redis ~]#systemctl enable --now redis

10.5、Tomcat和redis的关联设置

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
[root@tomcat1 tomcat]#vim conf/context.xml
-->
#添加以下内容
<Manager className="de.javakaffee.web.msm.MemcachedBackupSessionManager"
memcachedNodes="redis://10.0.0.218" #安装redis的ip
sticky="false"
sessionBackupAsync="false"
lockingMode="uriPattern:/path1|/path2"
requestUriIgnorePattern=".*\.(ico|png|gif|jpg|css|js)$"
transcoderFactoryClass="de.javakaffee.web.msm.serializer.kryo.KryoTranscoderFactory"
/>
#添加以上内容
</Context>
:wq
[root@tomcat1 tomcat]#systemctl restart tomcat

--------------------------------------------------------------------------
[root@tomcat2 tomcat]#vim conf/context.xml
-->
#添加以下内容
<Manager className="de.javakaffee.web.msm.MemcachedBackupSessionManager"
memcachedNodes="redis://10.0.0.218"
sticky="false"
sessionBackupAsync="false"
lockingMode="uriPattern:/path1|/path2"
requestUriIgnorePattern=".*\.(ico|png|gif|jpg|css|js)$"
transcoderFactoryClass="de.javakaffee.web.msm.serializer.kryo.KryoTranscoderFactory"
/>
#添加以上内容
</Context>
:wq
[root@tomcat2 tomcat]#systemctl restart tomcat

10.6、检测redis是否有session数据

1
2
3
4
5
6
7
8
9
#未有客户访问前
[root@redis ~]#redis-cli
127.0.0.1:6379> keys *
(empty list or set)
127.0.0.1:6379>
#有客户访问后
127.0.0.1:6379> keys *
1) "validity:EB2796C9FF36561966BC7CFA3BBBA079"
2) "EB2796C9FF36561966BC7CFA3BBBA079"

image-20221203111204065

image-20221203111234234

十一、


本博客所有文章除特别声明外,均采用 CC BY-SA 4.0 协议 ,转载请注明出处!