为什么80%的码农都做不了架构师?>>>   

如果nginx被攻击或者访问量突然变大,nginx会因为负载变高或者内存不够用导致服务器宕机,最终导致站点无法访问。今天要谈到的解决方法来 自淘宝开发的模块nginx-http-sysguard,主要用于当负载和内存达到一定的阀值之时,会执行相应的动作,比如直接返回503,504或者 其他的.一直等到内存或者负载回到阀值的范围内,站点恢复可用。简单的说,这几个模块是让nginx有个缓冲时间,缓缓.

1. 安装nginx sysguard模块

1.1 下载文件

# wget http://nginx.org/download/nginx-1.4.2.tar.gz
# wget https://github.com/alibaba/nginx-http-sysguard/archive/master.zip \
-O nginx-http-sysguard-master.zip
# unzip nginx-http-sysguard-master.zip
# tar -xzvf nginx-1.4.2.tar.gz

1.2 打sysgrard补丁
这边没找到nginx-1.4.2对应的补丁,只有1.2.9和1.3.9的,索性试试1.3.9的吧,应该差不多.

# cd nginx-1.4.2
# patch -p1 < ../nginx-http-sysguard-master/nginx_sysguard_1.3.9.patch

1.3 安装nginx

# ./configure --prefix=/usr/local/nginx-1.4.2 \
--with-http_stub_status_module --add-module=../nginx-http-sysguard
# make
# make install

2. sysguard指令
语法: sysguard [on | off]
默认值: sysguard off
配置段: http, server, location
开关模块

语法: sysguard_load load=number [action=/url]
默认值: none
配置段: http, server, location
指定负载阀值,当系统的负载超过这个值,所有的请求都会被重定向到action定义的uri请求中.如果没有定义URL action没有定义,那么服务器直接返回503

语法: sysguard_mem swapratio=ratio% [action=/url]
默认值: none
配置段: http, server, location
定义交换分区使用的阀值,如果交换分区使用超过这个阀值,那么后续的请求全部被重定向到action定义的uri请求中.如果没有定义URL action没有定义,那么服务器直接返回503

语法: sysguard_interval time
默认值: sysguard_interval 1s
配置段: http, server, location
定义系统信息更新的频率,默认1秒.

语法: sysguard_log_level info | notice | warn | error
默认值: sysguard_log_level error
配置段: http, server, location
定义sysguard的日志级别

3. sysguard使用实例
3.1 nginx配置

server {listen       80;server_name  www.ttlsa.com www.heytool.com;access_log  /data/logs/nginx/www.ttlsa.com.access.log  main;index index.html index.php index.html;root /data/site/www.ttlsa.com;sysguard on;# 为了方便测试,load阀值为0.01,平时大家一般都在5或10+sysguard_load load=0.01 action=/loadlimit; sysguard_mem swapratio=20% action=/swaplimit;location / {}location /loadlimit {return 503;}location /swaplimit {return 503;}
}

3.2 测试
负载OK的情况下,访问nginx

# uptime 16:23:37 up 6 days,  8:04,  2 users,  load average: 0.00, 0.01, 0.05
# curl -I www.ttlsa.com
HTTP/1.1 403 Forbidden
Server: nginx
Date: Thu, 03 Oct 2013 16:27:13 GMT
Content-Type: text/html
Content-Length: 162
Connection: keep-alive

因为站点下没有文件,所以返回了403,实际上没关系.

负载超过阀值的情况下,访问nginx

# uptime 16:25:59 up 6 days,  8:06,  2 users,  load average: 0.05, 0.04, 0.05
# curl -I www.ttlsa.com
HTTP/1.1 503 Service Temporarily Unavailable
Server: nginx
Date: Thu, 03 Oct 2013 16:26:19 GMT
Content-Type: text/html
Content-Length: 206
Connection: keep-alive

swap超过阀值的功能我就不再测试了。大家回家可以自己动手测试一下.

结束语
在nginx是realserver的情况下,个人也比较推荐使用这种方法,如果服务器负载一旦爬高,一般要比较长的时间才能恢复到正常水平,在采用这个 插件的情况下,负载达到阀值,nginx返回503,前段使用故障转移将请求发往其他服务器,这台服务器在无访问的情况下,便能很快的恢复到正常水平,并 且能够立即投入工作。超过阀值的服务器处理请求速度也会大打折扣,使用这个模块,巧妙的将请求发送到了更快速的服务器上,在一定程度上避免了访问速度慢的 问题. 前面说的是在集群环境下,在单点环境下,用不用大家斟酌一下。

参考文章:
nginx-http-sysguard:https://github.com/alibaba/nginx-http-sysguard
TCP Proxy:https://github.com/yaoweibin/nginx_tcp_proxy_module (相同功能软件)
原文:http://www.ttlsa.com/html/3299.html

