如何实现nginx与tomcat云服务器集群做负载均衡的方法详细解答。
admin
2023-03-19 09:01:58
0

下文给大家带来如何实现nginx与tomcat云服务器集群做负载均衡的方法详细解答。,希望能够给大家在实际运用中带来一定的帮助,负载均衡涉及的东西比较多,理论也不多,网上有很多书籍,今天我们就用在行业内累计的经验做一个解答。

一、nginx与tomcat实现负载均衡

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

文件内容:

如何实现nginx与tomcat云服务器集群做负载均衡的方法详细解答。

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;
        }
   }
}

如何实现nginx与tomcat云服务器集群做负载均衡的方法详细解答。

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

    [root@iZ28b4kreuaZ bin]# /usr/local/nginx/sbin/nginx -c /usr/local/nginx/conf/nginx-tomcat.conf

如何实现nginx与tomcat云服务器集群做负载均衡的方法详细解答。

二、配置文件详解:

如何实现nginx与tomcat云服务器集群做负载均衡的方法详细解答。 View Code

 

三、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

如何实现nginx与tomcat云服务器集群做负载均衡的方法详细解答。

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

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

[root@iZ28b4kreuaZ 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启动项。

    [root@iZ28b4kreuaZ 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广播

如何实现nginx与tomcat云服务器集群做负载均衡的方法详细解答。

      
      
           
             
        
      

如何实现nginx与tomcat云服务器集群做负载均衡的方法详细解答。

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

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

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

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

  b、memcached 的 session共享原理

   粘性共享:

如何实现nginx与tomcat云服务器集群做负载均衡的方法详细解答。

  非粘性:

如何实现nginx与tomcat云服务器集群做负载均衡的方法详细解答。

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接口

如何实现nginx与tomcat云服务器集群做负载均衡的方法详细解答。

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 下 作用于Context docBase指定的应用
         如果只希望session管理作用于特定应用,最好用3,4方式设置,希望作用全体,可用1,2,5设置

 conf/context.xml的配置:

如何实现nginx与tomcat云服务器集群做负载均衡的方法详细解答。 View Code

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

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、图片)

看了以上关于如何实现nginx与tomcat云服务器集群做负载均衡的方法详细解答。,如果大家还有什么地方需要了解的可以在行业资讯里查找自己感兴趣的或者找我们的专业技术工程师解答的,技术工程师在行业内拥有十几年的经验了。

 

 

相关内容

热门资讯

【今日要闻】“九线拉王怎么装挂... 网上科普关于“九线拉王有没有挂”话题很是火热,小编也是针对九线拉王作*弊开挂的方法以及开挂对应的知识...
终于懂了“情缘可以开挂吗?”(... 终于懂了“情缘可以开挂吗?”(原来真的有挂)您好,情缘这个游戏其实有挂的,确实是有挂的,需要了解加客...
【今日要闻】“新众亿炸/金/花... 您好:新众亿炸/金/花这款游戏可以开挂,确实是有挂的,需要了解加客服微信【9752949】很多玩家在...
最新引进“天天微友棋牌怎么装挂... 有 亲,根据资深记者爆料天天微友棋牌是可以开挂的,确实有挂(咨询软件无需...
终于明白“大宝麻将有挂吗?”(... 您好:大宝麻将这款游戏可以开挂,确实是有挂的,需要了解加客服微信【9784099】很多玩家在这款游戏...
玩家攻略科普“新超凡牛牛有没有... 有 亲,根据资深记者爆料新超凡牛牛是可以开挂的,确实有挂(咨询软件无需打...
终于懂了“十三十三水真的有挂吗... 网上科普关于“十三十三水有没有挂”话题很是火热,小编也是针对十三十三水作*弊开挂的方法以及开挂对应的...
今日重磅消息“17好友麻将可以... 您好:17好友麻将这款游戏可以开挂,确实是有挂的,需要了解加客服微信【4282891】很多玩家在这款...
【第一消息】“科乐麻将怎么开挂... 【第一消息】“科乐麻将怎么开挂?”(果然有透视挂)您好,科乐麻将这个游戏其实有挂的,确实是有挂的,需...
终于了解“大运河江苏麻将有挂吗... 终于了解“大运河江苏麻将有挂吗?”(太坑了原来有挂)您好,大运河江苏麻将这个游戏其实有挂的,确实是有...