Nginx+Redis+tomcat实现服务器集群和session共享

Nginx+Redis+tomcat实现服务器集群和session共享

  1. 概念:
    1. 概念:反向代理web服务器,作⽤于服务器,管理多个服务器。
    2. 多进程,多个⼯作进程,⼀个主进程。
    3. ⽬的:单节点故障,实现负载均衡,load balance,⾮阻塞,解决⼤客户量并发请求问题。
  2. 代理:
    1. 正向代理:作⽤于客户端。
    2. 反向代理:作⽤在服务器端,客户端不知道反向代理服务器的存在。
  3. 单节点故障:
    1. ⼤并发请求下,服务器只有⼀个,如果服务器挂掉,单节点发⽣故障,整个就不能正常运⾏了。
    2. 解决⽅案:配置服务器集群。使⽤ nginx ,通过ip 管理多个 tomcat服务器。

模拟伪集群

  1. 解压两个tomcat,在serve.xml⽂件配置两套不同的端⼝,8080,8005,8009。

  2. 修改Nginx的nginx.conf配置⽂件,实现负载均衡。

    1. 服务器集群配置
    2. nginx不能处理jsp⻚⾯,交由tomcat处理。
    3. 代码参考:
    #服务器集群配置
    upstream jeffrey.com{
        server 127.0.0.1:18080 weight=1;
     #服务器配置,weight是权重,权重越⼤,分配的概率越⼤。
        server 127.0.0.1:28080 weight=2;
        }
    #当前的nginx配置
    server {
        listen 80;#侦听端⼝号
        server_name localhost;
        #当前服务的域名.如果是localhost:8080的请求,则交给jeffrey.com的集群来处理。
        location / {
            proxy_pass http://jeffrey.com ;
            #与服务器集群的名称⼀致
            proxy_redirect default;
        }
        location = /50x.html {
            root html;
            }
    }
    
  3. 关闭nginx :

    1. nginx -s stop
    2. nginx -s quit
  4. 这里出现一个新的问题

    1. ⼀个服务器挂掉后,nginx不会⽴刻判断其死亡,⽽是等待,但是死掉的服务器⾥的信息怎么办?
    2. ⼀个应⽤通常有多个服务器,登录成功后,session只会在⼀台存储,想要多台服务器都识别到这个session,后端统⼀存储。
    3. 所以,集群产⽣的新问题:session共享。
  5. 解决session共享

    1. session复制
    2. 后端统⼀存储,后端统⼀找⼀个中间件将Session存起来即可,这个中间件是数据库redis或者缓存。此时,tomcat作为客户端,redis作为服务端。
    3. 不要使⽤session。
  6. redis实现session共享

  7. 改写tomcat底层

  8. 三个session的jar包复制到tomcat下的lib中,commons-pool2-2.2.jar,jedis-2.5.2.jar,tomcat-redissession-manager-2.0.0.jar。

  9. 安装redis server

  10. tomcat修改conf/context.xml,新增

    
    
    
    • 启动redis-server.exe
    //启动
    redis-server redis.windows.conf
    //关闭
    shutdown
    
    • 启动tomcat,启动nginx;
  11. nginx,tomcat,redis集群中。redis处理了两件事情,session共享,缓存。

    • 缓存的问题,缓存穿透和击穿。
  12. 缓存处理流程:

    1. 前台请求,后台先从缓存中取数据,取到直接返回结果。
    2. 取不到时从数据库中取,数据库取到更新缓存,并返回结果。
    3. 数据库也没取到,那直接返回空结果。

你可能感兴趣的:(Nginx+Redis+tomcat实现服务器集群和session共享)