`

nginx+tomcat集群负载均衡(实现session复制)

阅读更多

 Nginx+tomcat 做负载均衡

http://blog.chinaunix.net/u2/83793/showart_1354266.html

架构描述

前端一台nginx服务器做负载均衡器,后端放Ntomcat组成集群处理服务,通过nginx转发到后面(注:没做动静分离,静态动态全部都转给tomcat

优点:实现了可弹性化的架构,在压力增大的时候可以临时添加tomcat服务器添加到这个架构里面去

一,配置nginx

1,  下载包

Wget http://sysoev.ru/nginx/nginx-0.6.32.tar.gz

ftp://ftp.csx.cam.ac.uk/pub/software/programming/pcre/

2,  安装nginx

    a.安装pcre

    tar zxvf pcre-7.2.tar.gz

    cd pcre

 ./configure  --prefix = /pcre

 Make;make install

b,安装nginx

tar zxvf nginx-0.6.32.tar.gz

cd nginx-0.6.32

./configure  --prefix=/nginx –with-pcre=/pcre  --with-http_rewrite_module

Make;make install

3, 修改配置文件

Vi /nginx/conf/nginx.conf

 

#用户组

user nobody nobody;                 

#cpu个数,可以按照实际服务器来计算

worker_processes  8;                

worker_rlimit_nofile 51200;         

events {

    use epoll;

#连接数

    worker_connections  8192 ;      

}

http {

    include       mime.types;

    default_type  application/octet-stream;

    server_names_hash_bucket_size 128;

#    access_log  off;

#    access_log  logs/access.log;

#缓存的时间,(可以根据不同文件设置不同时间)

 #   expires           2h;      

    tcp_nodelay on;

    keepalive_timeout  30;      

    gzip  on;

    gzip_min_length  10;

    gzip_buffers     4 8k;

    gzip_http_version 1.1;

    gzip_types       text/plain application/x-javascript text/css text/html application/xml;

        sendfile         on;

        tcp_nopush       on;

        reset_timedout_connection  on;

     client_max_body_size 30m; 

#设定负载均衡列表       

upstream  backend           

 {                      

server   172.23.254.2:8080;   

server   172.23.254.3:8080;

}

 

#设定虚拟主机

server {

        listen       80;

        server_name  www.abc.com;

# / 所有做负载均衡 (本机nginx采用完全转发,所有请求都转发到后端的tomcat集群)

       location / {       

        root /web/www ;

       index index.jsp index.htm index.html;

            proxy_redirect         off;

#保留用户真实信息

            proxy_set_header       Host $host;

              proxy_set_header  X-Real-IP  $remote_addr;

        proxy_set_header  X-Forwarded-For $proxy_add_x_forwarded_for;

       proxy_pass  http://backend;   

       }

}

}

主要在配置proxyupstream

Upstream具有负载均衡能力,可以自动判断下面的机器,并且自动踢出不能正常提供服务的机器。

 

 

4,启动程序

/nginx/sbin/nginx

5,编写启动脚本

Vi nginx.sh

#!/bin/sh

CWD=`pwd`


case $1 in
        start)
                /nginx/sbin/nginx;
                        ;;
        stop)
                kill -2 `ps -ef|grep "/nginx/sbin/nginx"|grep -v "grep"|awk '{print $2}' `
                        ;;
        restart)
                cd "$CMD"
                $0 stop
                $0 start
        ;;
        *)
        echo $"Usage: $0 {start|stop|restart}"
        exit 1
esac
exit 0

 

    二,配置tomcat

1,  下载tomcat5.59

tar zxvf tomcat5.59

        2,修改配置文件

            a,配置数据源

            b,优化tomcat最大并发数

                    <Connector port="8080" maxHttpHeaderSize="8192"

               maxThreads="2048" minSpareThreads="100" maxSpareThreads="200"

               enableLookups="false" redirectPort="8443" acceptCount="500"

               connectionTimeout="20000" disableUploadTimeout="true" />

            c,添加虚拟主机

(注,主转发的虚拟主机必须用localhost,否则nginx不能通过内网ip转发,而只有通过域名转发

            d,测试

                打开http://ip:8080

                页面能访问则正常

2,  其他的tomcat服务器也用同样的配置

三,做tomcat集群

    两台机器 172.23.254.2  172.23.254.3

    做集群需要修改的文件配置有三个地方

    1,修改conf/server.xml配置文件
        a. 
找到Engine标签,加入属性 jvmRoute="worker1"

b.找到Cluster标签,去掉注释,同时修改tcpListenAddress为本机ip 172.23.254.2 (注:这一段Cluster必须放在hosts里面)

     

2,  修改应用的web.xml

修改web应用里面WEB-INF目录下的web.xml文件,加入标签

<distributable/>

直接加在</web-app>之前就可以了

这个是加入tomcatsession复制的,做tomcat集群必须需要这一步,否则用户的session就无法正常使用。

3,  开启防火墙

这两个tomcat之间必须开启防火墙信任。

分别启动两个tomcat,查看每一个tomcat是否都启动了8080端口以及4001端口

再用netstat –an 查看链接情况

tcp        0      0 172.23.254.2:43320      172.23.254.3:4001      ESTABLISHED

tcp        0      0 172.23.254.2:46544      172.23.254.3:4001      TIME_WAIT  

tcp        0      0 172.23.254.2:40118      172.23.254.3:4001      ESTABLISHED

tcp        0      0 172.23.254.2:4001       172.23.254.3:48804     ESTABLISHED

tcp        0      0 172.23.254.2:4001       172.23.254.3:34254     ESTABLISHED

如果两台机器的4001端口分别建立了连接,则说明集群配置成功,可以进行session复制。

 

 

可能存在的问题

1,  session复制问题

以前用apache做负载均衡的时候,是选择了用 session sticky的模式,这样的话,用户每次进来都会是同一个服务器中的session,不会被转发到其他的服务器上。在这样的情况下,tomcat即使不做session复制也不会影响用户访问。但是nginx并不支持sticky功能。所以必须要做session复制。否则很多地方就根本没法用。比如登录过程,先等到了第一个tomcat上,产生了一个session,在刷新页面,刷到另外一个tomcat的机器上,没有这个session,就会出现问题了。所以程序员在写jsp的时候也要注意这一点

  举个简单的例子,比如我们在单机应用情况下修改SESSION中用户的某一个数据,那么通常就是:
User user = (User)request.getSession().getAttribute(“user”);
User.setName(“my name”);
    
这样我们就是直接存取出来,然后进行修改,虽然在单机情况下没有问题,但是在集群条件下,这样就导致了多台WEB服务器上的SESSION不同步的问题,因为SESSION并没有改变,Tomcat无法监视session中某个数据的值是否发生了变化。因此,我们还需要执行如下操作以保证SESSION的同步:
Request.getSession().setAttribute(“user”, user);
    
所以,我们在操作SESSION的时候要特别注意!另外的建议就是,我们应该尽可能的不要修改SESSION中的数据。

 

  可能经常会遇到session复制不正常的情况。除了在服务端找原因再也程序上找下原因。都是有可能导致session复制不正常的

 

2.页面同步

     为确保后面tomcat的服务器上的页面程序是一致的,可以采用如下方式

     a,rsync同步,或者做成页面按钮,提供给编辑,修改了程序即使点击同步

     b,共享区域存储,或者采取drbd网络raid模式

 

3,确认nginx可以转发成功,

nginxwget一下后面转发的url(包过端口),如果可以打开,那就可以转发过去。如果不能打开,则无法转发

分享到:
评论
2 楼 talangniao 2010-03-10  
http://blog.chinaunix.net/u2/83793/showart_1354266.html

我转载过来的,一直没有测试过,你看看原帖。
1 楼 lzj0470 2010-03-09  
怎么我测试了一下,不行呀

相关推荐

    Windows+Nginx+Tomcat做负载均衡同时实现session共享Demo

    最后,这个Demo可能包含了qdksDemo这个项目的配置文件、源代码以及部署脚本,帮助我们理解如何在Windows环境中配置Nginx和Tomcat,以及如何实现负载均衡和session共享的详细步骤。用户可以通过解压qdksDemo文件,...

    Nginx+tomcat 实现负载均衡session共享demo

    本教程将详细讲解如何通过`Nginx`实现`Tomcat`集群的负载均衡,并实现`session`共享。 首先,我们要理解负载均衡的基本概念。负载均衡是通过将工作负载分散到多个计算资源,以优化资源使用、最大化吞吐量、最小化...

    nginx+tomcat集群+redis实现session共享

    目前只支持tomcat8.5,其它版本的tomcat还没测试,自己配置过很多nginx+tomcat集群+redis实现session共享的系统,经过仔细总结得出这些,可以说是知识的结晶,欢迎大家来下载,不好的地方可以多提,有问题看到的话会...

    Nginx+tomcat负载均衡集群session复制 windos

    本文将详细介绍如何在Windows环境下,利用Nginx作为反向代理服务器,与Tomcat集群配合实现负载均衡,并进行session复制,确保用户会话在不同服务器之间的一致性。 首先,Nginx是一款轻量级、高性能的HTTP和反向代理...

    nginx+tomcat+redis完成session共享

    这个小例子"nginx+tomcat+redis完成session共享"旨在演示如何通过这三种技术实现跨服务器的用户会话共享,以提升用户体验并简化系统管理。以下是这些技术及其在会话共享中的作用: 1. **Nginx**:Nginx是一款高性能...

    使用redis解决nginx+tomcat8负载均衡集群session共享问题jar包

    `标题`中提到的"使用redis解决nginx+tomcat8负载均衡集群session共享问题jar包",实际上是指利用Redis作为中央缓存来存储和共享session数据,以解决负载均衡下的session丢失问题。 **Redis作为Session存储** Redis...

    Nginx+Tomcat完成负载均衡及Session共享

    图文并茂 完成Nginx + Tomcat集群部署及配置

    Nginx+Tomcat+Memcached实现tomcat集群和session共享 nginx配置

    Nginx+Tomcat+Memcached实现tomcat集群和session共享 nginx配置

    nginx+tomcat7+memcached session会话保持

    本文将详细介绍如何在Nginx、Tomcat7和Memcached的环境下实现会话保持,确保用户在多台服务器之间切换时仍能保持其会话状态。 首先,我们要理解会话保持的重要性。在分布式系统中,用户可能与集群中的任何一台...

    Windows+Nginx+Tomcat做负载均衡同时实现session共享Demo2

    总的来说,通过Windows上的Nginx和Tomcat集群实现负载均衡与Session共享,可以提高Web服务的可靠性、扩展性和用户体验。这个Demo2可能是一个实践案例,用于演示如何在实际环境中设置这样的架构。务必根据自己的需求...

    Nginx+Tomcat7+Memcached集群Session共享

    Nginx+Tomcat7+Memcached集群Session共享 完整例子 主要是利用memcached-session-manager(下面简称msm)开源tomcat插件改变tomcat原始的session存储机制,将session的存储放到分布式缓存memcache中,从而实现对...

    Nginx+tomcat配置集群负载均衡

    在IT行业中,构建高效、可扩展的Web服务是至关重要的,而"**Nginx+Tomcat配置集群负载均衡**"就是实现这一目标的一种常见方案。Nginx是一款高性能的反向代理服务器,常用于处理静态资源和进行负载均衡;Tomcat则是...

    nginx+redis负载均衡、session共享

    在构建高性能、高可用的Web服务时,"nginx+redis负载均衡、session共享"是一个常见的解决方案。这个方案结合了Nginx的反向代理和负载均衡能力,以及Redis的内存数据存储和分布式特性,用于处理高并发场景下的HTTP...

    Nginx+Tomcat负载均衡

    首先大家注意: 本文章中没有session共享,关于session共享我会在下一篇中讲解,先实现Nginx+tomcat负载均衡再实现session共享。 从网上查了好多资料,多走了很多弯路,现在把自己成功的方法拿出来与大家分享。 ...

    Nginx + Memcached + Tomcat 集群负载均衡

    标题 "Nginx + ...以上知识点涵盖了Nginx、Memcached和Tomcat集群负载均衡的基本原理和实践,对于构建高可用、高性能的Web服务具有重要意义。理解并熟练掌握这些技术,对于提升大型Web应用的运维能力至关重要。

    Nginx+Tomcat+Redis搭建高性能负载均衡集群Session共享

    超详细Nginx+Tomcat+Redis搭建高性能负载均衡集群Session共享搭建说明,按文档步骤可轻松搭建并实现session共享

    Windows+Nginx+Tomcat搭建负载均衡和集群的tomcat压缩包

    5. **集群高可用性**:为了提高系统的健壮性,可以考虑在每个Tomcat实例上启用session复制或使用粘性会话。这样,当某个Tomcat节点故障时,其已有的会话数据能被其他节点接管,避免用户被迫重新登录。 6. **负载...

    linux nginx+redis+tomcat分布式负载均衡生产环境部署完成

    技术:reids集群 nginx部署 tomcat负载均衡 说明包含: nginx+redis+tomcat分布式负载均衡文档 session共享资料 安装程序 nginx+redis+tomcat分布式负载均衡部署帮助文档 nginx+redis+tomcat分布式负载均衡...

    Windows+Nginx+Tomcat搭建负载均衡和集群环境同时实现

    为了实现负载均衡,Nginx会根据预设的策略(如轮询、权重轮询、最少连接等)将请求分配给后端服务器。在上述示例中,`tomcat1.example.com`的权重设为2,这意味着它将接收双倍的请求。 集群环境的另一个重要方面是...

    男孩的天职nginx+tomcat集群+redis存储session

    男孩的天职nginx+tomcat集群+redis存储session 下载的是一个pdf文件,文件里面有视频演示下载地址,以及jdk1.8 tomcat8 nginx 1.8安装笔记,绝对可以用 nginx反向代理tomcat集群,请求轮训给集群的tomcat,session...

Global site tag (gtag.js) - Google Analytics