转载请注明来之运维生存时间: http://www.ttlsa.com/html/3299.html

转载于:https://my.oschina.net/766/blog/168536

nginx防止高负载的解决方案(sysgurad模块)相关推荐

  1. 高并发高负载系统架构

    本文作者在Cernet做过拨号接入平台的搭建,而后在Yahoo3721负载搜索引擎前端平台开发,又在猫扑处理过大型社区猫扑大杂烩的架构升级等工作,同时自己接触和开发过不少大中型网站的模块,因此在大型网 ...

  2. Nginx 反向代理 负载均衡 动静分离 高可用 原理

    1.Nginx简介 1.1 概述 Nginx ("engine x") 是一个高性能的 HTTP 和 反向代理服务器,特点是占有内存少,并发能力强,能经受高负载的考验,有报告表明能 ...

  3. Nginx学习之负载均衡fair模块

    2019独角兽企业重金招聘Python工程师标准>>> Nginx学习之负载均衡fair模块 2017-04-10 20:27 写在开始 前面对Nginx的三种负载均衡实现做了一个简 ...

  4. web应用的负载均衡、集群、高可用(HA)解决方案

    web应用的负载均衡.集群.高可用(HA)解决方案 参考文章: (1)web应用的负载均衡.集群.高可用(HA)解决方案 (2)https://www.cnblogs.com/huojg-21442/ ...

  5. 分布式架构高可用架构篇_04_Keepalived+Nginx实现高可用Web负载均衡

    一.场景需求 二.Keepalived 简要介绍 Keepalived 是一种高性能的服务器高可用或热备解决方案,Keepalived 可以用来防止服务器单点故障的发生,通过配合 Nginx 可以实现 ...

  6. 浅谈web应用的负载均衡、集群、高可用(HA)解决方案

    浅谈web应用的负载均衡.集群.高可用(HA)解决方案 转载于:https://www.cnblogs.com/hfultrastrong/p/7887420.html

  7. keep老是显示服务器开小差,nginx+keepalived高可用服务器宕机解决方案

    原标题:nginx+keepalived高可用服务器宕机解决方案 1.基本服务器宕机的主从切换配置 两台nginx服务器,分别安装keepalived,配置/etc/keepalived/keepal ...

  8. 【java】 java 高并发解决方案和高负载优化方法

    [java] java 高并发解决方案和高负载优化方法 参考文章: (1)[java] java 高并发解决方案和高负载优化方法 (2)https://www.cnblogs.com/lonelywo ...

  9. Windows上实现nginx的多负载,实现高可用,NLB 替代keepalived

    NLB 就是网络负载平衡,windows Server 2012 中该功能允许你将传入的请求传播到最多达32台的服务器上,即可以使用最多32台服务器共同分担对外的网络请求服务.网络负载平衡,保证即使是 ...

最新文章

  1. 干货丨机器学习?人工智能?还在傻傻分不清楚?
  2. MicroPython技术及应用定义
  3. 无记忆多项式数字预失真技术
  4. C++:控制台程序弹出消息框
  5. php按每小时显示数据,mysql-PHP按某月统计每个小时生成的数据
  6. 2022年十大科技应用趋势 | 万字报告PDF
  7. spring boot rabbitmq_Spring Boot2(十):RabbitMQ 详解
  8. HTTP、SSL/TSL、HTTPS、TCP、UDP
  9. 安装PetShop后调试的诸多问题
  10. 1.swt/rap学习源码网址
  11. 【数字信号】基于matlab GUI虚拟信号发生器(各种波形)【含Matlab源码 271期】
  12. 最优化理论与算法期末试题_最优化原理和方法试题答案.doc
  13. mysql2000卸载_如何卸载mysql 图文教程教你完全卸载mysql数据库
  14. typeScript构建失败:Non-string value passed to `ts.resolveTypeReferenceDirective`
  15. 2018年总——不忘初心
  16. 页错误处理 Page Fault Handling
  17. SQL经典短小代码收集
  18. android ram rom测试工具,RAM与ROM测试方法
  19. 数据库系统:第二章关系数据库
  20. 爬取起点中文网小说介绍信息

热门文章

  1. 国服被ban咋看_王者荣耀:赵云不会玩?完美详细攻略教学,看完助你轻松上王者...
  2. python中copy怎么用_python中的拷贝copy模块怎么使用?
  3. matlab 双边沿滤波,图片漫画效果(DoG算子和双边滤波)
  4. 14、四大组件--Service
  5. 计算机科学中抽象的好处与问题—伪共享等实例分析
  6. Swift数组扩容原理
  7. 基于TableStore的数据采集分析系统介绍
  8. SQL语句-exec执行
  9. 《HTML、CSS、JavaScript 网页制作从入门到精通》——6.6 单元格属性
  10. 更改android AVD模拟器创建路径位置的方法