服务器说明:
192.168.1.8 tomcat1 memcached(虚拟机1)
192.168.1.9 tomcat2(虚拟机2)
192.168.1.200 nginx (本机)
对于tomcat+nginx的配置请参考博客:【Nginx-反向代理服务器】实践篇(三)之Tomcat+Nginx搭建集群
接下来我们来安装memcached,注意linux系统的用户权限问题
1.分别把memcached和libevent下载回来,放到/usr/src目录下:
# cd /usr/src
# wget http://www.danga.com/memcached/dist/memcached-1.2.0.tar.gz
# wget http://www.monkey.org/~provos/libevent-1.2.tar.gz
2.先安装libevent:
# tar zxvf libevent-1.2.tar.gz
# cd libevent-1.2
# ./configure –prefix=/usr
# make
# make install
3.测试libevent是否安装成功:
# ls -al /usr/lib | grep libevent
lrwxrwxrwx 1 root root 21 11?? 12 17:38 libevent-1.2.so.1 -> libevent-1.2.so.1.0.3
-rwxr-xr-x 1 root root 263546 11?? 12 17:38 libevent-1.2.so.1.0.3
-rw-r–r– 1 root root 454156 11?? 12 17:38 libevent.a
-rwxr-xr-x 1 root root 811 11?? 12 17:38 libevent.la
lrwxrwxrwx 1 root root 21 11?? 12 17:38 libevent.so -> libevent-1.2.so.1.0.3
4.安装memcached,同时需要安装中指定libevent的安装位置:
# cd /tmp
# tar zxvf memcached-1.2.0.tar.gz
# cd memcached-1.2.0
# ./configure –with-libevent=/usr
# make
# make install
如果中间出现报错,请仔细检查错误信息,按照错误信息来配置或者增加相应的库或者路径。
安装完成后会把memcached放到 /usr/local/bin/memcached
5.测试是否成功安装memcached:
# ls -al /usr/local/bin/mem*
-rwxr-xr-x 1 root root 137986 11?? 12 17:39 /usr/local/bin/memcached
-rwxr-xr-x 1 root root 140179 11?? 12 17:39 /usr/local/bin/memcached-debug
6.启动memcache
useradd memcache #添加memcache用户
memcached -m 64 -d -u memcache -p 11211 -l 192.168.1.8 -c 5000 -P /tmp/memcached.pid
或者 memcached -m 64 -d -u root -p 11211 -l 192.168.1.8 -c 5000 -P /tmp/memcached.pid
注:再次启动时报了一个端口已占用,则kill掉memcache进程,然后二次启动时才成功。
tomcat还需要额外配置如下:
tomcat 连接memcache session会话共享配置:session存储到192.168.1.8:11211 memcache里面。
vi /usr/local/tomcat/conf/context.xml #将下面配置复制到<Context> 和 </Context>之间
两台主机做同样的配置
说明:
这里的memcachedNodes是填写memcached节点,多个节点时可以以空隔分开,如:
n1:localhost:11211 n2:localhost:11212 /localhost改为安装memcached的服务器的IP
sessionBackupTimeout的单位为分钟
当然配置完成后需要添加相应的jar包,将如下jar包分别放在两台tomcat的lib目录下即可。
修改后重启两个TOMCAT和nginx即可,这个时候已经解决SESSION的共享问题
启动tomcat,并打印log,及时查看问题
测试Nginx和Tomcat
测试Nginx是否实现负载均衡已经Tomcat能否共享session信息,分别在两个Tomcat服务器的\webapps\ROOT目录下新建两个test.jsp页面,内容如下:
Tomcat1
Tomcat2
通过浏览器访问Nginx服务器,如下图将访问地址改成Nginx所在服务器。
反复刷新浏览器,如果SessionID一直不变,下面的SessionPort的内容在不断变化则说明配置成功。
测试结果如下:
刷新浏览器
再打开火狐浏览器看结果
刷新火狐浏览器
附:
1,当session未实现共享时,两台tomcat服务器权重比为1:1
效果:刷新浏览器,每次的sessionid均不同
原因:当浏览器首次访问时,创建session,然后将sessionid存放到浏览器的cookie中,当浏览器再次刷新或者访问其他页面时,本地有sessionid,但是此时的请求被分发到另一台服务器上,本地带过去的sessionid在新的服务器上并找不到对应的session,故重新产生session。so 每次刷新都是不同的sessionid,session无法共享。
2,当session实现共享时,两台tomcat服务器权重比为1:1
效果:刷新浏览器,每次的sessionid不变,但是打印的This is tomcat server 值会变
原因:当浏览器首次访问时,创建session,并将sessionId存到浏览器中,那么当用户再刷新浏览器或者访问其他页面时,我们客户端的请求会带上sessionid,然后我们通过sessionid去查找session,此时无论请求分发到哪个服务器上面,我们均可以找到session,因为我们将session存储到memcached服务器上了,故session不会重新创建,也就session共享了。
Nginx+Memcached+Tomcat session会话共享
原文:http://www.cnblogs.com/haoyy/p/6011588.html