1、haproxy https实现
2、总结tomcat的核心组件以及根目录结构
2.1核心组件示意图
名称 | 说明 |
---|---|
Server | 服务器,tomcat运行的进程实例,一个Server中可以有多个Service,但通常就一个 |
Service | 服务,用来组织Engine和Conntor的对应关系,一个service中只有一个Engine |
Connector | 连接器,负责客户端的HTTP(S)、AJP等协议连接。用来处理来自客户端的不同的连接请求或响应。一个Connector只属于某一个Engine。 |
Engine | 引擎,用来响应并处理用户请求。一个Engine上可以绑定多个Connector |
Host | 虚拟主机,可以实现多虚拟主机,例如使用不同的主机头区分 |
Context | 应用的上下文,配置特定url路径映射和目录的映射关系:url => directory |
2.2根目录结构
tomcat的默认根目录:/usr/local/tomcat/webapps/
在Tomcat中部署主站应用程序和其他应用程序,和之前WEB服务程序不同。
[22:47:21 root@CS8-VM8-10 webapps][#pwd
/usr/local/tomcat/webapps
[22:47:23 root@CS8-VM8-10 webapps][#ll
total 8
drwxr-x--- 3 tomcat tomcat 55 Aug 18 17:30 app2
-rw-r--r-- 1 root root 879 Aug 18 17:30 app2.war
drwxr-x--- 15 tomcat tomcat 4096 Aug 17 17:51 docs
drwxr-x--- 7 tomcat tomcat 99 Aug 17 17:51 examples
drwxr-x--- 6 tomcat tomcat 79 Aug 17 17:51 host-manager
drwxr-x--- 6 tomcat tomcat 114 Aug 17 17:51 manager
drwxr-x--- 3 tomcat tomcat 223 Aug 18 16:56 ROOT #网站的默认根目录
自定义一个Web应用(app2)与/usr/local/tomcat/webapps/目录下。
所以,网站链接的对应关系:
网站默认根目录:
/usr/local/tomcat/webapps/ROOT/
访问app2:
/usr/local/tomcat/webapps/app2
由此可知:网站默认的根目录与自定义的Web应用(app2)是属于同级关系。而其他Web应用(nginx)是子父目录的关系。
如果/usr/local/tomcat/webapps/ROOT/app2与/usr/local/tomcat/webapps/app2同时存在,则自定义的优先级要高,即/usr/local/tomcat/webapps/优先生效。
2.3补充
/usr/local/tomcat/webapps下面的每个目录对应的WebApp,可能存在一下目录:
主页配置:默认按以下顺序查找主页文件 index.html,index.htm、index.jsp
(主配置文件中的定义:/usr/local/tomcat/conf/web.xml ,也可以自行定义:/usr/local/tomcat/webapps/ROOT/WEB-INF/web.xml,参照主配置文件的定义修改即可)
WEB-INF/:当前目录WebApp的私有资源路径,通常存储当前应用使用的web.xml和context.xml配置文件。
META-INF/:类似于WEB-INF,也是私有资源的配置信息,和WEB-INF/目录一样浏览器无法访问。
classes/:类文件,当前webapp需要的类。
lib/:当前应用依赖的jar包。
3、tomcat实现多虚拟主机:基于域名访问
3.1构建相关网页
[21:20:00 root@CS8-VM8-10 ~][#mkdir /data/website{1,2,3}
[21:23:05 root@CS8-VM8-10 ~][#mkdir /data/website{1,2,3}/ROOT -pv
mkdir: created directory '/data/website1/ROOT'
mkdir: created directory '/data/website2/ROOT'
mkdir: created directory '/data/website3/ROOT'
[21:23:41 root@CS8-VM8-10 ~][#echo /data/website1/ROOT/index.html www.aaa.com >> /data/website1/ROOT/index.html
[21:24:52 root@CS8-VM8-10 ~][#cat /data/website1/ROOT/index.html
/data/website1/ROOT/index.html www.aaa.com
[21:25:09 root@CS8-VM8-10 ~][#cp /data/website1/ROOT/index.html /data/website2/ROOT/index.html
[21:25:47 root@CS8-VM8-10 ~][#cp /data/website1/ROOT/index.html /data/website3/ROOT/index.html
[21:25:53 root@CS8-VM8-10 ~][#vim /data/website2/ROOT/index.html
/data/website2/ROOT/index.html www.bbb.com
[21:26:33 root@CS8-VM8-10 ~][#vim /data/website3/ROOT/index.html
/data/website3/ROOT/index.html www.ccc.com
3.2修改配置文件:/usr/local/tomcat/conf/server.xml
多虚拟主机:参照该文件中的<Host ... > ... </Host>
增加的内容如下:
</Host>
<Host name="www.aaa.com" appBase="/data/website1/"
unpackWARs="true" autoDeploy="true">
</Host>
<Host name="www.bbb.com" appBase="/data/website2/"
unpackWARs="true" autoDeploy="true">
</Host>
<Host name="www.ccc.com" appBase="/data/website3/"
unpackWARs="true" autoDeploy="true">
</Host>
重启服务:
[21:33:18 root@CS8-VM8-10 tomcat][#systemctl restart tomcat.service
[21:43:33 root@CS8-VM8-10 tomcat][#pwd
/usr/local/tomcat
3.3修改物理机的hosts文件(略)
3.4浏览器测试访问
4、nginx实现后端tomcat的负载均衡调度
4.1 架构
client:10.0.8.7
nginx:10.0.8.8 (代理服务器)
tomcat1:10.0.8.17
tomcat2:10.0.8.18
4.2 客户端做好名称解析
client:10.0.8.7
vim /etc/hosts
#增加一下内容:
10.0.8.8 www.tomcat.org
4.2 代理服务器的配置
nginx :10.0.8.8
做好名称解析:vim /etc/hosts
#增加一下内容:
10.0.8.17 www.tomcat1.org
10.0.8.18 www.tomcat2.org
2022-09-13 09:18:05 yum install -y nginx
2022-09-13 09:18:43 hostnamectl set-hostname nginx
2022-09-13 09:19:17 vim /etc/nginx/nginx.conf
#在http语句块中增加以下内容:
upstream tomcat {
#ip_hash; #源地址hash
#hash $cookie_JSESSIONID; #基于cookie的hash
server 10.0.8.17:8080;
server 10.0.8.18:8080;
}
#在server语句块中增加一下内容:
location / {
proxy_pass http://tomcat; #tomcat该名称和upstream tomcat中的tomcat 一致
}
2022-09-13 09:44:41 nginx -t
2022-09-13 09:46:27 systemctl start nginx
4.3 后端服务器tomcat1的设置
tomcat1: 安装好tomcat相对应的环境(略)
120 2022-09-13 09:35:37 cd /usr/local/tomcat/
121 2022-09-13 09:35:38 ll
122 2022-09-13 09:35:43 vim conf/server.xml
#修改的内容:把默认(localhost)主机改为www.tomcat1.org
<Engine name="Catalina" defaultHost="www.tomcat1.org">
#增加该主机的相关信息,参照主机的格式
<Host name="www.tomcat1.org" appBase="/data/webapps"
uppackWAR="true" autoDeploy="true">
</Host>
123 2022-09-13 09:40:15 systemctl restart tomcat.service
124 2022-09-13 09:40:21 systemctl status tomcat
准备负载均衡规划的测试用的jsp文件:
#项目路径配置
mkdir -pv /data/webapps/ROOT
#编写测试jsp文件,内容在下面
vim /data/webapps/ROOT/index.jsp
<%@ page import="java.util.*" %>
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<title>tomcat test</title>
</head>
<body>
<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>
#设置权限
chown -R tomcat.tomcat /data/webapps/
4.4 tomcat2的设置与tomcat1的设置一样(略)
4.5 客户端测试
5、简述memcached的工作原理
参考他人文章:
https://blog.csdn.net/weixin_51867896/article/details/124416494?
5.1 session共享服务器
- msm介绍
- 两种工作模式(1.sticky 2.non-sticky)
msm介绍:
msm(memcache session manager) 提供将tomcat的session保持到memcache或者
redis程序,可实现高可用
sticky(黏性,粘性)模式工作原理:
(1)t1和m1(t2和m2)可以部署在同一台服务器中;
(2)当新用户发请求到t1时,t1生成的session返回给用户的同时,也会发给m2当备份。
即,t1的session 为主session,m2的session为备份session。使用memcache 相当于备份了session。
(3)如果t1发现m2失败无法备份session到m2,则将session备份存放在m1中
non-sticky(无黏性)模式工作原理:
(1)前端为tomcat,后端为memcache,两者无关联(黏性)关系。
(2)tomcat的session为中转session,对每一个sessionID随机选中后端的memcache节点m1或者m2为主session,
而另外一个memcache节点m2或者m1为备份节点。产生新的session会发送给主、备memcache,并且会清楚本地session。
(3)后端的两个memcache服务器对于一个session来说一个为主,一个为备,
但对于所有session信息来说每个memcache即同时为主备。
如果m1下线,m2则转正。m1再次上线,m2仍然是主session储存节点。