Tomcat + memcached 实现session共享

1. LNMP+memcached

环境:

server1:192.168.1.11

lnmp架构,参考上一片文章https://blog.csdn.net/qq_36023219/article/details/105909836

目的:

测试memcached,体会memcached作用

步骤:

1. 安装memcached

yum install memcached.x86_64 -y

 

2. 安装php的memcache扩展

获取安装包

/usr/local/lnmp/php/bin/phpize 

没有autoconf,通过yum仓库安装

yum install -y autoconf

再通过phpize命令生成configure

编译(指定php配置)

./configure --with-php-config=/usr/local/lnmp/php/bin/php-config

 缺少库,安装对应库

yum install libmemcached-devel-1.0.16-5.el7.x86_64.rpm -y

再编译,成功

安装

make && make install

更改配置文件php.ini,引入刚安装的扩展

重载php

systemctl reload php-fpm.service ##我配置了php的启动脚本,所以可以直接使用系统命令重载,具体的可以看我上一篇文章

 

可以查看phpinfo,memcached扩展安装成功

也可以通过php -m参数查看模块

/usr/local/lnmp/php/bin/php -m | grep memcache

测试:

1. nginx发布目录创建php页面 使用memcached

注意: php的memcached扩展有两个,分别是memcache和memcached,我使用的是memcached扩展,依赖libmemcached

两个有区别,添加ip和端口不一样,前者使用connect,后者通过addServer

vim test-server.php

2. 为了方便看效果copy了memcache的php页面

vim memcache.php

 

浏览器访问

安装ab工具

yum install httpd-tools-2.4.6-88.el7.x86_64 -y

 测试(10并发,1000次请求)访问index.php(未使用memcached)

测试访问test-server.php(使用memcached)

可以看到使用memcached的处理请求的速度和成功率明显提升

 

2. nginx + tomcat

环境:

server1:192.168.1.11

server2:192.168.1.12

目的:

在server1上nginx为代理,负载均衡到server1和server2的tomcat上,利用memcache以及tomcat-memcached-session-manager实现session共享

步骤:

server1安装tomcat和jdk 配置JDK环境变量

JDK解压即可

添加JDK环境变量

vim /etc/profile

查看java版本

解压tomcat(默认8080端口)

启动tomcat

测试,浏览器直接访问

配置server2 tomcat jdk(和server1一致)

nginx配置jsp请求负载均衡到server1和server2的tomcat

vim conf/nginx.conf

http添加

server添加

测试访问nginx请求jsp资源

可以看到,虽然访问到了,但没有图片,查看日志

在jsp页面中对于静态资源的加载,我们使用的是相对路径,我们请求的url是nginx代理服务器,所以对于相对路径的资源,默认在nginx的发布目录寻找 可以将tomcat的ROOT中的静态资源部署在nginx中,这样就可以加载.

静态资源复制过去后,还是失败,发现是权限不够

chmod 777 html/*

可以看到成功访问

写jsp测试页面

server1

server2 

测试访问

负载均衡已经生效

 

配置nginx的sticky模块(第三方,网上下载的工具)

注意:

1. sticky是为了让同一用户的请求,固定在当前服务器,通过cookie来实现

2. ip_hash也可以将请求固定,不过ip_hash是根据ip,如果请求来自统一局域网,那么负载均衡就失去了意义

所以这里使用sticky,通过cookie来区分不同用户身份

步骤:

1. 写测试页面,部署到server1和server2的tomcat发布目录

测试访问

输入数据 user1 111

再输入数据 user2 222

可以看到,因为负载均衡原因,请求在server1和server2来回跳转,导致session信息丢失

下载sticky插件解压

 重新编译安装nginx(将插件编译进去,这里最好将原来的nginx备份,因为是实验,所以我没有备份)

./configure --prefix=/usr/local/lnmp/nginx \
--with-http_stub_status_module \
--with-http_ssl_module \
--user=nginx --group=nginx \
--add-module=/server/tools/nginx-sticky-module-ng

 

make && make install

 

更改nginx配置文件

重启nginx服务

测试

再输入

可以看到,访问的都是server2,session保存了下来

到此为止还有一个问题,那就是正在session2输入时,突然server2服务器down了,这时跳转到server1,session不会保存下来

实验:

关闭server2的tomcat继续输入

 

 可以看到之前session中的信息没有了

所以这里可以通过memcached来保存session,实现session共享

下载memcached-session共享的jar包,实现session共享

当用户与server1通信时(session),server1突然down了,那么会话数据会消失,这极大影响客户感知,所以这里要作session共享,将session共享到memcached(交叉存储,即访问server1时,存储在server2的memcached,这是防止单点故障,不会因为server1整体down而丢失数据)

1. 将依赖的jar包导入到tomcat的lib目录中(server1和server2都要导入)

修改tomcat配置文件

vim conf/context.xml

 server1

 server2

 

重启tomcat,并打开memcached(server1和server2都打开)

 

 

关闭server1,再写入

 

 

打开server1,关闭server2,再写入

关闭server2的memcached

 

 

 

 

 

 

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值