Nginx+Tomcat+Memcache|Redis集群配置

一 软件安装

  1》 安装nginx (参考http://blog.youkuaiyun.com/liaomin416100569/article/details/72897641)

  2》 安装jdk(参考http://blog.youkuaiyun.com/liaomin416100569/article/details/6671692)

  3》 安装tomcat  下载tar.gz包解压即可

  4》安装memcache

       yum -y install memcached

      使用telnet ip 11211 端口

      输入常用命令(参考http://www.runoob.com/memcached/memcached-tutorial.html)

[html]  view plain  copy
  1. set t 0 0 3   --表示添加一个键 t  参数1标志  参数2 超时时间 0永不超时  参数3表示字节数  
  2. boy           --键对应的值  
  3. STORED        --STORED表示成功存储  --ERROR表示失败  
  4. get t         --获取键对应的值  
  5. VALUE t 0 3  
  6. boy  
  7. END  
  8. delete t     --删除键  flush_all可以清空所有  
  9. DELETED  
  10. get t  
  11. END  
  12. --查看所有的键值对   
  13. stats items  
  14. STAT items:1:number 1  
  15. --参数 1表示上面列出的 items:1 参数2表示列出100个键值对  
  16. stats cachedump 1 100  

  5》安装redis(http://blog.youkuaiyun.com/liaomin416100569/article/details/53432963)

二 软件配置

  1》nginx+tomcat+memcached集群

     场景假设  nginx服务器为 192.168.58.132   端口 80   memcached安装在 192.168.58.132上 端口11211

                       tomcat1 192.168.58.132 8888   tomcat2 192.168.58.133::8888

      步骤1:nginx负责负载均衡转发

            nginx保证成功安装

            配置负载均衡使用nginx的代理模块  具体参考 tengine官网配置(http://tengine.taobao.org/document_cn/http_upstream_check_cn.html)

           找到 nginx/conf/nginx.conf 配置 

 

[html]  view plain  copy
  1. http {  
  2.   upstream cluster1 {  
  3.       # 配置后端tomcat服务器的ip和端口  
  4.       server 192.168.58.133:8888;  
  5.       server 192.168.58.132:8888;  
  6.       #interval检测后端服务器的时间3000   
  7.       #rise=2表示连续两次连接后端服务器表示存活  
  8.       #fall=5表示连续5次连接后端服务器失败表示后端tomcat挂了  
  9.       #timeout=1000 表示连接超时时间  
  10.       check interval=3000 rise=2 fall=5 timeout=1000 type=http;  
  11.       #发送一个HEAD请求   
  12.       check_http_send "HEAD / HTTP/1.0\r\n\r\n";  
  13.       #返回 2和3开头的响应码表示成功   
  14.       check_http_expect_alive http_2xx http_3xx;  
  15.   }  
  16.   server {  
  17.       listen 80;  
  18.       location / {  
  19.           proxy_pass http://cluster1;  
  20.       }  
  21.       #开始状态监控 网页服务器  
  22.       location /status {  
  23.           check_status;  
  24.       }  
  25.   }  
  26. }  

 重新加载nginx  service nginx reload
   访问 http://192.168.58.132/status(这里两台后端tomcat都未安装所有 显示红色背景 fall count表示重连失败的次数
    rise counts表示成功的次数 如果成功 会显示白色背景
  )


      步骤2:tomcat部署应用 【考虑session的一致性问题】

       在132下解压tomcat

         在webapps/ROOT新建一个 my.jsp 内容如下

[html]  view plain  copy
  1. <html xmlns="http://www.w3.org/1999/xhtml" xml:lang="en" lang="en">  
  2.     <head>  
  3.     <title><%= application.getServerInfo() %></title>  
  4. </head>  
  5. <body>  
  6.    当前的session <%=session.getId()%>  
  7. 当前主机 <%=request.getLocalAddr()%>  
  8. </body>  

         可以在132配置好tomcat后 将tomcat拷贝到 131

       比如132执行命令  scp -r /root/tomcat/tomcat_memcached root@192.168.58.131:/root/tomcat         

      启动两台tomcat /bin/startup.sh  tomcat启动的8888端口 nginx启动的是80 访问nginx

     访问 http://192.168.58.132/my.jsp  此时发现session一直在变 

     原因是 nginx可能第一次将请求转发给 132tomcat 此时session存储在 132上  

                                   第二次请求可能转发给  133 133 tomcat不存在cookie中带的sessionid会重新创建一个 新的session

                                   第三次请求可能转发给132 发生和第二次请求相同的情况

      步骤3:memcached用于存储session 所有tomcat访问memcache获取session

        将session的存储放在公共的地方 不管访问哪台服务器都在memcache存取session

       tomcat需要配置 memcached session manager功能 需要加载该功能的jar包 

      maven地址(自行到maven.aliyun.com/nexus搜索memcached-session-manager-tcX  X为6或者7后者8是tomcat版本 我这里用tomcat6 

[html]  view plain  copy
  1. <!-- http://maven.aliyun.com/nexus/#nexus-search;quick~memcached-session-manager-tc6-->  
  2. <dependency>  
  3.   <groupId>de.javakaffee.msm</groupId>  
  4.   <artifactId>memcached-session-manager-tc6</artifactId>  
  5.   <version>2.1.1</version>  
  6. </dependency>  
  7. <dependency>  
  8.   <groupId>de.javakaffee.msm</groupId>  
  9.   <artifactId>msm-kryo-serializer</artifactId>  
  10.   <version>2.1.1</version>  
  11. </dependency>  


将该jar包拷贝到 132的tomcat/lib目录下 
  修改tomcat/conf/server.xml
  <Engine name="Catalina" defaultHost="localhost">
 修改为 <Engine name="Catalina" defaultHost="localhost" jvmRoute="tomcat132"> 用于在产生session是加上后缀
 133的配置加上jvmRoute="tomcat133" 即可
 打开132和133 conf/context.xml
分别在Context节点下添加

[html]  view plain  copy
  1. <Manager className="de.javakaffee.web.msm.MemcachedBackupSessionManager"    
  2.     memcachedNodes="n1:192.168.58.132:11211"    
  3.     sticky="false"    
  4.     sessionBackupAsync="false"    
  5.     requestUriIgnorePattern=".*\.(ico|png|gif|jpg|css|js)$"    
  6.     transcoderFactoryClass="de.javakaffee.web.msm.serializer.kryo.KryoTranscoderFactory"    
  7.     />    
重启tomcat如果出现 AbstractorError一般都是maven两个库的版本不匹配导致的 都设置成相同的版本
这里  msm-kryo-serializer 用于存储session到memcache中de.javakaffee.web.msm.serializer.kryo.KryoTranscoderFactory在这个库中
启动后http://192.168.58.132/my.jsp  获取到session后无论nginx转发到哪台机器session都是相同的
比如(通过sessionid的后缀知道 第一次访问jsp就是访问的tomcat132):
  当前的session ED0A8CDEFADFFEE47C727587A9BCF23A-n1.tomcat132 当前主机 192.168.58.133
  当前的session ED0A8CDEFADFFEE47C727587A9BCF23A-n1.tomcat132 当前主机 192.168.58.132

连接 memcached

 telnet 192.168.58.132 11211

 stats items #查看到最后一次创建的number是 5

 stats cachedump 5 100  查询 5号number的最近100条可以看到 创建了一个itemED0A8CDEFADFFEE47C727587A9BCF23A-n1.tomcat132 99字节
 ITEM ED0A8CDEFADFFEE47C727587A9BCF23A-n1.tomcat132 [99 b; 1497001937 s]

  2》nginx+tomcat+redis集群

     场景假设  nginx服务器为 192.168.58.132   端口 80   redis安装在 192.168.58.130上 端口11211

                       tomcat1 192.168.58.132 8888   tomcat2 192.168.58.133::8888

      步骤1:nginx负责负载均衡转发

             同memcache的配置

     步骤2:tomcat部署应用 【考虑session的一致性问题】

            同memcache的配置

    步骤3:redis用于存储session 所有tomcat访问redis获取session

     获取tomcat-redis-session-manager 搜http://maven.aliyun.com/nexus/#nexus-search;quick~tomcat-redis-session-manager获取

[html]  view plain  copy
  1. <dependency>  
  2.   <groupId>com.bluejeans</groupId>  
  3.   <artifactId>tomcat-redis-session-manager</artifactId>  
  4.   <version>2.0.0</version>  
  5. </dependency>  将获取的jar包丢入tomcat/lib 同memcached  

 tomcat的context.xml配置

[html]  view plain  copy
  1. <Valve className="com.orangefunction.tomcat.redissessions.RedisSessionHandlerValve" />    
  2. <Manager className="com.orangefunction.tomcat.redissessions.RedisSessionManager"    
  3.          host="192.168.58.130"    
  4.          port="6379"    
  5.          database="0"    
  6.          maxInactiveInterval="60" />    

测试过程同memcache


评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值