免费注册 查看新帖 |

Chinaunix

  平台 论坛 博客 文库
1234下一页
最近访问板块 发新帖
查看: 49609 | 回复: 39
打印 上一主题 下一主题

海量运维常用技术之--Nginx网站负载均衡应用 [复制链接]

论坛徽章:
49
15-16赛季CBA联赛之福建
日期:2016-06-22 16:22:002015年亚洲杯之中国
日期:2015-01-23 16:25:12丑牛
日期:2015-01-20 09:39:23未羊
日期:2015-01-14 23:55:57巳蛇
日期:2015-01-06 18:21:36双鱼座
日期:2015-01-02 22:04:33午马
日期:2014-11-25 09:58:35辰龙
日期:2014-11-18 10:40:07寅虎
日期:2014-11-13 22:47:15申猴
日期:2014-10-22 15:29:50摩羯座
日期:2014-08-27 10:49:43辰龙
日期:2014-08-21 10:47:58
跳转到指定楼层
1 [收藏(0)] [报告]
发表于 2013-08-20 08:56 |只看该作者 |倒序浏览
现在随着Nginx的普及,越来越大的网站开始应用Nginx了。Nginx不仅是一款用于高并发环境的Web应用服务器软件,它同时也是优划的负载均衡软件,它的优点也有很多:成本低廉、配置简单、强大的正则分发规则、对网络依赖极小,此外,稳定性也是它值得骄傲的地方。此外,Nginx+Keepalived作为很成熟的高可用集群架构方案,也越来越被大家熟悉和采用,更让人惊讶的是,Nginx还可以作为缓存反向代理软件,提供缓存加速功能,功能并不亚于老牌的Squid软件,也有许多朋友在做其相关对比测试。不过Nginx只能做为七层负载均衡,对于四层的流量负载均衡,它是无能为力的。

活动组织:
余洪春(抚琴煮酒)《构建高可用Linux服务器(第1-2版)》一书作者,系统架构师,ChinaUnix集群和高可用版版主。

本期话题:
话题1:除去Nginx以上的优点,你还能列举其更多的优点或缺点吗?
话题2:你维护的网站,目前采用的是哪一种缓存软件,Varnish、Squid还是Nginx?
话题3: 以真实案例来说明Nginx在其工作中的应用

活动时间:2013.8.19——2013.9.10

邀请嘉宾:
老男孩 (老男孩linux培训)老男孩Linux实战运维培训中心总裁
周华飞 北京弘睿千里信息技术有限公司认证部经理
崔晓辉( coralzd )  大众网高级系统管理员
刘晗昭(wenzizone)  高级架构师
胡安伟(king_819)   系统运维主管,CU自动化运维版版主
刘鑫 (gray1982)    高级系统运维工程师,CU集群和高可用版版主
余洪春(抚琴煮酒)   资深项目实施工程师、系统架构师

活动礼品:
积极参与话题讨论的10位CUer,可获得《构建高可用Linux服务器(第2版)》图书一本


论坛徽章:
21
白羊座
日期:2013-08-23 15:49:17金牛座
日期:2013-10-08 17:00:03处女座
日期:2013-10-12 11:54:11CU十二周年纪念徽章
日期:2013-10-24 15:41:34午马
日期:2013-11-27 14:07:21巨蟹座
日期:2013-12-04 10:56:03水瓶座
日期:2013-12-04 15:58:00亥猪
日期:2014-05-24 16:02:3115-16赛季CBA联赛之辽宁
日期:2016-11-07 13:52:53戌狗
日期:2013-08-23 16:15:31白羊座
日期:2013-08-24 21:59:24巨蟹座
日期:2013-08-25 16:34:24
2 [报告]
发表于 2013-08-20 09:07 |只看该作者
这本书已买了,就不和大家抢了。

论坛徽章:
17
戌狗
日期:2013-09-02 23:43:02技术图书徽章
日期:2014-04-29 14:16:02技术图书徽章
日期:2014-04-24 15:51:26未羊
日期:2014-04-06 22:10:30丑牛
日期:2014-04-06 21:23:29辰龙
日期:2014-04-06 21:20:22处女座
日期:2014-04-06 21:16:18技术图书徽章
日期:2014-04-02 15:10:51金牛座
日期:2014-03-10 22:26:18巨蟹座
日期:2014-02-17 17:12:12技术图书徽章
日期:2014-01-24 10:38:43摩羯座
日期:2013-11-29 18:00:18
3 [报告]
发表于 2013-08-20 09:52 |只看该作者
本帖最后由 jimmy-_-lixw 于 2014-04-06 21:36 编辑

