julley 发表于 2018-12-3 11:12:38

nginx+tomcat+memcache 缓存session配置

  首先先看下实验拓扑:
http://s3.运维网.com/wyfs02/M01/4A/36/wKiom1Qj6B3hKbm3AABxQXfGrHs330.jpg
  
  一、安装节点1
  1、同步时间
  ntpdate time.windows.com
  service httpd stop
  2、安装nginx
  tar -xvf nginx-1.6.1.tar.gz-C /usr/local/
  cd /usr/local/cd nginx-1.6.1/
  useradd nginx -s /sbin/nologin
  yum -y install pcre-devel openssl-devel
  ./configure -prefix=/usr/local/nginx   --sbin-path=/usr/sbin/nginx   --conf-path=/etc/nginx/nginx.conf   --error-log-path=/var/log/nginx/error.log   --http-log-path=/var/log/nginx/access.log   --pid-path=/var/run/nginx/nginx.pid    --lock-path=/var/lock/nginx.lock   --user=nginx   --group=nginx   --with-http_ssl_module   --with-http_flv_module   --with-http_stub_status_module   --with-http_gzip_static_module   --http-client-body-temp-path=/var/tmp/nginx/client/   --http-proxy-temp-path=/var/tmp/nginx/proxy/   --http-fastcgi-temp-path=/var/tmp/nginx/fcgi/   --http-uwsgi-temp-path=/var/tmp/nginx/uwsgi   --http-scgi-temp-path=/var/tmp/nginx/scgi   --with-pcre
  make && make install
  
  mkdir -pv /var/tmp/nginx/client
  /usr/sbin/nginx
  
  2、安装jdk
  tar -xvf jdk-8u20-linux-i586.tar.gz -C /usr/local/
  vim /etc/profile
  . /etc/profile
  # java -version
  java version "1.8.0_20"
  Java(TM) SE Runtime Environment (build 1.8.0_20-b26)
  Java HotSpot(TM) Client VM (build 25.20-b23, mixed mode)
  
  如果出现/lib/ld-linux.so.2: bad ELF interpreter: No such file or directory,安装下glic即可
  sudo yum install glibc.i686
  
  3、安装tomcat
  tar -xvf apache-tomcat-8.0.12.tar.gz -C /usr/local/
  cd /usr/local/
  mv apache-tomcat-8.0.12/ tomcat
  /usr/local/tomcat/bin/catalina.sh start
  4、验证nginx和tomcat
http://s3.运维网.com/wyfs02/M00/4A/36/wKiom1Qj6DmyKhzDAAE-JbIXeoE318.jpg
  

http://s3.运维网.com/wyfs02/M01/4A/38/wKioL1Qj6F2A6A4BAAGXeg19_UU913.jpg
  
  

  
  5、配置节点2
  jdk和tomcat同节点一的安装方法一样就不过多叙述了
  
  二、先配置下负载均衡
  1、配置nginx修改负载均衡,并且设置所有以.jsp结尾的都交给tomcat处理
  # egrep -v "^*#|^$" /etc/nginx/nginx.conf
  worker_processes1;
  events {
      worker_connections1024;
  }
  http {
      include       mime.types;
      default_typeapplication/octet-stream;
      sendfile      on;
      keepalive_timeout65;
      upstream tomcat.com {
      server 192.168.1.126:8080;
      server 192.168.1.127:8080;
      }
      server {
        listen       80;
        server_namelocalhost;
        location / {
              root   html;
              indexindex.html index.htm ;
        }
        error_page   500 502 503 504/50x.html;
        location = /50x.html {
              root   html;
        }
        
          location ~ \.jsp$ {
           proxy_pass      http://tomcat.com;
           proxy_set_headerX-Real-IP $remote_addr;
        }
      }
  }
  2、分别设置节点1和节点2tomcat的index.jsp页面,2节点只需要改成blue 和tomcatB就好
  # vim /usr/local/tomcat/webapps/ROOT/index.jsp
  
  TomcatA
  
      TomcatA
     
        
        Session ID
        
        
        
        Created on
        
     
     
  
  
  3、访问nginx看是否有负载均衡,下面看下效果
  

