Nginx+Tomcat+Memcache|Redis集群配置

一 软件安装

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

  2》 安装jdk(参考http://blog.csdn.net/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)

 

   set t 0 0 3   --表示添加一个键 t  参数1标志  参数2 超时时间 0永不超时  参数3表示字节数
   boy           --键对应的值
   STORED        --STORED表示成功存储  --ERROR表示失败
   get t         --获取键对应的值
   VALUE t 0 3
   boy
   END
   delete t     --删除键  flush_all可以清空所有
   DELETED
   get t
   END
   --查看所有的键值对 
   stats items
   STAT items:1:number 1
   --参数 1表示上面列出的 items:1 参数2表示列出100个键值对
   stats cachedump 1 100

 

  5》安装redis(http://blog.csdn.net/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 配置 

 

  http {
    upstream cluster1 {
        # 配置后端tomcat服务器的ip和端口
        server 192.168.58.133:8888;
        server 192.168.58.132:8888;
        #interval检测后端服务器的时间3000 
        #rise=2表示连续两次连接后端服务器表示存活
        #fall=5表示连续5次连接后端服务器失败表示后端tomcat挂了
        #timeout=1000 表示连接超时时间
        check interval=3000 rise=2 fall=5 timeout=1000 type=http;
        #发送一个HEAD请求 
        check_http_send "HEAD / HTTP/1.0\r\n\r\n";
        #返回 2和3开头的响应码表示成功 
        check_http_expect_alive http_2xx http_3xx;
    }
    server {
        listen 80;
        location / {
            proxy_pass http://cluster1;
        }
        #开始状态监控 网页服务器
        location /status {
            check_status;
        }
    }
  }

 

 重新加载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 xmlns="http://www.w3.org/1999/xhtml" xml:lang="en" lang="en">
    <head>
    <title><%= application.getServerInfo() %></title>
</head>
<body>
   当前的session <%=session.getId()%>
当前主机 <%=request.getLocalAddr()%>
</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 )

 

<!-- http://maven.aliyun.com/nexus/#nexus-search;quick~memcached-session-manager-tc6-->
<dependency>
  <groupId>de.javakaffee.msm</groupId>
  <artifactId>memcached-session-manager-tc6</artifactId>
  <version>2.1.1</version>
</dependency>
<dependency>
  <groupId>de.javakaffee.msm</groupId>
  <artifactId>msm-kryo-serializer</artifactId>
  <version>2.1.1</version>
</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节点下添加

 

<Manager className="de.javakaffee.web.msm.MemcachedBackupSessionManager"  
    memcachedNodes="n1:192.168.58.132:11211"  
    sticky="false"  
    sessionBackupAsync="false"  
    requestUriIgnorePattern=".*\.(ico|png|gif|jpg|css|js)$"  
    transcoderFactoryClass="de.javakaffee.web.msm.serializer.kryo.KryoTranscoderFactory"  
    />  

重启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条可以看到 创建了一个item ED0A8CDEFADFFEE47C727587A9BCF23A-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获取

 

<dependency>
  <groupId>com.bluejeans</groupId>
  <artifactId>tomcat-redis-session-manager</artifactId>
  <version>2.0.0</version>
</dependency>  将获取的jar包丢入tomcat/lib 同memcached

 tomcat的context.xml配置

 

<Valve className="com.orangefunction.tomcat.redissessions.RedisSessionHandlerValve" />  
<Manager className="com.orangefunction.tomcat.redissessions.RedisSessionManager"  
         host="192.168.58.130"  
         port="6379"  
         database="0"  
         maxInactiveInterval="60" />  


测试过程同memcache

 

三 springboot使用springsession实现session共享

添加springsession依赖

<dependency>
			<groupId>org.springframework.session</groupId>
			<artifactId>spring-session-data-redis</artifactId>
		</dependency>

添加redis相关配置

server: 
  port: 8989
spring: 
  session: 
    store-type: redis 
  redis: 
    host: 192.168.1.238

实用request操作session时 session数据就被写入到redis中

 

  • 2
    点赞
  • 8
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值