接下来再使用粘制位sticky来实现会话保持
1.什么是会话保持(Session Persistence)?
在一段时间内将同一客户的某一类型请求绑定至 同一台服务器上,使得这一时间段中该客户端所有该类型请求均由同一服务器进行处理
让一个用户的访问始终是一个tomcat服务器,可以保证用户的数据在一个tomcat服务器上面
让一个用户始终访问一个tomcat服务器,不能让同一个用户轮询访问后台的两个tomcat服务器,否则会造成用户的数据丢失
2.nginx会话保持之nginx-sticky-module模块
在使用负载均衡的时候会遇到会话保持的问题,常用的方法有
- (1)ip_hash,根据客户端的IP,将请求分配到不同的服务器上
- (2)cookie,服务器给客户端下发一个cookie,具有特定cookie的请求会分配给它的发布者
注意:cookie需要浏览器支持,且有时候会泄露数据
3.Sticky工作原理
Sticky是nginx的一个模块,它是基于cookie的一种nginx的负载均衡解决方案,通过分发和识别cookie
来使同一个客户端的请求落在同一台服务器上,默认标识名为route
1.客户端首次发起访问请求,nginx接收后,发现请求头没有cookie,则以轮询方式将请求分发给后端服务器。
2.后端服务器处理完请求,将响应数据返回给nginx。
3.此时nginx生成带route的cookie,返回给客户端。route的值与后端服务器对应,可能是明文,也可能是md5、sha1等Hash值
4.客户端接收请求,并保存带route的cookie。
5.当客户端下一次发送请求时,会带上route,nginx根据接收到的cookie中的route值,转发给对应的后端服务器。
这一次需要重新编译nginx增加nginx-sticky-module模块
4.具体过程如下
- (1)在server1上面:
cd open/进入openresty的解压目录
cd bundle/进入这个目录
可以看到这个里面没有粘制位的模块(openresty(nginx)没有)不可以做
cd /usr/local/lnmp/nginx使用之前的nginx尝试一下
/usr/local/openresty/nginx/sbin/nginx -s stop停止这个/usr/local/openresty/nginx/sbin/nginx -s stop停止这个服务
cd conf/
cp /usr/local/openresty/nginx/conf/nginx.conf .将之前的配置文件复制一份
vim nginx.conf
加入:在tomcat模块里面加入sticky;
/usr/local/lnmp/nginx/sbin/ngxin -s reload报错,nginx也不使用能sticky
- (2)从真机上给server1虚拟机传nginx1.10.1和nginx-sticky两个包
- (3)在server1上面:
查看安装包并且解压
解压之后发现了sticky模块
cd /usr/local/lnmp/nginx/sbin/nginx -V 查看版以及编译情况,发现还是之前的
cd nginx-1.10.1/ 进入10版本的nginx目录
./configure 加上查看出来的 --add-module=/root/nginx-sticky...重新编译
cd objs/编译好之后进入objs/这个目录
vim ngx_modules.c可以看到这个nginx有sticky模块了
安装make && make install
cd /usr/local/lnmp/nginx直接将之前的nginx覆盖
sbin/nginx -V版本已经改变了
cd conf/
cp /usr/lcoal/openresty/nginx/conf/nginx.conf .再复制一份配置文件进行配置
vim nginx.conf
在上面的tomcat模块中加入sticky;
注释掉php模块的一部分
../sbin/nginx开启nginx服务,没有报错
netstat -tlnp | grep 80查看nginx服务开启
开启nginx的负载均衡功能,以及粘制
在浏览器里面进行测试
输入172.25.12.1/test.jsp(nginx代理服务器的ip)
代理服务器通过jsp把动态请求转给tomcat服务器
发现一个用户连续注册使用一直都是同一个tomcat服务器
- (4)在真机的浏览器里面进行测试
发现一直在tomcat1上面进行使用,实现了会话保持
- (5)down掉一台tomcat服务器
在server1上面:
cd /usr/local/tomcat/bin/
./shutwodn.sh关闭tomcat1服务器
发现用户会一直访问tomcat2,不会变
这就实现了粘制位
可以看出客户会一直访问同一台tomcat服务器,实现了会话保持
即使后台一台tomcat服务器宕机,切换到另外一台tomcat服务器上面依然可以实现会话保持
但是此时在第一个tomcat主机上面的数据会丢失