Web应用优化之nginx+tomcat集群配置+redis管理session

1.nginx的安装

从官网下载一个nginx事务tar.gz版本,centos系统,安装好jdk

第一步解压

第二步:解压完成进入解压目录,执行./configure命令

需要安装gcc编译和pcre库,zlib库

yum -y install gcc

yum install pcre-devel

yum install zlib-devel

./configure完成后执行make install即可安装成功

2.集群配置流程

一、克隆2台CentOS虚拟机,并安装jdk+tomcat

二、安装1台CentOS虚拟机,并安装nginx(过程参见nginx安装流程.png) nginx的默认安装位置:/usr/local/nginx

1 启动nginx:
./nginx 使用默认配置文件(/usr/local/nginx/conf/nginx.conf)

./nginx -c /x/xx/xxx/nginx.conf  

2 测试
http://ip:80 或 http://ip   (nginx的默认端口80)

3 关闭
./nginx -s stop

4 重启
./nginx -s reload

5 查看线程
ps -ef | grep nginx   (查询主进程号)
kill -9 主进程号     (强制关闭)

三、配置集群环境 1 修改nginx的配置文件(默认位置:/usr/local/nginx/conf/nginx.conf)

1> 配置tomcat集群节点 在http节点内部,server节点外部 upstream tomcat-servers { server 192.168.1.103:8080; server 192.168.1.104:8080; }

2> 配置反向代理 在server节点内部:



    1 修改nginx的配置文件(默认位置:/usr/local/nginx/conf/nginx.conf)
        1> 配置tomcat集群节点
            在http节点内部,server节点外部
            upstream tomcat-servers {
                server 192.168.1.103:8080;
                server 192.168.1.104:8080;
            }
        2> 配置反向代理
            在server节点内部:
            location / {
                proxy_pass http://tomcat-servers;
                proxy_redirect    off;
                proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
                proxy_set_header X-Real-IP $remote_addr;
                proxy_set_header Host $http_host;
                proxy_next_upstream http_502 http_504 error timeout invalid_header;
            }
    2 启动所有tomcat节点,启动nginx,测试

1 默认:轮循
        upstream tomcat-servers {
            server 192.168.1.103:8080;
            server 192.168.1.104:8080;
        }
    2 iphash:基于ip   
        upstream tomcat-servers {
            ip_hash;
            server 192.168.1.103:8080;
            server 192.168.1.104:8080;
        }
    3 weight:权重轮询
        upstream tomcat-servers {
            server 192.168.1.103:8080 weight=1;
            server 192.168.1.104:8080 weight=2;
        }

 

 

ip_hash方式,一定程度上解决了负载均衡情况下session不一致,此时访问session会发生黏着,基于Tomcat ip的黏着状态;但如果此ip的Tomcat发生宕机,则负载均衡继续进行,seever切换后导致session会话再次丢失

session复制 造成空间浪费,也不合适

redis提供session共享 √

思路:redis的key是sessionid 值为session序列化的String

准备:jar包:commons-pool2-2.2.jar, jedis 2.8.jar,tomcat-redis-session-manage-tomcat7.jar

1.在tomcat的lib中引入:
    tomcat-redis-session-manage-tomcat7.jar
    jedis-2.8.1.jar
    commons-pool2-2.2.jar
    
2.在tomcat的context.xml中添加:
    <!--  配置session由redis管理,并指定redis的ip和port -->
    <Valve className="com.orangefunction.tomcat.redissessions.RedisSessionHandlerValve"/>
    <Manager className="com.orangefunction.tomcat.redissessions.RedisSessionManager"
        host = "192.168.0.203"  #redis服务器ip
        port="7000"  
        database="0"/>#redis的库

原文地址:https://www.cnblogs.com/lhc-hhh/p/10284819.html