http://s3.运维网.com/wyfs02/M00/4A/38/wKioL1Qj6PSB3bJeAACexGguP_o995.jpg
http://s3.运维网.com/wyfs02/M00/4A/36/wKiom1Qj6NDgJHazAACgzJAKUCI843.jpg
  

  

  可以看到已经负载均衡了,但是session ID还是没有共享的,这是memcache就要登场了
  
  三、下面在2节点上安装memcache
  1、直接安装memcache
  tar -xvf memcached-1.4.20.tar.gz -C /usr/local/
  cd /usr/local/memcached-1.4.20/
  yum -y install libevent-devel
  ./configure --prefix=/usr/local/memcache
  make && make install
  2、配置tomcat连接memcache,这里用的是memcached-session-manager
  参考网站:
  http://code.google.com/p/memcached-session-manager/wiki/SetupAndConfiguration
  
  3、准备的jar包
  注意:不同的tomcat版本(tomcat6,tomcat7,tomcat8)所需的包不一样,需要针对tomcat版本下载对应的包.
  这是采用的javolution的序列化方式所有需要的包:
http://s3.运维网.com/wyfs02/M02/4A/38/wKioL1Qj6M3ALg73AAFIlu3MkjM253.jpg
  

  这是采用的javolution的序列化方式所有需要的包:
http://s3.运维网.com/wyfs02/M02/4A/36/wKiom1Qj6KnwOooWAAEECzgC-P4373.jpg
  建议采用kryo序列化方式,效率更高。
  4、把kryo所有的包考到Tomcat的lib目录下,这些包都是msm所依赖的包。
  # ll kryo/
  total 868
  -rw-r--r-- 1 root root43398 Sep 24 13:32 asm-3.2.jar
  -rw-r--r-- 1 root root94830 Sep 24 13:31 kryo-1.04.jar
  -rw-r--r-- 1 root root62112 Sep 24 13:31 kryo-serializers-0.11.jar
  -rw-r--r-- 1 root root 147019 Sep 24 13:01 memcached-session-manager-1.8.2.jar
  -rw-r--r-- 1 root root10407 Sep 24 13:12 memcached-session-manager-tc8-1.8.2.jar
  -rw-r--r-- 1 root root   4879 Sep 24 13:31 minlog-1.2.jar
  -rw-r--r-- 1 root root29329 Sep 24 13:31 msm-kryo-serializer-1.8.2.jar
  -rw-r--r-- 1 root root11615 Sep 24 13:32 reflectasm-1.01.jar
  -rw-r--r-- 1 root root 464756 Sep 24 13:19 spymemcached-2.11.4.jar
  # cp kryo/* /usr/local/tomcat/lib/
  
  5、memcache启动
  /usr/local/memcache/bin/memcached -d -m 128 -l 192.168.1.127 -p 11211 -u root
  /usr/local/memcache/bin/memcached -d -m 128 -l 192.168.1.127 -p 11311 -u root
http://s3.运维网.com/wyfs02/M02/4A/38/wKioL1Qj6RPSbFDJAAL3hw2vhk0625.jpg
  

  之后可以telnet测试一下,下面是memcached启动命令参数详解:
-d选项是启动一个守护进程,
-m是分配给Memcache使用的内存数量,单位是MB,我这里是10MB,
-u是运行Memcache的用户,我这里是root,
-l是监听的服务器IP地址,如果有多个地址的话,我这里指定了服务器的IP地址192.168.0.200,
-p是设置Memcache监听的端口,我这里设置了12000,最好是1024以上的端口,
-c选项是最大运行的并发连接数,默认是1024,我这里设置了256,按照你服务器的负载量来设定,
-P是设置保存Memcache的pid文件,我这里是保存在 /tmp/memcached.pid,
-p 使用的TCP端口。默认为11211
-m 最大内存大小。默认为64M
-vv 用very vrebose模式启动,调试信息和错误输出到控制台
-d 作为daemon在后台启动
  
  
  
  6、下面修改tomcat配置文件,让tomcat结合memcache实现session共享
  
  
  ...
        
  ...
  
说明:
这里的memcachedNodes是填写memcached节点,多个节点时可以以空隔分开,如:
n1:localhost:11211 n2:localhost:11212   /localhost改为安装memcached的服务器的IP
  
  重启2个节点的tomcat,可以看到启动日志没有报错即可
http://s3.运维网.com/wyfs02/M00/4A/36/wKiom1Qj6QHCfV9tAAgdjEY8tFU322.jpg
  
  7、下面可以看到,是负载轮询的,但是sessinID是一直不变的这样就达到实验目的了:
http://s3.运维网.com/wyfs02/M02/4A/36/wKiom1Qj6Sbg9Uf1AACSBtqDJcA553.jpg
http://s3.运维网.com/wyfs02/M00/4A/38/wKioL1Qj6UqTQDhaAACb2-8tcx4844.jpg
  




页: [1]
查看完整版本: nginx+tomcat+memcache 缓存session配置