开发者学堂课程【Tomcat 服务器入门详解:Session 黏性和复制集群】学习笔记,与课程紧密联系,让用户快速学习知识。
课程地址:https://developer.aliyun.com/learning/course/654/detail/10848
Session 黏性和复制集群
内容介绍:
一、 会话保持方式
二、 规划
三、 Nginx 调度
四、 Httpd 调度
五、Tomcat Session 集群
一、 会话保持方式
1、 session sticky 会话黏性
session绑定
一种是source ip,另一种是cookie
优点:简单易配置
2、 缺点:如果目标服务器故障后,如果没有做sessoin持久化,就会丢失session
3、 session复制集群
Tomcat自己的提供的多播集群,通过多播将任何一台的session同步到其它节点。
4、 缺点: Tomcat的同步节点不宜过多,互相即时通信同步session需要太多带宽:每一台都拥有全部session,内存占用太多
5、 session server
session 共享服务器,使用memcached、redis做共享的session 服务器。
二、 规划
准备三台机器,分别定义主机名如下图
制定三台机器的分工,然后执行分工,三台都启动
t 0、t 1、t 2和后面图有关,可以帮助了解后面那张图
环境变量配置
# vim /etc/profile.d/tomcat.sh
Export CATALINA_HOME=/usr/local/tomcat
Export PATH=$CATALINA_HOME/bin:$PATH
环境配置这次可以选择配置或不配置
项目路径配置
# mkdir -pv /data/webapps/ROOT
编写测试jsp文件,内容在下面
# vim /data/webapps/ROOT /index.jsp
# scp -r server.xm1 192.168.142.153 :/usr/ local/tomcat
在目录下面都会特别放一个文件,文件如下
<!DOCTYPE html>
<html lang=”en”>
<head>
<meta charset=”UTF-8”>
<title>lbjsptest</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>
下面要写两个东西,主配置文件需要修改一下
如果不想要可以删掉,或者添加东西,要添加的东西和自己的规划有关,可以添加:
<Host name=”t2.magedu.com” appBase=“webapps”
unpackWARs=”true” autoDeploy=”true”>
分别访问两个服务器,启动Tomcat服务
# startup.sh
这个基本工作已经做好,下面是:
测试用jsp
t 1 和t 2节点的/data/webapps/index.jsp
session.get Id()
是取session的值
request.getLocalPort()
是取服务器的地址和端口
request.getServerName()
是取服务器的名称
t 1虚拟主机配置
<Enginename =”Catalina”defaultHost=”t1.magedu.com”>
<Hostname=”t1.magedu.com”appBase=”/data/webapps”autoDeploy=”true”/>
</Engine>
t 2虚拟主机配置
<Enginename =”Catalina”defaultHost=”t2.magedu.com”>
<Hostname=”t2.magedu.com”appBase=”/data/webapps”autoDeploy=”true”/>
</Engine>
访问查看是否启动tomcat:
如果用Nginx调度,装完Nginx调度要加upstream
三、Nginx 调度
# yum install nginx
# cp /etc/nginx/nginx.conf /etc/nginx/nginx.conf.bak
# vim /etc/nginx/nginx.conf
#nginx -t
#systemctl start nginx.service
我们之前配置过这个,现在直接来写
Upstream tomcats {
#ip_hash;
#先禁用看看轮询,之后开启开黏性
server t1.magedu.com:8080;
server t2.magedu.com:8080;
}
server {
location ~* \.(jsp|do)$ {
proxy_pass
http://tomcats
;
}
}
测试http://tO.magedu.com/index.jsp,可以看到轮询调度效果。
[root@node0 ~]#while :;do curl t0.likai.com ;sleep 1;done
<div>On tomcats</div>
<div>192.168.32.17:8080</div>
<div>SessionID = <span style="color:blue">285FDA55692674DF3925A37D2553FA5F.Tomcat1</span></div>
Sat Jan 18 20:37:45 CST 2020
<div>On tomcats</div>
<div>192.168.32.27:8080</div>
<div>SessionID = <span style="color:blue">AB9F8E1D1AE0879A1E8917674376453C.Tomcat2</span></div>
Sat Jan 18 20:37:46 CST 2020
<div>On tomcats</div>
<div>192.168.32.17:8080</div>
<div>SessionID = <span style="color:blue">C8C4F14B65C6F4177D431D0C48D97DFA.Tomcat1</span></div>
Sat Jan 18 20:37:47 CST 2020
<div>On tomcats</div>
<div>192.168.32.27:8080</div>
<div>SessionID = <span style="color:blue">A96F3BE11E76F2883B9C0A2972BB3E87.Tomcat1</span></div>
Sat Jan 18 20:37:48 CST 2020
#调度的时候SessionID会发生变化
访问t 1
访问t 2
在upstream中使用ip_hash指令,使用客户端IP地址H&sh。这个hash值使用IPv4地址的前24位或全部的IP v6地址。
配置完reload nginx服务。测试一下看看效果。关闭Session对应的Tomcat服务,再重新启动它,看看Session的变化。
下面我们来看httpd调度,这个不像Nginx调度简单,它有很多模块,Httpd调度比较麻烦
四、Httpd 调度
使用httpd-M可以看到proxy_balancer_modue,用它来实现负载均衡。
关闭httpd默认主机
# cd /etc/httpd/conf
# vim httpd.conf
#DocumentRoot”/var/www/html”
# vim vhosts.conf
# httpd -t
#systemctl start httpd
不想看httpd的静态页面,
就加上#DocumentRoot “/var/www/html
,否则你会看到它的首页。
我们先来看一下它的配置,我们刚才已经用过这些# cd ../conf.d
# vim vhosts.conf # httpd -t #systemctl start httpd
根据实际情况更改,要把之前的配置去掉,不然配置会冲突。