Nginx 服务器 之Nginx与tomcat实现负载均衡

 

本文讲解我们如何使用Nginx做反向带服务器,实现nginx与tomcat服务器集群做负载均衡。

一、nginx与tomcat实现负载均衡

1、在/usr/local/ngnix/conf  创建文件 nginx-tomcat.conf

文件内容:

user  nobody;
worker_processes  2;
events {   
    worker_connections  1024;    
}
http{    # upstream 配置一组后端服务器,
    # 请求转发到upstream后,nginx按策略将请求指派出某一服务器
    # 即配置用于负载均衡的服务器群信息    upstream tomcats{
        fair;
        server 121.42.41.143:8080;
        server 219.133.55.36;
    }
    server {
        listen       80;
        server_name  121.42.41.143;
        access_log  logs/tomcat-nginx.access.log  combined;        # 反向代理设置,将所有/路径下请求发给本机上的tomcat
        location / {            #root   html;            index  index.html index.htm;            #==========Nginx提供的代理============
            proxy_set_header X-Forwarded-Host $host;
            proxy_set_header X-Forwarded-Server $host;
            proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
            proxy_pass http://tomcats;
        }
   }
}

2、使用该配置文件启动nginx (启动前先关闭nginx)

[[email protected] bin]# /usr/local/nginx/sbin/nginx -c /usr/local/nginx/conf/nginx-tomcat.conf

二、配置文件详解:

 

三、fair策略的安装

fair策略:根据各个服务器的性能的不同,自动选择使用响应能力强的服务器。该策略是第三方提供的,所以要先安装。

安装步骤

1、下载 gnosek-nginx-upstream-fair-a18b409.tar.gz

2、解压  tar zxvf gnosek-nginx-upstream-fair-a18b409.tar.gz

3、将解压后的文件移动到 /usr/local目录下并 改名为 nginx-upstream-fair

4、将该模块添加到我们安装的nginx中

a、首先进入nginx-1.8.1源文件目录下在执行:

[[email protected] nginx-1.8.1]# ./configure --prefix=/usr/local/nginx --add-module=/usr/local/nginx-upstream-fair/

b、执行:make    进行编译

c、进入 nginx-1.8.1/objs/下将最新的nginx启动项 覆盖原来的 /usr/local/nginx/sbin/nginx启动项。

[[email protected] objs]# cp nginx /usr/local/nginx/sbin

d、开启Nginx 看看是可以使用

 四、在分布式服务器集群中session共享问题

问题:当我们的用户在tomcat1服务器上登录后,tomcat1会保存用户的登录信息,但当用户的请求被代理服务器分配给tomcat2/tomcat3服务器时,这时就会出现tomcat2/tomcat3无法获取用户登录信息,从而导致用户需要重新登录的现象。我们有三种解决方案:

1、同一个用户的请求锁定在同一台服务器上,这样就不会存在session在不同服务器之间共享问题。这种方案简单,但缺乏容错性(一旦服务器故障,那用户的请求将被分配给其他服务器,这时就需要重新登录)

实现方式:设置集群策略为 ip_hash ;

 upstream tomcats{
        ip_hash;
    }

2、session复制方式: 当任何服务器中session值发生改变,他都会将该改变广播给其他服务器,当其他服务器收到广播后也做相应的改变,从而实现session在所有服务器中一直。缺点 当集群中tomcat服务器很多时会增加网络负荷,性能低下。实现方式:

a、在tomcat的server.xml中配置session广播

      <!-- 基于网络广播的策略,一个节点session变化,其它节点同步复制,节点多或数据量大时性能低下 -->
      <Cluster className="org.apache.catalina.ha.tcp.SimpleTcpCluster">
        <Channel className="org.apache.catalina.tribes.group.GroupChannel">   
            <Receiver className="org.apache.catalina.tribes.transport.nio.NioReceiver"  
                      address="192.168.6.223"  
                      port="8080"/> 
        </Channel>
      </Cluster>

b、在我们的分布式应用的web.xml 中添加 <distributable/>标签

<distributable/>:作用是公告我们的应用可以处于集群环境中。

3、通过创建额外的共享空间用来管理session,一般我们使用分布式缓存技术redis、memcached缓存技术,在这里我么使用memcached。

  a、memcached的安装:http://www.cnblogs.com/jalja/p/6121978.html

  b、memcached 的 session共享原理

  粘性共享:

  非粘性:

c、tomcat访问memcached的相关环境(我们使用的是tomcat7)

  1. 复制jar包到tomcat/lib目录,jar分三类

    1)spymemcached.jar memcached java客户端

    2)memcached相关的包  memcached-session-manager-{version}.jar       核心包         memcached-session-manager-tc{tomcat-version}-{version}.jar   Tomcat版本相关的包

    3)序列化工具包,有多种可选方案,不设置时使用jdk自带序列化,其它可选kryo,javolution,xstream,flexjson等   msm-{tools}-serializer-{version}.jar  其它序列化工具相关包  一般第三方序列化工具不需要实现serializable接口

d、配置Context,加入处理session的Manager  MemcachedBackupSessionManager
 Context配置查找顺序:
        1)conf/context.xml 全局配置,作用于所有应用
        2) conf/[enginename]/[hostname]/context.xml.default 全局配置,作用于指定host下全部应用
        3) conf/[enginename]/[hostname]/[contextpath].xml 只作用于contextpath指定的应用
        4) 应用META-INF/context.xml 只作用于本应用
        5) conf/server.xml <Host>下 作用于Context docBase指定的应用
         如果只希望session管理作用于特定应用,最好用3,4方式设置,希望作用全体,可用1,2,5设置

conf/context.xml的配置:

 

四、集群环境开发注意事项

1、实体类要序列化( implements Serializable)

private static final long serialVersionUID = 3349238980725146825L;

