Session 黏性和复制集群(1)|学习笔记

简介: 快速学习 Session 黏性和复制集群

开发者学堂课程【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 服务器。

 

二、 规划

准备三台机器,分别定义主机名如下图

image.png

制定三台机器的分工,然后执行分工,三台都启动

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>

下面要写两个东西,主配置文件需要修改一下

image.png

如果不想要可以删掉,或者添加东西,要添加的东西和自己的规划有关,可以添加:

<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:

 image.png

如果用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

image.png

访问t 2

image.png在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,用它来实现负载均衡。

image.png关闭httpd默认主机

# cd /etc/httpd/conf

# vim httpd.conf

#DocumentRoot”/var/www/html”

# cd  ../conf.d

# vim vhosts.conf

# httpd -t

#systemctl start httpd

不想看httpd的静态页面,

就加上#DocumentRoot “/var/www/html,否则你会看到它的首页。

我们先来看一下它的配置,我们刚才已经用过这些# cd  ../conf.d

# vim vhosts.conf # httpd -t #systemctl start httpd 根据实际情况更改,要把之前的配置去掉,不然配置会冲突。

相关文章
|
存储 C语言
C 语言文件读取全指南:打开、读取、逐行输出
要从文件读取,可以使用 r 模式: FILE *fptr; // 以读取模式打开文件 fptr = fopen("filename.txt", "r"); 这将使 filename.txt 打开以进行读取。 在 C 中读取文件需要一点工作。坚持住!我们将一步一步地指导您。 接下来,我们需要创建一个足够大的字符串来存储文件的内容。 例如,让我们创建一个可以存储多达 100 个字符的字符串:
1160 2
C 语言文件读取全指南:打开、读取、逐行输出
|
关系型数据库 MySQL 索引
【mysql】MySQL 复合索引
【mysql】MySQL 复合索引
245 0
|
11月前
|
存储 监控 数据可视化
开发者如何使用日志服务 SLS
【10月更文挑战第17天】开发者如何使用日志服务 SLS
2222 4
|
SQL 存储 关系型数据库
MySQL主从同步延迟原因与解决方法
MySQL主从同步延迟原因与解决方法
1350 0
|
安全 API 开发工具
开发api数据接口的工作步骤
本文概述了使用Python的Flask框架开发简单API数据接口的基本步骤。首先,需明确API提供的数据及其来源,确保数据的真实可靠。其次,选择合适的开发工具和技术栈,如Python结合Flask,并安装所需环境。编写代码时,应导入必要模块、创建应用实例、定义数据、设计路由及处理函数,并考虑错误处理和日志记录。测试阶段,在本地启动服务器并使用工具验证功能和性能。最后,选择合适平台部署API,并确保其稳定性和安全性。在整个过程中,需注重数据安全、代码质量及系统性能优化。
|
前端开发 Oracle Java
【前端学java】java开发的依赖安装与环境配置(1)
【8月更文挑战第8天】java开发的依赖安装与环境配置
197 1
【前端学java】java开发的依赖安装与环境配置(1)
|
物联网 网络性能优化 开发工具
MQTT常见问题之MqttException 提示128如何解决
MQTT(Message Queuing Telemetry Transport)是一个轻量级的、基于发布/订阅模式的消息协议,广泛用于物联网(IoT)中设备间的通信。以下是MQTT使用过程中可能遇到的一些常见问题及其答案的汇总:
|
存储 监控 安全
保护企业财产:ERP系统的安全与数据保护策略
保护企业财产:ERP系统的安全与数据保护策略
914 0
|
缓存 NoSQL Java
SpringBoot自定义redisTemplate的key和value的序列化方式
SpringBoot自定义redisTemplate的key和value的序列化方式
319 0
|
SQL 存储 关系型数据库
为什么不能使用 datax 直接读写 hive acid 事务表?
为什么不能使用 datax 直接读写 hive acid 事务表?