文档章节

nginx+tomcat 负载均衡配置

chro008
 chro008
发布于 2017/09/14 20:07
字数 1089
阅读 18
收藏 0

简单应用nignx + tomcat 实现服务器的负载均衡

当服务器有高并发访问亦或是需要更新项目重启服务器的时候,为了防止服务器无法访问,需要配置服务器集群,当有服务器宕机的时候,nginx会将请求分发到可以访问,压力较小的服务器上。

下面是我本地做的一个简单的测试: 需要: tomcat*2 + nginx

分别配置2个tomcat的端口,我配置的是8080 和 18080; 并且配置tomcat的首页(index.jsp) 这里简单的配置显示1和2 启动2个tomcat

输入图片说明

当访问localhost:8080 和 localhost:18080 的时候 可以访问成功 输入图片说明

然后需要配置nginx 修改nginx/cong/nginx.conf


#user  nobody;
worker_processes  1;

#error_log  logs/error.log;
#error_log  logs/error.log  notice;
#error_log  logs/error.log  info;

#pid        logs/nginx.pid;


events {
    worker_connections  1024;
}


http {
    include       mime.types;
    default_type  application/octet-stream;

    #log_format  main  '$remote_addr - $remote_user [$time_local] "$request" '
    #                  '$status $body_bytes_sent "$http_referer" '
    #                  '"$http_user_agent" "$http_x_forwarded_for"';

    #access_log  logs/access.log  main;

    sendfile        on;
    #tcp_nopush     on;

    #keepalive_timeout  0;
    keepalive_timeout  65;

    #gzip  on;
	
	upstream    www.lbsky.com {
		server	127.0.0.1:8080	weight=3;    #weight 配置权重
		server 	127.0.0.1:18080	weight=1;
	}

    server {
        listen       80;
        server_name  localhost;

        #charset koi8-r;

        #access_log  logs/host.access.log  main;

        #location / {
        #   root   html;
        #   index  index.html index.htm;
        #}
		
		location / {  # 将localhost的访问 指向 www.lbsky.com
           proxy_pass   http://www.lbsky.com;
           proxy_redirect  default;
        }

        #error_page  404              /404.html;

        # redirect server error pages to the static page /50x.html
        #
        error_page   500 502 503 504  /50x.html;
        location = /50x.html {
            root   html;
        }

        # proxy the PHP scripts to Apache listening on 127.0.0.1:80
        #
        #location ~ \.php$ {
        #    proxy_pass   http://127.0.0.1;
        #}

        # pass the PHP scripts to FastCGI server listening on 127.0.0.1:9000
        #
        #location ~ \.php$ {
        #    root           html;
        #    fastcgi_pass   127.0.0.1:9000;
        #    fastcgi_index  index.php;
        #    fastcgi_param  SCRIPT_FILENAME  /scripts$fastcgi_script_name;
        #    include        fastcgi_params;
        #}

        # deny access to .htaccess files, if Apache's document root
        # concurs with nginx's one
        #
        #location ~ /\.ht {
        #    deny  all;
        #}
    }


    # another virtual host using mix of IP-, name-, and port-based configuration
    #
    #server {
    #    listen       8000;
    #    listen       somename:8080;
    #    server_name  somename  alias  another.alias;

    #    location / {
    #        root   html;
    #        index  index.html index.htm;
    #    }
    #}


    # HTTPS server
    #
    #server {
    #    listen       443 ssl;
    #    server_name  localhost;

    #    ssl_certificate      cert.pem;
    #    ssl_certificate_key  cert.key;

    #    ssl_session_cache    shared:SSL:1m;
    #    ssl_session_timeout  5m;

    #    ssl_ciphers  HIGH:!aNULL:!MD5;
    #    ssl_prefer_server_ciphers  on;

    #    location / {
    #        root   html;
    #        index  index.html index.htm;
    #    }
    #}

}

然后访问localhost,发现 分别展现1,2 并且每得到3次1 然后得到1次2

输入图片说明

这里只是简单的一个demo,当然在实际管理工作中还有更多的配置

扩展:更多属性配置介绍

ip_hash(访问ip) 每个请求按访问ip的hash结果分配,这样每个访客固定访问一个后端服务器,可以解决session的问题

upstream favresin{
      ip_hash;
      server 10.0.0.10:8080;
      server 10.0.0.11:8080;
}

fair(第三方) 按后端服务器的响应时间来分配请求,响应时间短的优先分配。与weight分配策略类似。

 upstream favresin{     
      server 10.0.0.10:8080;
      server 10.0.0.11:8080;
      fair;
}

url_hash(第三方) 按访问url的hash结果来分配请求,使每个url定向到同一个后端服务器,后端服务器为缓存时比较有效。 注意:在upstream中加入hash语句,server语句中不能写入weight等其他的参数,hash_method是使用的hash算法。

 upstream resinserver{
      server 10.0.0.10:7777;
      server 10.0.0.11:8888;
      hash $request_uri;
      hash_method crc32;
}