提示: 内容被隐藏或删除 内容自动屏蔽

论坛徽章:
49
15-16赛季CBA联赛之福建
日期:2016-06-22 16:22:002015年亚洲杯之中国
日期:2015-01-23 16:25:12丑牛
日期:2015-01-20 09:39:23未羊
日期:2015-01-14 23:55:57巳蛇
日期:2015-01-06 18:21:36双鱼座
日期:2015-01-02 22:04:33午马
日期:2014-11-25 09:58:35辰龙
日期:2014-11-18 10:40:07寅虎
日期:2014-11-13 22:47:15申猴
日期:2014-10-22 15:29:50摩羯座
日期:2014-08-27 10:49:43辰龙
日期:2014-08-21 10:47:58
4 [报告]
发表于 2013-08-20 09:54 |只看该作者
jimmy-_-lixw 发表于 2013-08-20 09:52
回复 1# send_linux


哈哈,主要是版主对这方面的议题很有兴趣啊,上期是haproxy,这期是nginx哈,这样以后就能形成系列了

论坛徽章:
381
CU十二周年纪念徽章
日期:2014-01-04 22:46:58CU大牛徽章
日期:2013-03-13 15:32:35CU大牛徽章
日期:2013-03-13 15:38:15CU大牛徽章
日期:2013-03-13 15:38:52CU大牛徽章
日期:2013-03-14 14:08:55CU大牛徽章
日期:2013-04-17 11:17:19CU大牛徽章
日期:2013-04-17 11:17:32CU大牛徽章
日期:2013-04-17 11:17:37CU大牛徽章
日期:2013-04-17 11:17:42CU大牛徽章
日期:2013-04-17 11:17:47CU大牛徽章
日期:2013-04-17 11:17:52CU大牛徽章
日期:2013-04-17 11:17:56
5 [报告]
发表于 2013-08-20 09:57 |只看该作者
支持下send_linux

1.nginx的内存占用,epoll模型应该算是优点吧

2.目前采用的是nginx做反向代理/负载均衡

3.实际的配置:
  1. upstream mysvr {
  2.          ip_hash;
  3.          server 192.168.5.103:80  max_fails=2 fail_timeout=30s;
  4.          server 192.168.5.104:80  max_fails=2 fail_timeout=30s;
  5.          server 192.168.5.90:80  max_fails=2 fail_timeout=30s;
  6.          check interval=3000 rise=2 fall=5 timeout=1000;
  7.      }
  8. server {
  9.         listen       80;
  10.     #    listen       somename:8080;
  11.     #    server_name  somename  alias  another.alias;

  12.         location / {
  13.           proxy_pass        http://mysvr/;
  14.           proxy_set_header  X-Real-IP  $remote_addr;
  15.           proxy_set_header Host $host;
  16.           proxy_set_header X-Real-IP $remote_addr;
  17.           proxy_set_header REMOTE-HOST $remote_addr;
  18.           proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
  19.           client_max_body_size 50m;
  20.           client_body_buffer_size 256k;
  21.           proxy_connect_timeout 30;
  22.           proxy_send_timeout 30;
  23.           proxy_read_timeout 60;
  24.           proxy_buffer_size 256k;
  25.           proxy_buffers 4 256k;
  26.           proxy_busy_buffers_size 256k;
  27.           proxy_temp_file_write_size 256k;
  28.           proxy_next_upstream error timeout invalid_header http_500 http_503 http_404;
  29.           proxy_max_temp_file_size 128m;
  30.           proxy_cache tmpcache;
  31.           proxy_cache_key               $uri$is_args$args;
  32.           proxy_cache_valid  200 1d;
  33.           proxy_cache_use_stale  error timeout invalid_header updating
  34.                                    http_500 http_502 http_503 http_504;
  35.         }
  36. location /nginx_status {
  37.   # copied from http://blog.kovyrin.net/2006/04/29/monitoring-nginx-with-rrdtool/
  38.      stub_status on;
  39.        access_log   off;
  40.          allow 192.168.1.1;
  41.            deny all;
  42.            }

  43. location ~ /purge(/.*) {
  44.         allow                   192.168.1.1;
  45.        deny                    all;
  46.         proxy_cache_purge       STATIC   $1$is_args$args;
  47. }

  48. location /nstatus {
  49.                 check_status;
  50.                 access_log   off;
  51.                 allow 192.168.1.1;
  52.                 deny all;
  53.            }
  54. }
