`
oboaix
  • 浏览: 275260 次
社区版块
存档分类
最新评论

Tomcat7+Nginx1.8+Redis2.6负载均衡简单配置

 
阅读更多

        为了缓解因为Web服务器的session所占据的内存空间,减轻过多并发用户所占用的系统资源,使用nginx的超高并发性,再结合内存数据库缓存机制,进一步减轻服务器压力,提升系统稳定性、可扩展性。

(一般情况下:每个session占据大概0.5M的空间,如果是超过上万的在线用户,消耗web服务器的内存资源是很大的),利用nginx的超高并发性,10000个在线用户(inactive)情况下,占用的内存2.5M左右,节省了大量的系统资源。

       分布式共享方式也有不少方式,对于简单的session方式,直接使用ip_hash方式,每次用户请求的都是同一台服务器,避免session请求到其他web 服务器上面;

       基于NFS共享文件系统,图片、文档的共享;

       类似本文的memcached 的session内存数据库缓存方式;

       基于tomcat分布式web.xml 的<distributable/> 共享session设置方式;

       基于cookie 进行session共享(安全问题,小心被劫持DNS);

       基于TT/Redis 或 jbosscache 进行 session 共享;

       基于Rdbms数据库的Session共享;

       其他方式apache或者第三方等等。

本文使用高性能内存缓存数据库redis,性能优异,方便简单,有主从备份机制。

 

基本配置环境:

jdk 64bit

linux centos6 64bbit

apache-tomcat-7.0.42

redis2.6(linux ubuntu)

Nginx1.8.0

 

这里认为所有环境已经安装配置好,这里仅仅是记录一些参数配置信息。

Tomcat A :(192.168.1.101)

server.xml

1、<Server port="8005" shutdown="SHUTDOWN">

2、    <Connector port="8081" protocol="HTTP/1.1"
               connectionTimeout="20000"
               redirectPort="8443" />

3、<Connector port="8009" protocol="AJP/1.3" redirectPort="8443" />

 

context.xml

 <Valve className="com.radiadesign.catalina.session.RedisSessionHandlerValve" />
  <Manager className="com.radiadesign.catalina.session.RedisSessionManager"
  host="192.168.1.100"
  port="6380"
  password="pass"
  database="1"
  maxInactiveInterval="3600"/>

 

TomcatB(192.168.1.102)在同一台机器上面需要修改tomcat参数,不同机器,就不用修改。

server.xml

1、<Server port="8006" shutdown="SHUTDOWN">

2、    <Connector port="8082" protocol="HTTP/1.1"
               connectionTimeout="20000"
               redirectPort="8444" />

3、<Connector port="8010" protocol="AJP/1.3" redirectPort="8444" />

 

context.xml

 <Valve className="com.radiadesign.catalina.session.RedisSessionHandlerValve" />
  <Manager className="com.radiadesign.catalina.session.RedisSessionManager"
  host="192.168.1.100"
  port="6380"
  password="pass"
  database="1"
  maxInactiveInterval="3600"/>

 

nginx配置参数:

    upstream nginx {
     server 192.168.1.101:8081;
     server 192.168.1.102:8082;
   }

    #keepalive_timeout  0;
    keepalive_timeout  65;

    #gzip  on;

    server {
        listen       80;
        server_name  localhost;

        #charset koi8-r;

        #access_log  logs/host.access.log  main;

        location /nginx {
     proxy_pass http://nginx;
            #root   html;
            #index  index.html index.htm;
        }

 

redis配置参数:

基本是默认配置,

如需要主从备份机制,在从机上面请开放:slaveof <masterip> <masterport>

设置账户访问密码,请开放:requirepass pass

调整默认访问端口,请设置:port 6380

指定允许访问IP地址,请设置:bind 192.168.1.100 192.168.1.101 192.168.1.102

 

需要提供的jar包,由于在使用过程中有依赖性关系,这里使用pom.xml来配置,

获取到4个jar包,拷贝到tomcat_home下面lib目录下面:

commons-pool-1.6.jar

commons-pool2-2.2.jar

jedis-2.2.1.jar

tomcat-redis-session-manager-1.2-tomcat-7.jar  (tomcat6请换成对应的jar包)

 

基本配置参数以及对应的jar包已经到位。

应该是修改对象war包项目的session值,检查测试。

一台tomcat对应的session值修改,然后检查对比是否另外一台tomcat响应正确,redis数据库是否存储实际的session值,默认也是指定过期时间30分钟,redis命令:ttl "sesionId",正常情况是完全模拟session原理实现。

 

jsp测试页面:

tomcatA

    <body>
        TomcatAAAAAAAAA<br/>
  <%
    HttpSession session = request.getSession();
    //将数据存储到session中
    session.setAttribute("data", "dingnigefei");
    //获取session的Id
    String sessionId = session.getId();

    System.out.println(session.getAttribute("data"));
    System.out.println(sessionId);
  %>
    </body>

------------------------------------------------------------

tomcatB

    <body>
        TomcatBBBBBBBB<br/>
  <%
  HttpSession session = request.getSession();
  System.out.println(session.getAttribute("data"));
  %>
    </body>

 

        访问量很大的互联网架构考虑,必须考虑对于应用无状态性需要良好的设计、管控。


        一个系统的伸缩性的好坏取决于应用的状态如何管理。试想一下,假如我们在 session 中保存了大量与客户端的状态信息的话,那么当保存状态信息的 server 宕机的时候,我们怎么办?通常来说,我们都是通过集群来解决这个问题,而通常所说的集群,不仅有负载均衡,更重要的是要有失效恢复 failover,比如 tomcat 采用的集群节点广播复制,Jboss 采用的配对复制等 session 状态复制策略,但是集群中的状态恢复也有其缺点,那就是严重影响了系统的伸缩性,系统不能通过增加更多的机器来达到良好的水平伸缩,因为集群节点间 session的通信会随着节点的增多而开销增大, 因此要想做到应用本身的伸缩性, 我们需要保证应用的无状态性,这样集群中的各个节点来说都是相同的,从而是的系统更好的水平伸缩。上面说了无状态的重要性,那么具体如何实现无状态呢?此时一个 基于session 框架就会发挥作用了。

       一般通过 cookie 来实现,或者也可以采用集中式 session 管理来完成,说具体点就是多个无状态的应用节点连接一个 session 服务器,session 服务器将 session 保存到缓存中,session 服务器后端再配有底层持久性数据源,比如数据库,文件系统等等,让数据即使在宕机的情况下,将访问的应用状态持久化,保证能够尽可能短的时间内的有效failove。

 

  • jar.zip (371.7 KB)
  • 下载次数: 3
分享到:
评论

相关推荐

    jdk-8u151+maven-3.3.9+nginx-1.9.12+zookeeper-3.3.6+tomcat-8.5.23+redis-2.6

    Nginx 1.9.12版本提供了静态文件服务、HTTP/HTTPS服务、负载均衡等功能,是搭建高可用Web服务的首选。 4. **Zookeeper 3.3.6**: Zookeeper是一个分布式的,开放源码的分布式应用程序协调服务,它是集群的管理者,...

    tomcat的nginx集群用redis的包

    tomcat的nginx集群用redis的包 本机ip为192.168.1.101 1、准备测试环境 两个Tomcat 在Eclipse中新建2个Servers,指定对应的Tomcat,端口号错开。 Tomcat1(18005、18080、18009) Tomcat2(28005、28080、28009) ...

    nginx服务企业应用1

    3. **反向代理与负载均衡**:Nginx可以作为反向代理服务器,将客户端请求转发到后端服务器,实现负载均衡,同时内建健康检查机制,保证服务稳定性。 4. **缓存服务**:Nginx具备缓存功能,可以减轻后端服务器的压力...

    nginx服务部署1

    3. **反向代理和负载均衡**:Nginx可作为HTTP反向代理,加速缓存,并实现负载均衡,同时具备RS服务器健康检查功能。 4. **缓存功能**:Nginx可以作为缓存服务器,类似于Squid,支持memcache和redis等缓存技术。 5....

    开涛高可用高并发-亿级流量核心技术

    2.9 Nginx四层负载均衡 39 2.9.1 静态负载均衡 39 2.9.2 动态负载均衡 41 参考资料 42 3 隔离术 43 3.1 线程隔离 43 3.2 进程隔离 45 3.3 集群隔离 45 3.4 机房隔离 46 3.5 读写隔离 47 3.6 动静隔离 48 3.7 爬虫...

    linux编程环境和软件工具安装手册

    2.6 安装Nginx服务器 * 下载Nginx安装包 * 解压并安装Nginx * 启动Nginx * 浏览器验证启动情况 三、容器化和cloud computing 3.1 安装Docker * 下载Docker安装包 * 安装Docker * 启动Docker服务 * 设置开机启动 ...

    Java高级架构必备知识点

    - **Nginx负载均衡/反向代理实现**:配置Nginx实现负载均衡和反向代理。 **7.14 双十一专题-九阳真经** - **太极聚气之分布式压测平台**:构建分布式压力测试平台。 - **氤氲紫气之分布式缓存体系**:构建高效的...

    大型高并发web应用系统架构分析与设计

    - **1.2.1.1 软件级负载均衡**:如Nginx、HAProxy等,它们通常部署在服务器集群的前端,负责根据一定的算法将请求分发到不同的后端服务器上。 - **1.2.1.2 硬件级负载均衡**:通过专门的负载均衡设备(如F5、Cisco...

    linux部署分布式微服务架构.docx

    ##### 2.6 Nginx安装 1. **下载Nginx安装包**:访问Nginx官网下载适用于Linux的安装包。 2. **解压安装包**:使用`tar -zxvf nginx-xxx.tar.gz`命令解压安装包。 3. **编译安装**:解压后进入目录,执行`./...

    springboot全套学习资料.txt

    - **负载均衡**:介绍Ribbon、Nginx等工具的使用方法。 - **API网关**:介绍Zuul、Spring Cloud Gateway等API网关的使用方法。 ##### 2.6 分布式追踪 - **Sleuth**:介绍如何使用Spring Cloud Sleuth进行分布式追踪...

    分布式架构演进过程

    技术选型和解决方案的选择至关重要,例如,数据库中间件如Mycat用于读写分离和分库分表管理,数据同步工具如Binlog实现数据库间的实时同步,反向代理如Nginx和HAProxy用于负载均衡和七层处理,缓存技术如Redis和...

Global site tag (gtag.js) - Google Analytics