详解Nginx服务器中配置Sysguard模块预防高负载的方案

2019-10-17 19:40:20王冬梅

语法:

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.jb51.net www.heytool.com;
  access_log /data/logs/nginx/www.jb51.net.access.log main;
 
  index index.html index.php index.html;
  root /data/site/www.jb51.net;
 
  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.jb51.net
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.jb51.net
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,前段使用故障转移将请求发往其他服务器,这台服务器在无访问的情况下,便能很快的恢复到正常水平,并且能够立即投入工作。超过阀值的服务器处理请求速度也会大打折扣,使用这个模块,巧妙的将请求发送到了更快速的服务器上,在一定程度上避免了访问速度慢的问题. 前面说的是在集群环境下,在单点环境下,用不用大家斟酌一下。