复制代码

论坛徽章:
0
6 [报告]
发表于 2013-08-20 10:00 |只看该作者
本帖最后由 xueleixu 于 2013-08-20 10:02 编辑

web开发过程中,大家肯定需要配置不同的域名来区分正式环境和测试环境,那么这个时候就有个问题,就是那些已经写在了静态文件(html、js、css)中的链接。
大家基本会选择2种方式
(1)在测试环境中需要改成测试环境的域名,而当程序发布到正式环境的时候又要修改这些静态文件中链接中的域名。
          缺点:费时费力,稍有不注意,就会有漏网之鱼。
(2)另外一种就是配置客户端的hosts映射。
          缺点:测试的时候,忘记修改hosts,往往会导致测试的目标环境不清楚,即本想访问测试环境的,结果却访问到了正式环境;本想访问正式环境,却访问测试环境了。

下面是我使用Nginx中的HttpSubModule模块和第三方的substitutions4nginx模块,来替换静态文件中的url,来实现上面的需求
HttpSubModule,不支持正则表达式,只能配置一条命令 http://wiki.nginx.org/NginxHttpSubModule
substitutions4nginx 支持正则表达式,可以配置多条命令 https://code.google.com/p/substitutions4nginx/

通过这种方式非常好用,开发只需要关注正式环境使用的域名,而在测试环境中的链接都是使用Nginx中的这个功能来替换。这样程序不需要任何修改(二进制文件是不能替换的,例如asp.net。)就可以部署到测试和正式环境中。


以上情况是在有多个域名站点的时候才会用到。如果所有程序都是用一个域名,本身就没有上面的烦恼,只需要使用相对路径就可以了。呵呵!


其实上面的HttpSubModule模块和第三方的substitutions4nginx模块,大家都不陌生,只是大家更多的应用在偷站方面。希望楼下分享更多更好的应用!

论坛徽章:
0
7 [报告]
发表于 2013-08-20 10:16 |只看该作者
用nginx做web服务器也快3年了,从nginx0.7.x就开始用,一直延续到现在的nginx1.2.x的版本。
缓存这块一开始是用varnish,现在在逐步往ATS(Apache Traffic Server)上迁移
Varnish这块的配置可以给大家show一下(环境:CentOS5.6)
sysctl.conf的配置肯定是不可少的
  1. net.ipv4.ip_local_port_range = 1024 65536
  2. net.core.rmem_max=16777216
  3. net.core.wmem_max=16777216
  4. net.ipv4.tcp_rmem=4096 87380 16777216
  5. net.ipv4.tcp_wmem=4096 65536 16777216
  6. net.ipv4.tcp_fin_timeout = 30
  7. net.ipv4.tcp_keepalive_time = 300
  8. net.ipv4.tcp_tw_recycle = 1
  9. net.core.netdev_max_backlog = 30000
  10. net.ipv4.tcp_no_metrics_save=1
  11. net.core.somaxconn = 262144
  12. net.ipv4.tcp_syncookies = 0
  13. net.ipv4.tcp_max_orphans = 262144
  14. net.ipv4.tcp_max_syn_backlog = 262144
  15. net.ipv4.tcp_synack_retries = 2
  16. net.ipv4.tcp_syn_retries = 2
