`
danwind
  • 浏览: 224841 次
  • 性别: Icon_minigender_1
  • 来自: 广东
社区版块
存档分类
最新评论

关于 Nginx+Tomcat+Memcached做负载均衡加共享session

 
阅读更多
首先,确保在机器上已经安装了 nginx、tomcat、memcached,并且都可以成功启动服务 

nginx可以正常启动了,我们就可以通过 域+端口号来访问nginx的80端口了 
以本地举例 
localhost 

nginx可以访问,我们就开始配置nginx的配置文件,来做与Tomcat的映射 

Xml代码  收藏代码
  1. location / {  
  2.             root   html;  
  3.             index  index.html index.htm;  
  4.             proxy_pass    http://tomcat_115;  
  5.  }  


这里面是配置了nginx默认解析仅截取了一段代码,并不代表全部意思 
其中proxy_pass则配置了相当于是代理转向 



那么我们还需要在nginx的配置文件里面添加 
Java代码  收藏代码
  1. upstream tomcat_115 {  
  2.           server 192.168.1.110:8080 weight=1;    
  3.           server 192.168.1.111:8080 weight=2;    
  4.           server 192.168.1.112:8080 weight=3;    
  5. }  

这段代码就是配置的本地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.jar and couchbase-client-1.1.4.jar.这两个jar包 
如果用到couchbase,则还需要下载***jar包,这里不过多说明了 

然后配置tomcat的配置文件,可以添加到server.xml里面,也可以添加到context.xml里面, 
具体代码如下 

Xml代码  收藏代码
  1. <Context>  
  2.   ...  
  3.   <Manager className="de.javakaffee.web.msm.MemcachedBackupSessionManager"  
  4.     memcachedNodes="n1:host1.yourdomain.com:11211,n2:host2.yourdomain.com:11211"  
  5.     requestUriIgnorePattern=".*\.(ico|png|gif|jpg|css|js)$"  
  6.     />  
  7. </Context>  

这是官网给的代码,另外还有两种写法,可参考官网,另外,其中的配置说明在官网里面也有,这里只简单介绍能跑通 
memcachedNodes 的意思是指向memcached的节点,如果有多台机器安装了memcached,则需要全部加到这个配置里面,其中的格式为 域+端口号,这里面的域和端口号均指的是安装memcached的域和端口,memcached的默认端口号为11211 

至于前面的n1,和n2,可以理解为编程语言里面的命名空间,可以在添加其他配置的时候用到 
官网上面说,如果只有单个指向,可以不用写前边的n1等。 

配置好这些,重启若干tomcat,重新加载nginx,就可以试试访问nginx的80端口啦,多访问若干次,被分配到访问的tomcat是随机的。 
然后可以去看tomcat的访问日志,如果每个tomcat均有被访问到的记录,说明成功啦 

可以通过简答的jsp代码来获取sessionId,确认session已经被共享,当刷新页面的时候sessionId是不变的 

Html代码  收藏代码
  1. <%@ page language="java" contentType="text/html; charset=UTF-8"  
  2.     pageEncoding="UTF-8"%>  
  3. <!DOCTYPE html>  
  4. <html>  
  5. <head>  
  6. <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">  
  7. <title>Insert title here</title>  
  8. </head>  
  9. <body>  
  10. <h1>sessionID:<%=session.getId() %></h1>    
  11. </body>  
  12. </html>  
 
分享到:
评论

相关推荐

Global site tag (gtag.js) - Google Analytics