环境描述:
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
重启服务
测试
成功