复制代码
varnish版本:2.0.2

  1. backend core_ahosting_com
  2. {
  3.     .host = "1.1.1.1"  ;
  4.     .port = "80";
  5.     .probe = {
  6.         .url = "http://www.ahosting.com/do_not_delete/noc.gif";
  7.         .interval  = 5s ;
  8.         .timeout   = 2s ;
  9.         .window    = 5 ;
  10.         .threshold = 3 ;
  11.     }
  12. }

  13. acl purge
  14. {
  15.     "localhost";
  16.     "127.0.0.1";
  17.     "1.1.1.1";
  18.     "2.2.2.2.";
  19. }

  20. if (req.http.host ~ "ahosting.com")
  21.     {
  22.         if (req.url ~ "\.php")
  23.         {
  24.             return(pass);
  25.         }
  26.         elsif (beresp.ttl <= 0s || beresp.http.Vary == "*")
  27.         {
  28.             set beresp.ttl = 12h;
  29.         }
  30.     }
  31.     elsif (beresp.ttl < 12h || beresp.http.Vary == "*")
  32.     {
  33.         set beresp.ttl = 12h;
  34.     }
  35. }

  36.     if (req.request == "GET" || req.request == "HEAD") {
  37.         return (lookup);
  38.     }
  39.     else {
  40.         return (pipe);
  41.     }
  42.     if (! req.backend.healthy)
  43.     {
  44.         set req.grace=3d;
  45.     } else {
  46.         set req.grace=1m;
  47.     }
  48. }

  49. sub vcl_fetch
  50. {
  51.     if (beresp.status == 500 || beresp.status == 502 || beresp.status == 503)
  52.     {
  53.         set beresp.saintmode=1m;
  54.         restart;
  55.     }

  56.     set beresp.grace = 3d ;

  57.     if (beresp.http.set-Cookie)
  58.     {
  59.         return(pass);
  60.     }
  61. sub vcl_error {
  62.         set obj.http.Content-Type = "text/html; charset=utf-8";
  63.         synthetic {"
  64.         <?xml version="1.0" encoding="utf-8"?>
  65.         <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">
  66.         <html>
  67.         <head>
  68.         <title>"} obj.status " " obj.response {"</title>
  69.         </head><body>
  70.         <h1>Error "} obj.status " " obj.response {"</h1>
  71.         <p>"} obj.response {"</p>
  72.         <h3>Guru Meditation:</h3>
  73.         <p>XID: "} req.xid {"</p>
  74.         <hr>
  75.         <address>
  76.         <a href="http://www.varnish-cache.com/">varnish cache server</a>
  77.         </address>
  78.         </body>
  79.         </html>
  80.         "};
  81.         return (deliver);
  82. }

复制代码

论坛徽章:
16
IT运维版块每日发帖之星
日期:2015-08-24 06:20:00综合交流区版块每日发帖之星
日期:2015-10-14 06:20:00IT运维版块每日发帖之星
日期:2015-10-25 06:20:00IT运维版块每日发帖之星
日期:2015-11-06 06:20:00IT运维版块每日发帖之星
日期:2015-12-10 06:20:00平安夜徽章
日期:2015-12-26 00:06:302016猴年福章徽章
日期:2016-02-18 15:30:34IT运维版块每日发帖之星
日期:2016-04-15 06:20:00IT运维版块每日发帖之星
日期:2016-05-21 06:20:00综合交流区版块每日发帖之星
日期:2016-08-16 06:20:002015七夕节徽章
日期:2015-08-21 11:06:17IT运维版块每日发帖之星
日期:2015-08-14 06:20:00
8 [报告]
发表于 2013-08-20 10:37 |只看该作者
mark.顶一下。

论坛徽章:
5
技术图书徽章
日期:2013-08-27 10:03:49CU大牛徽章
日期:2013-09-18 15:16:55CU大牛徽章
日期:2013-09-18 15:18:22CU大牛徽章
日期:2013-09-18 15:18:43技术图书徽章
日期:2014-04-24 15:51:26
9 [报告]
发表于 2013-08-20 12:02 |只看该作者
楼主有空把张宴请过来聊聊啊!

论坛徽章:
6
丑牛
日期:2013-09-17 00:18:40未羊
日期:2013-10-31 12:10:47午马
日期:2013-12-07 01:58:50水瓶座
日期:2013-12-24 22:43:12水瓶座
日期:2014-03-15 21:12:13操作系统版块每日发帖之星
日期:2016-08-07 06:20:00
10 [报告]
发表于 2013-08-20 14:11 |只看该作者
提示: 作者被禁止或删除 内容自动屏蔽
您需要登录后才可以回帖 登录 | 注册

本版积分规则 发表回复

  

北京盛拓优讯信息技术有限公司. 版权所有 京ICP备16024965号-6 北京市公安局海淀分局网监中心备案编号:11010802020122 niuxiaotong@pcpop.com 17352615567
未成年举报专区
中国互联网协会会员  联系我们:huangweiwei@itpub.net
感谢所有关心和支持过ChinaUnix的朋友们 转载本站内容请注明原作者名及出处

清除 Cookies - ChinaUnix - Archiver - WAP - TOP