Nginx-防止負載過高模塊sysguard

如果nginx被***或者訪問量突然變大,nginx會因爲負載變高或者內存不夠用導致服務器宕機,最終導致站點無法訪問。今天要談到的解決方法來自淘寶開發的模塊nginx-http-sysguard,主要用於當負載和內存達到一定的閥值之時,會執行相應的動作,比如直接返回503,504或者其他的.一直等到內存或者負載回到閥值的範圍內,站點恢復可用。簡單的說,這幾個模塊是讓nginx有個緩衝時間,緩緩。
一、安裝
附件中下載nginx-1.4.1,把擴展名改爲.tar.gz
tar -zxvf nginx-1.4.1.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
cd nignx-1.4.1
patch -p1 < ../nginx-http-sysguard-master/nginx_sysguard_1.3.9.patch
如果之前安裝過nginx,可以nginx -V查看安裝命令,然後再次安裝並增加--add-module=../nginx-http-sysguard模塊

make && make install

二、解釋

sysguard指令
語法: sysguard [on |off]
默認值: sysguard off
配置段: http, server,location
開關模塊

語法: sysguard_loadload=number [action=/url]
默認值: none
配置段: http, server,location
指定負載閥值,當系統的負載超過這個值,所有的請求都會被重定向到action定義的uri請求中.如果沒有定義URL action沒有定義,那麼服務器直接返回503

語法: sysguard_memswapratio=ratio% [action=/url]
默認值: none
配置段: http, server,location
定義交換分區使用的閥值,如果交換分區使用超過這個閥值,那麼後續的請求全部被重定向到action定義的uri請求中.如果沒有定義URL action沒有定義,那麼服務器直接返回503

語法: sysguard_intervaltime
默認值: sysguard_interval1s
配置段: http, server,location
定義系統信息更新的頻率,默認1.

語法:sysguard_log_level info | notice | warn | error
默認值:sysguard_log_level error
配置段: http, server,location
定義sysguard的日誌級別

三、配置
server段增加:

sysguard on;

# 爲了方便測試,load閥值爲0.01(表示的是load average: 最左邊的值),平時正常都在cpu核數左右。

sysguard_loadload=0.01 action=/loadlimit;

sysguard_memswapratio=20% action=/swaplimit;

location /loadlimit {

return 404;
#這裏便於測試定義404錯誤;

}

location /swaplimit {

return 503;

}
四、測試
通過webbench讓本機負載增高,打開頁面會發現出現404錯誤。
五、總結
nginxrealserver的情況下,個人也比較推薦使用這種方法,如果服務器負載一旦爬高,一般要比較長的時間才能恢復到正常水平,在採用這個插件的情況下,負載達到閥值,nginx返回503,前段使用故障轉移將請求發往其他服務器,這臺服務器在無訪問的情況下,便能很快的恢復到正常水平,並且能夠立即投入工作。超過閥值的服務器處理請求速度也會大打折扣,使用這個模塊,巧妙的將請求發送到了更快速的服務器上,在一定程度上避免了訪問速度慢的問題. 前面說的是在集羣環境下,在單點環境下,用不用大家斟酌一下。



發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章