2、获取客户端请求地址的方式 。在nginx-tomcat.conf中添加如下配置:

   server {
        location / {
            proxy_set_header   X-Real-IP        $remote_addr; # 真实的客户端IP        }
   }

java代码:

public static String  getIp(HttpServletRequest request){
        String remoteIp =request.getRemoteAddr();
        String headIp=request.getHeader("X-Real-IP");        return headIp==null?remoteIp:headIp;
    }

3、动静分离 
  把静态文件放在nginx服务器中(css、js、图片)

时间: 2024-10-05 16:54:25

Nginx 服务器 之Nginx与tomcat实现负载均衡的相关文章

Nginx服务器的安装与反向代理负载均衡

Nginx服务器 一:什么是Nginx? 我们生活的世界中,有的时候需要上网.我们可以浏览很多很多的网页,这些网页都是由一系列的程序组成,但是我们是否想过,这些程序存储在什么地方呢?没错,这些程序都是存储在一种名叫服务器的硬件上,比如我们的电脑也是一种服务器,只不过我们的个人电脑作为服务器的话性能会比较低.我们的网页程序存储在服务器硬件上,是否可以随意存储呢?不是的,我们需要在服务器硬件的操作系统中搭建一个服务器软件,那么这样,有服务器软件跟服务器硬件配合,才形成一个完整的服务器.服务器软件有非

Linux之部署Tomcat及其负载均衡

Linux之部署Tomcat及其负载均衡 一.案例 案例要求 1. 在1.10和1.20上分别部署tomcat服务,并创建java的web站点.在本机上分别验证是否能访问创建的web站点(如http://192.168.1.10:8080/index.jsp) 2. 在1.100的主机上部署nginx服务,修改主配置文件,实现nginx为前端,tomcat为后端的负载均衡的功能. 3.在client主机访问nginx服务器,验证是否能实现负载均衡. 二.开始部署 1.环境配置 (使用Vmware

linux下:nginx+tomcat实现负载均衡

Nginx+tomcat+jdk+负载均衡配置 Nginx与tomcat都具有发布网页的功能,但是nginx只能发布HTML的静态网页,tomcat可以发布jsp的网页,并且nginx可以发布tomcat. 下载:jdk.xxxxxx.rpm   apache-tomcat-xxxxxxxxx.tar.gz   openssl.xxxxxx.tar.gz   zlib.xxxx.tar.gz   pcre.xxxx.tar.gz    Nginx.xxxxx.tar.gz 1.jdk安装配置 上

nginx+tomcat+redis负载均衡及session共享

概述 本文档是用来详细描述 nginx+tomcat+redis负载均衡实现session共享 所需软件及下载地址 软件名称 下载地址 功能说明 Nginx-v1.6.0 http://nginx.org/download/nginx-1.6.0.tar.gz 负载均衡 commons-pool-2-2.4.2.jar http://mirrors.hust.edu.cn/apache//commons/pool/binaries/commons-pool2-2.4.2-bin.tar.gz j

nginx+tomcat 另类负载均衡

一.部署背景 某服务器A:10.68.4.198    域名:edi.qnb.com  ( tomcat应用,web 访问但须帐密认证,其他服务器连接查询却无须认证  ) 因业务需要,需要对A服务器做负载均衡.要求用nginx的upstream模块.A服务器上安装了tomcat和nginx,nginx做转发,将端口80接收到的请求,转发至本机的8080端口上,由tomcat处理. 现有相同配置的服务器B:10.68.4.248,用于做A的负载均衡. 按照一般设置是直接在upstream块中添加如

Tomcat(五):nginx/httpd + tomcat及负载均衡tomcat

*/ .hljs { display: block; overflow-x: auto; padding: 0.5em; color: #333; background: #f8f8f8; } .hljs-comment, .hljs-template_comment, .diff .hljs-header, .hljs-javadoc { color: #998; font-style: italic; } .hljs-keyword, .css .rule .hljs-keyword, .h

Nginx+Tomcat实现负载均衡群集实例,可跟做!!!

通常情况下一台Tomcat站点由于可能出现单点故障及无法应付过多客户复杂多样的请求等问题,不能单独用于生产环境.所以我们就需要一套更可靠的解决方案来完善Web站点架构. Nginx是一款非常优秀的HTTP服务器软件,它能够支持高达50000个并发连接数的响应,拥有强大的静态资源处理能力,运行稳定.并且内存.CPU等系统资源消耗非常低.目前的很多大型网站都应用Nginx服务器作为后端网站程序的反向代理及负载均衡器,来提升整个站点的负载并发能力. 案例环境 案例实施 (1)安装部署Tomcat 1服

nginx tomcat做负载均衡

之前使用nginx做过web反向代理,没有做过负载均衡,今天有个同学需要做tomcat的负载均衡,我也研究下. 一共是2个机器,一个物理机(win7)上面部署2个tomcat,使用不同的端口启动.vm中的虚拟机放(centos)nginx,给tomcat做负载均衡. inux ip: 192.168.37.129 win ip: 192.168.37.1 首先保证两个主机可以互ping,响应的端口开放. nginx上使用80 tomcat1 使用8081 tomcat2使用8080 nginx,

Nginx搭建部署Web服务器并与NFS结合搭建负载均衡服务器

Nginx搭建部署Web服务器并与NFS结合搭建负载均衡服务器 一.搭建NginxWeb服务器     此种方式是用yum安装Nginx,为保证安装成功需在安装之前提前安装epel扩展源.     用yum安装Nginx     关闭系统防火墙           查看Nginx配置文件          安装完成后启动Nginx并查看其运行状态          然后在客户端浏览器里面输入Nginx服务器的IP地址即可验证Nginx工作正常      二.搭建NFS服务器     NFS:网络