nginx + tomacat 负载均衡

1 需求:客户需要对现有的web服务接口 进行负载均衡配置。领导直接安排要求使用nginx做,直接从没听过这个东西,但都说这个东西很简单。那只能话不多说,直接干活咯。后面却搞了整整一天的时间。

2 背景知识:

先了解下web负载均衡相关知识,特指能够分担web请求(http,https等)的负载均衡技术,采用不同的机制建立映射关系,可以形成不同的负载均衡技术,常见的包括:
DNS轮询
CDN
HTTP重定向
IP负载均衡
反向代理负载均衡(Nginx)

这次用的是这个:
反向代理负载均衡(Nginx)
反向代理服务器的核心工作就是转发Http请求,工作在HTTP层,因此也称为七层负载均衡。反向代理服务器是转发请求不是转移,其他的都是转移。在这种调度模式下,任何对实际服务器的请求都必须经过调度器,调度器必须等待实际服务器的响应并反馈给用户。调度器可以按权重分配任务给后端服务器,因为后端服务器的能力可能不一样。按权重分配的配置在Nginx中使用weight参数定义,很多反向代理服务器还支持权重分配的RR调度策略。反向代理服务器本身的并发处理能力很重要,当反向代理服务器的吞吐率达到上限时,添加再多的后端服务器也无济于事。反向代理服务器转发操作本身具有一定的开销如创建线程、与后端服务器建立TCP连接、接收后端服务器返回的结果、分析HTTP头信息、用户态和内核态的切换等。大多反向代理服务器自身可以监测到后端服务器的健康状况如系统负载、响应时间、是否可用、TCP连接数、流量等。在实际应用中,我们可以备用一定数量的后端服务器,一旦某些后端服务器出现故障可以使用备用服务器进行替换提供服务。使用RR调度策略时即使是同一用户对同一内容的多次请求有可能是被转发到不同的后端服务器上,这样就会产生后端服务器本地Session不同步及缓存利用率下降的问题。解决Session一致的问题可以使用在一定Session周期内使同一个用户的请求始终转发到同一台后端服务器,要设计持续性调度算法,比如对用户的IP进行hash计算或使用Cookie持久性算法。当然,在后端服务器本地上保存Session和缓存并不是一个明智的选择,这样会导致为了保证Session一致等情况无法做到让后端服务器承担不同的权重。应该使用分布式的Session(多台Session服务器)和分布式缓存。
反向代理服务器由于本身开销大等原因存在扩展性差,性能受到极限等限制

NginX
1.    工作在网络的7层之上,可以针对http应用做一些分流的策略,比如针对域名、目录结构,它的正则规则比HAProxy更为强大和灵活,这也是许多朋友喜欢它的原因之一;
2.    Nginx对网络的依赖非常小,理论上能ping通就就能进行负载功能,这个也是它的优势所在;
3.    Nginx安装和配置比较简单,测试起来比较方便;
4.    也可以承担高的负载压力且稳定,一般能支撑超过几万次的并发量;
5.    Nginx可以通过端口检测到服务器内部的故障,比如根据服务器处理网页返回的状态码、超时等等,并且会把返回错误的请求重新提交到另一个节点,不过其中缺点就是不支持url来检测;
6.    Nginx仅能支持http和Email,这样就在适用范围上面小很多,这个它的弱势;
7.    Nginx不仅仅是一款优秀的负载均衡器/反向代理软件,它同时也是功能强大的Web应用服务器。LNMP(Linux+Nginx+Mysql/MariaDB+Perl/PHP/Python)现在也是非常流行的web架构,大有和以前最流行的LAMP(Linux+Apache+Mysql/MariaDB+Perl/PHP/Python)架构分庭抗争之势,在高流量的环境中也有很好的效果。
8.    Nginx现在作为Web反向加速缓存越来越成熟了,很多朋友都已在生产环境下投入生产了,而且反映效果不错,速度比传统的Squid服务器更快,有兴趣的朋友可以考虑用其作为反向代理加速器。


具体步骤:

官网下载nginx 1.8
现在很多资料上说:Nginx依赖一些其他PCRE、openssl(依赖libssl-dev)等,这些可以先不考虑,先安装 因为每个资料说的都不一样,而且自己实际的情况也不确定,可以先安装 看他的提示 缺什么 再补装即可

安装包路径:



配置文件路径:




一开始安装编译提示的pcre不存在,后来从网上下载补装的pcre 装完后 检查下 是否在:


执行make命令 安装编译nginx



Nginx配置成功后我们对windownginx.conf少做修改

user  tomcat;#修改 linux用户
worker_processes  2;#通常两倍于cpu核数  

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

pid        logs/nginx.pid;


events {
    worker_connections  2048;#<span style="color:black;">允许最大连接数</span>
}


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  ;

    sendfile        on;
    #tcp_nopush     on;

    #keepalive_timeout  0;
    keepalive_timeout  180; <span style="color:#333333;">#</span><span style="color:#333333;">连接超时时间</span>

    gzip  on;
    upstream 10.243.30.118 {#负载均衡调用ip 
     #ip_hash       
     #ip_hash;
     server 10.243.30.117:9997 weight=5; #被分配的节点1 ,为其中一个tomcat 的ip 端口
     server 10.243.30.118:9997 weight=5; #被分配的节点2,为其中另一个tomcat 的ip 端口
    }

    server {
        listen       80;                #负载均衡机器端口
        server_name  10.243.30.118;     #负载均衡机器IP

        #charset koi8-r;

        #access_log  logs/host.access.log  main;

        location / {
            root   html;               #默认根目录
            index  index.html index.htm;
            proxy_pass   http://10.243.30.118;
        }

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

}


启动

确保系统的 80 端口没被其他程序占用,

/usr/local/nginx/sbin/nginx

 

检查是否启动成功:

打开浏览器访问此机器的 IP,如果浏览器出现 Welcome to nginx! 则表示 Nginx 已经安装并运行成功。


  • 0
    点赞
  • 5
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值