前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >Nginx+Tomcat实现负载均衡

Nginx+Tomcat实现负载均衡

作者头像
会跳舞的机器人
发布2018-09-03 16:16:05
6170
发布2018-09-03 16:16:05
举报
一、环境准备
  • Tomcat1:192.168.31.103
  • Tomcat2:192.168.31.117
  • Nginx:192.168.31.154

在103和117上分别部署相同的Tomcat程序,修改index.jsp页面,把内容改为各自的IP地址。

二、修改配置文件nginx.conf

在http节点中增加:

代码语言:javascript
复制
## user-api 
    upstream user-api { 
        server 192.168.31.103:8080 weight = 3; 
        服务器192.168.31.117:8080重量= 3; 
    } 
   server { 
        listen 80; 
        server_name 192.168.31.154; 
        location / { 
            proxy_pass http:// user-api /; 
        } 
    }
  • upstream为Nginx的负载均衡模块,里面定义了负载应用的列表。
  • server{}为虚拟主机配置
  • server_name为虚拟主机的IP或者域名,多个域名之间用空格隔开
  • listen为监听的端口
  • location / 表示监听80端口下面的所有请求
  • proxy_pass配置为:http + upstream名称

以上配置完成后,执行./nginx -t命令检测配置是否有错,再执行./ngin -s reload命令进行更新。

三、配置说明:

upstream按照轮询(默认)方式进行负载,每个请求按时间顺序逐一分配到不同的后端服务器,如果后端服务器down掉,能自动剔除。虽然这种方式简便、成本低廉。

但缺点是:可靠性低和负载分配不均衡。适用于图片服务器集群和纯静态页面服务器集群。

除此之外,upstream还有其它的分配策略,分别如下:

weight(权重) 指定轮询几率,weight和访问比率成正比,用于后端服务器性能不均的情况。如下所示,10.0.0.88的访问比率要比10.0.0.77的访问比率高一倍。

代码语言:javascript
复制

上游linuxidc { 
    server 10.0.0.77 weight = 5; 
    服务器10.0.0.88重量= 10; 
}
  • ip_hash(访问ip) 每个请求按访问ip的hash结果分配,这样每个访客固定访问一个后端服务器,可以解决session的问题。
代码语言:javascript
复制
上游favresin { 
   ip_hash; 
   server 10.0.0.10:8080; 
   server 10.0.0.11:8080; 
}
  • fair(第三方) 按后端服务器的响应时间来分配请求,响应时间短的优先分配。与weight分配策略类似。
代码语言:javascript
复制
upstream favresin {       
    server 10.0.0.10:8080; 
    server 10.0.0.11:8080; 
    公平; 
}

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

代码语言:javascript
复制
   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机器。所以这台机器压力会最轻。
代码语言:javascript
复制
上游bakend {#定义负载均衡设备的Ip及设备状态
    ip_hash; 
    服务器10.0.0.11:9090下来; 
    server 10.0.0.11:8080 weight = 2; 
    server 10.0.0.11:6060; 
    server 10.0.0.11:7070 backup; 
}
四、测试

访问http://192.168.31.154/dreyer-user-api/index.jsp

Paste_Image.png
Paste_Image.png
Paste_Image.png
Paste_Image.png

不断的刷新页面,我们会发现应用会在117和103之间随机切换,这表明通过Nginx来实现Tomcat应用的负载均衡目的达到。

五、附录实例

nginx.conf

代码语言:javascript
复制
#user www www; 
用户root; 
worker_processes 4; 
error_log logs / error.log; 
#error_log logs / error.log通知; 
#error_log logs / error.log info; 
pid logs / nginx.pid; 
事件{ 
    使用epoll; 
    worker_connections 40960; 
} #load 
modules编译为动态共享对象(DSO)
## 
delete {#load 
ngx_http_fastcgi_module.so; 
#load ngx_http_rewrite_module.so; 
#} 
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; 
    tcp_nodelay on; 
    types_hash_max_size 2048; 
    server_names_hash_max_size 512; 
    server_names_hash_bucket_size 128; 
    #keepalive_timeout 0; 
    keepalive_timeout 280; 
    gzip on; 
    gzip_comp_level 3; 
    gzip_types text / plain text / css text / javascript application / x-javascript application / javascript application / xml application / json; 
    client_header_buffer_size 128k; 
    large_client_header_buffers 4 256k;
    
    proxy_headers_hash_max_size 51200; 
    proxy_headers_hash_bucket_size 6400;     ##配置包含的文件信息    包括/opt/nginx/conf/tools/*.conf;     include /opt/nginx/sites-enabled/*.conf; }
    



在包含的文件信息中摘取几段

代码语言:javascript
复制
## dev-pay-api(单节点)
server { 
    listen 80; 
    server_name xxxx.cn; 
    location / { 
        proxy_pass http://172.16.xx.xx:8089 /; 
        add_header'Access-Control-Allow-Origin''*'; 
        add_header'Access-Control-Allow-Credentials''true'; 
        add_header'Access-Control-Allow-Methods''POST,GET,OPTIONS,PUT,DELETE'; 
        add_header'Access-Control-Allow-Headers''*,token'; 
        proxy_set_header主机$ http_host; 
        proxy_set_header Cookie $ http_cookie; 
        proxy_set_header X-Real-IP $ remote_addr; 
        proxy_set_header X-Forwarded-For $ proxy_add_x_forwarded_for;

        client_max_body_size 100m; 
    } 
}


上游qa_web_pay_api { 
    server 172.16.xx.xx:8089 weight = 3; ## qa-web-pay-api(双机负载均衡)
    server 172.16.xx.xx:8089 weight = 3; 
} 
server { 
    listen 80; 
    server_name xxxx.com; 
    location / { 
        proxy_pass http:// qa_web_pay_api /; 
        add_header'Access-Control-Allow-Origin''*'; 
        add_header'Access-Control-Allow-Credentials''true'; 
        add_header'Access-Control-Allow-Methods''POST,GET,OPTIONS,PUT,DELETE'; 
        add_header'Access-Control-Allow-Headers''*,token'; 
        proxy_set_header主机$ http_host; 
        proxy_set_header Cookie $ http_cookie;

        proxy_set_header X-Forwarded-For $ proxy_add_x_forwarded_for; 
        proxy_set_header X-Forwarded-Proto $ scheme; 
        client_max_body_size 100m; 
    } 
}

## test-web-b(前端代码,前后端分离的模式)
server { 
    listen 80; 
    server_name xxxx.com; 
    重写^(。*)$ https:// $ host $ 1 permanent; 
    location / { 
        root / usr / local / www / test-web-b; 
        try_files $ uri $ uri / /index.html = 404; 
    } 
}
本文参与 腾讯云自媒体分享计划,分享自作者个人站点/博客。
原始发表:2017-11-24,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 作者个人站点/博客 前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体分享计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • 一、环境准备
  • 二、修改配置文件nginx.conf
  • 三、配置说明:
  • 四、测试
  • 五、附录实例
相关产品与服务
负载均衡
负载均衡(Cloud Load Balancer,CLB)提供安全快捷的流量分发服务,访问流量经由 CLB 可以自动分配到云中的多台后端服务器上,扩展系统的服务能力并消除单点故障。负载均衡支持亿级连接和千万级并发,可轻松应对大流量访问,满足业务需求。
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档