关于 Nginx+Tomcat+Memcached做负载均衡加共享session
首先,确保在机器上已经安装了nginx、tomcat、memcached,并且都可以成功启动服务
nginx可以正常启动了,我们就可以通过域+端口号来访问nginx的80端口了
以本地举例
localhost
nginx可以访问,我们就开始配置nginx的配置文件,来做与Tomcat的映射
location / { root html; index index.html index.htm; proxy_pass http://tomcat_115; }
这里面是配置了nginx默认解析仅截取了一段代码,并不代表全部意思
其中proxy_pass则配置了相当于是代理转向
那么我们还需要在nginx的配置文件里面添加
upstream tomcat_115 { server 192.168.1.110:8080 weight=1; server 192.168.1.111:8080 weight=2; server 192.168.1.112:8080 weight=3; }
这段代码就是配置的本地tomcat的映射,后面的weight则配置了权重,权重越高,则被分配到的几率越高
以上代码就是nginx负责对发来的请求做分配处理
配置好后,可以通过nginx-t来验证配置文件是否正确
接下来配置memcached
如下是官网的安装说明,可以参看
https://code.google.com/p/memcached-session-manager/wiki/SetupAndConfiguration
官方文档里面说,首先要把memcached的jar包下载下来,并且添加到tomcat里面,官网给的路径是$CATALINA_HOME/lib/,放到TOMCAT_HOME/lib/应该也可以
需要注意的是
jar包里面有tomcat的版本对应的jar
另外
如果你使用memcached,还需要下载spymemcached-2.8.12.jarandcouchbase-client-1.1.4.jar.这两个jar包
如果用到couchbase,则还需要下载***jar包,这里不过多说明了
然后配置tomcat的配置文件,可以添加到server.xml里面,也可以添加到context.xml里面,
具体代码如下
<Context> ... <Manager className="de.javakaffee.web.msm.MemcachedBackupSessionManager" memcachedNodes="n1:host1.yourdomain.com:11211,n2:host2.yourdomain.com:11211" requestUriIgnorePattern=".*\.(ico|png|gif|jpg|css|js)$" /> </Context>
这是官网给的代码,另外还有两种写法,可参考官网,另外,其中的配置说明在官网里面也有,这里只简单介绍能跑通
memcachedNodes的意思是指向memcached的节点,如果有多台机器安装了memcached,则需要全部加到这个配置里面,其中的格式为域+端口号,这里面的域和端口号均指的是安装memcached的域和端口,memcached的默认端口号为11211
至于前面的n1,和n2,可以理解为编程语言里面的命名空间,可以在添加其他配置的时候用到
官网上面说,如果只有单个指向,可以不用写前边的n1等。
配置好这些,重启若干tomcat,重新加载nginx,就可以试试访问nginx的80端口啦,多访问若干次,被分配到访问的tomcat是随机的。
然后可以去看tomcat的访问日志,如果每个tomcat均有被访问到的记录,说明成功啦
可以通过简答的jsp代码来获取sessionId,确认session已经被共享,当刷新页面的时候sessionId是不变的
<%@ page language="java" contentType="text/html; charset=UTF-8" pageEncoding="UTF-8"%> <!DOCTYPE html> <html> <head> <meta http-equiv="Content-Type" content="text/html; charset=UTF-8"> <title>Insert title here</title> </head> <body> <h1>sessionID:<%=session.getId() %></h1> </body> </html>