upstream还可以为每个设备设置状态值,这些状态值的含义分别如下: down 表示单前的server暂时不参与负载. weight 默认为1.weight越大,负载的权重就越大。 max_fails :允许请求失败的次数默认为1.当超过最大次数时,返回proxy_next_upstream 模块定义的错误. fail_timeout : max_fails次失败后,暂停的时间。 backup: 其它所有的非backup机器down或者忙的时候,请求backup机器。所以这台机器压力会最轻。

upstream bakend{ #定义负载均衡设备的Ip及设备状态
      ip_hash;
      server 10.0.0.11:9090 down;
      server 10.0.0.11:8080 weight=2;
      server 10.0.0.11:6060;
      server 10.0.0.11:7070 backup;
}

用了nginx负载均衡后,在两台tomcat正常运行的情况下,访问http://localhost 速度非常迅速,通过测试程序也可以看出是得到的负载均衡的效果,但是我们试验性的把其中一台tomcat(server localhost:8080)关闭后,再查看http://localhost,发现反应呈现了一半反映时间快,一半反映时间非常非常慢的情况,但是最后都能得到正确结果.

解决办法: 问题解决,主要是proxy_connect_timeout 这个参数, 这个参数是连接的超时时间。 我设置成1,表示是1秒后超时会连接到另外一台服务器。这里可以配合fail_timeout 一起使用,即,如果连接超过配置的时间后,就让访问的这个服务器 fail_timeout时间内不再转发给它请求(当成它宕机)

更多参数可参考下方 http://www.cnblogs.com/hunttown/p/5759959.html

© 著作权归作者所有

chro008

chro008

粉丝 5
博文 46
码字总数 19512
作品 0
海淀
程序员
私信 提问
负载均衡001_基础概述

1,概述 负载均衡(Load Balance)意思是服务器的负载压力均衡到多个服务器上;在网络世界中所有的信息传递都是通过IO来实现,只要有信息传输的地方就会有IO;网络就是信息传递所支起来的一个...

天呀鲁哇
2016/10/13
15
0
Nginx 配置实践

nginx 一般用作请求转发,用作服务器集群的负载均衡 典型的高并发集群是 nginx+tomcat(多个) nginx可以高效处理对静态文件的请求,tomcat 负责动态请求 配置范例: #user nobody;worker_pr...

HZCoder
2016/03/29
96
0
Nginx+Tomcat6+3台Linux服务器负载均衡如何部署问题请教

Hello everybody: 我现在负责公司CRM系统开发和运行,公司大约有300多人同时使用CRM系统;由于目前的CRM系统就是简单的单机Tomcat运行(没有缓存,没有集群,没有负载均衡 = 3无产品),导致...

山哥
2011/03/10
3.2K
23
nginx+tomcat实现负载均衡

Nginx处理静态web页面,tomcat处理动态页面,动静结合。 Nginx+tomcat实现负载均衡1 负载均衡服务器:192.168.0.179 负载均衡主机:192.168.0.179 192.168.0.34 179主机配置如下: [root@se...

cunlifang
2014/04/21
0
0
Nginx+Tomcat关于Session的管理

系列文章 Nginx+Tomcat关于Session的管理 Tomcat Session管理分析 Spring-Session基于Redis管理Session 前言 Nginx+Tomcat对Session的管理一直有了解,但是一直没有实际操作一遍,本文从最简...

ksfzhaohui
2018/05/31
700
6

没有更多内容

加载失败,请刷新页面

加载更多

谁说多功能和低价格不能兼得?Aspose系列产品1024购买指南请查收!

你还在为了Word、Excel、PDF、CAD等文档格式转换而发愁吗? 你是否在寻找一款能够在应用程序中文档管理的工具呢? Aspose——支持100多种文件格式创建、编辑、转换和打印! 往下看,找一找哪...

mnrssj
18分钟前
3
0
hbase客户端API

本章介绍用于对HBase表上执行CRUD操作的HBase Java客户端API。 HBase是用Java编写的,并具有Java原生API。因此,它提供了编程访问数据操纵语言(DML)。 HBaseConfiguration类 添加 HBase 的配...

水木星辰
18分钟前
3
0
[插件化开发] 1. 初识OSGI

初识 OSGI 背景 当前product是以solution的方式进行售卖,但是随着公司业务规模的快速夸张,随之而来的是新客户的产品开发,老客户的产品维护,升级以及修改bug,团队的效能明显下降,为了解...

IsaacZhang
18分钟前
4
0
Webstorm 环境使用 nuxt.js 做开发,@ 和 ~ 别名配置

好的IDE + 好的代码提示 = 高效率的开发 webstorm 设置@和~别名,有助于代码查看和跳转. step 0 在项目下创建一个webpack.config.js,内容如下: const path = require('path')module.exp...

皇虫
22分钟前
3
0
Knative 实战:基于 Knative Serverless 技术实现天气服务-下篇

上一期我们介绍了如何基于 Knative Serverless 技术实现天气服务-上篇,首先我们先来回顾一下上篇介绍的内容: 通过高德天气 API 接口,每隔 3 个小时定时发送定时事件,将国内城市未来 3 天...

Mr_zebra
40分钟前
4
0

没有更多内容

加载失败,请刷新页面

加载更多

返回顶部
顶部