Session解决方案

环境描述:

IP地址             主机名              软件包列表

192.168.200.111      nginx             nginx

192.168.200.112      node1            JDKTomcat

192.168.200.113      node2            JDKTomcat

安装前准备配置

关闭防火墙,linux安全机制

配置所有机器:

192.168.200.111 nginx
192.168.200.112 node1
192.168.200.113 node2

Nginx 服务器配置:

配置主机名:

[root@localhost ~]#  hostname  nginx

[root@localhost ~]#  bash

修改主配置文件

添加

upstream tomcat_pool {
server 192.168.200.112:8080 weight=1 max_fails=1 fail_timeout=10s;
server 192.168.200.113:8080 weight=1 max_fails=1 fail_timeout=10s;
}

 

location / {
root html;
index index.html index.htm;
proxy_pass http://tomcat_pool;
proxy_set_header Host $http_host;
}

Tomcat一服务器配置

hostname   node1

bash

Tomcat二服务器配置

hostname  node2

bash

结束

建立session.jsp 的测试页面

tomcat1服务器

[root@node1 ~]# vim /usr/local/tomcat8/webapps/ROOT/session.jsp

Session ID:<%= session.getId()%><BR>
SessionPort:<%=request.getServerPort()%>
<%out.println("This tomcat server 192.168.200.112");%>

tomcat2服务器之修改IP地址 113

重新启动Tomcat

测试

 

 

 

 

解决方案一:Session绑定

 

 到浏览器访问Sessoin ID改变IP地址不改变即成功

解决方案二:Session复制

去掉nginx 原来的  IP_HASH

修改Tomcat配置文件

[root@node1 ~]# vim /usr/local/tomcat8/conf/server.xml

 

 134行添加以上内容,140行去掉注释即可

[root@node1 ~]# vim /usr/local/tomcat8/webapps/ROOT/WEB-INF/web.xml

 

 最后一行添加上面这个代码

重启TOMCAT服务即可

查看

[root@node2 ~]# netstat -lnpt |grep -E "8080|4000"
tcp6 0 0 :::8080 :::* LISTEN 9008/java
tcp6 0 0 192.168.200.113:4000 :::* LISTEN 9008/java

出现4000端口和8080端口就成功

访问192.168.200.111/session.jsp出现两种情况

 

 

 

 Session  ID不变 IP地址改变和node改变 代表成功

(PS如果服务起不来输入  添加组播地址  route add -net 224.0.0.0  netmask 240.0.0.0 dev ens32 {注这个ens32是你的网卡名称可以改变})

方法二。用TOMCAT官方代码,方法一中改主配置文件的其中一步,去掉注释其实是野路子,真正的方法是在那个注释下面添加官方代码

解决方案三:Session服务器之Memcached

回复到最开始的状态进行配置!!!!

把这两台Tomcat 即当成TOMCAT 服务器,又当成Memcached服务器 (懒省事,现实中不是这样)

两台机器同样配置

[root@node1 ~]# yum -y install libevent memcached

[root@node1 ~]# memcached -u root -m 512M -n 10 -f 2 -d -vvv -c 512

-h        #查看帮助信息

-p         #指定memcached 监听的端口号默认11211

-l        #memcached服务器的ip地址

-u      #memcached 程序运行时使用的用户身份必须是root用户

-m      #指定使用本机的多少物理内存数据默认64M

-c       #memcached服务的最大链接数

-vvv   #显示详细信息

-n       #chunk  size  的最小空间是多少单位字节

-f          #chunk  size 大小增长的倍数默认1.25倍

-d       #在后台启动

[root@node1 ~]# netstat -anpt |grep 11211 (他的端口是11211)

测试[root@node1 ~]# yum -y install telnet

[root@node1 ~]# telnet 192.168.200.112 11211

set username  0 0 8   (写入)

zhangsan        (用户名)

get username    (显示用户名)

>30 sending key username
>30 END
30: going from conn_parse_cmd to conn_mwrite
30: going from conn_mwrite to conn_new_cmd
30: going from conn_new_cmd to conn_waiting
30: going from conn_waiting to conn_read
VALUE username 0 8
zhangsan
END

quit   (退出)

让Tomcat  通过msm 连接到Memcached

 由于这个memcached版本低,只支持TOMCAT7 所以 安装TOMCAT7来实验

[root@node1 ~]# mkdir session

[root@node1 ~]# cd session/

上传所需要的jar包

 

 [root@node1 session]# cp *.jar /usr/local/tomcat7/lib/

[root@node1 ~]# vim /usr/local/tomcat7/conf/context.xml 

 

 最后一行添加这四段

<Manager className="de.javakaffee.web.msm.MemcachedBackupSessionManager"
memcachedNodes="memA:192.168.200.112:11211 memB:192.168.200.113:11211"
requestUrilgnorePattern=".*\(ico|png|gif|jpg|css|js)$"
transcoderFactoryClass="de.javakaffee.web.msm.serializer.kryo.KryoTranscoderFactory"/>

两个服务器都填一样的

重启服务

查看有没有11211端口

测试

 

 

 

 

root@node2 ~]# killall -9 memcached 关掉113的memcached在测试

 

 成功

解决方案四:Session服务器之Redis

 回复到初始状态

随便找一个tomcat来做

[root@node1 ~]# tar xf redis-3.2.5.tar.gz -C /usr/src/
[root@node1 ~]# cd /usr/src/redis-3.2.5/
[root@node1 redis-3.2.5]# make

如果报TCL错误 发现少了tcl报错,则安装tcl

wget  http://downloads.sourceforge.net/tcl/tcl8.5.9-src.tar.gz

cd /tcl8.5.9-src/unix

./configure

make &&make install

结束

[root@node1 redis-3.2.5]# mkdir -p /usr/local/redis/{bin,etc,var}
[root@node1 redis-3.2.5]# cd src/

[root@node1 src]# cp redis-benchmark redis-check-aof redis-cli redis-server  redis-check-rdb  /usr/local/redis/bin/

[root@node1 src]# cp ../redis.conf /usr/local/redis/etc
[root@node1 src]# vim /usr/local/redis/etc/redis.conf

61  bind 0.0.0.0

128    daemonize yes 

[root@node1 redis-3.2.5]# /usr/local/redis/bin/redis-server /usr/local/redis/etc/redis.conf  #开启服务

想要关闭服务killall -9 redis-server

[root@node1 redis-3.2.5]# netstat -anpt |grep redis
tcp 0 0 127.0.0.1:6379 0.0.0.0:* LISTEN 36452/redis-server

###查看6379端口 是否开启

以下为TOMcat一和二要做的事

mkdir redis-session

把物理机的redis包移到该目录下

然后cp *.jar /usr/local/tomcat7/lib/

[root@node1 ~]# vim /usr/local/tomcat7/conf/context.xml

<Valve className="com.orangefunction.tomcat.redissessions.RedisSessionHandlerValve"/>
<Manager className="com.orangefunction.tomcat.redissessions.RedisSessionManager"
host="192.168.200.112"
port="6379"
database="0"
maxInactiveInterval="60"/>

就算是tomcat2 也用112

重启服务

测试

 

 

 

 成功

 

posted @ 2019-09-24 21:03  别脱鞋好嘛  阅读(176)  评论(0编辑  收藏  举报