环境
172.25.44.1(server1):nginx
172.25.44.2、172.25.44.3(server2、server3):tomcat 、memcached
nginx的配置:
在http{}定义up servers
upstream tcsrvs {
server 172.25.44.2:8080;
server 172.25.44.3:8080;
}
在server{} 部分 定义反向代理
location ~* (\.jsp|\.do)$ { #动静分离
proxy_pass http://tcsrvs;
}
tomcat主机配置
这里只演示一台tomcat主机的配置,另外一台配置与之类似。
session 的序列化方案官方推荐的有 4 种:
- java serialization
- msm-kryo-serializer
- msm-javolution-serializer
- msm-xstream-serializer
其中性能最好的序列化方案是 Kryo,所以这里我们采用 kryo 方式。
把如下软件包放置到/usr/local/tomcat/lib 目录中。
【注意】这些包一定要与所使用的tomcat的版本匹配。
[root@server3 bin]# ls /mnt/meme/
asm-3.2.jar memcached-session-manager-1.6.3.jar msm-kryo-serializer-1.6.3.jar
kryo-1.04.jar memcached-session-manager-tc7-1.6.3.jar reflectasm-1.01.jar
kryo-serializers-0.10.jar minlog-1.2.jar spymemcached-2.7.3.jar
自定义一个主机
[root@server3 bin]# tree /data
/data
|-- logs
| |-- web1_access_log.2018-10-11.txt
| |-- web2_access_log.2018-10-12.txt
| `-- web2_access_log.2018-10-13.txt
`-- webapps
|-- logs
`-- ROOT
|-- classes
|-- index.jsp
|-- lib
|-- META-INF
`-- WEB-INF
[root@server3 bin]# cat /data/webapps/ROOT/index.jsp
<%@ page language="java" %>
<html>
<head><title>TomcatB</title></Haed>
<body>
<h1><font color="red">TomcatB.wtt.com</font></h1>
<table align="centre" border="1">
<tr>
<td>Session ID</td>
<% session.setAttribute("wtt.com","wtt.com"); %>
<td><%= session.getId() %></td>
</tr>
<tr>
<td>Created on</td>
<td><%= session.getCreationTime() %></td>
</tr>
</table>
</body>
</html>
在server.xml文件中对所定义的主机做如下配置
这里的Manager部分就是我们所定义的会话管理器
<Host name="web2.wtt.com" appBase="/data/webapps" unpackWARs="true" autoDeploy="true">
<Context path="" docBase="/data/webapps/ROOT" >
<Manager className="de.javakaffee.web.msm.MemcachedBackupSessionManager"
memcachedNodes="n1:172.25.44.2:11211,n2:172.25.44.3:11211"
failoverNodes="n2"
requestUriIgnorePattern=".*\.(ico|png|gif|jpg|css|js)$"
transcoderFactoryClass="de.javakaffee.web.msm.serializer.kryo.KryoTranscoderFactory"
/>
</Context>
<Valve className="org.apache.catalina.valves.AccessLogValve" directory="logs"
prefix="localhost_access_log." suffix=".txt"
pattern="%h %l %u %t "%r" %s %b" />
</Host>
同样在server.xml文件中将默认主机改成我们所定义的主机
<Engine name="Catalina" defaultHost="web2.wtt.com" >
memcached
直接安装memcached服务,然后开启服务即可
[root@server3 bin]# yum install memcached
[root@server3 bin]# /etc/init.d/memcached start
在客户端访问172.25.44.1/index.jsp
可以看到在负载均衡时session值一直都是不变的。
然後停掉server3上的tomcat服務器,session值依舊不變。
n2代表從Manager中定義的n2節點返回的session值,所以解下來我們聽帶n2的memcached服務
這時session值依舊不變,只是從n1上返回結果