https://www.cnblogs.com/linxizhifeng/p/7075325.htmlhtml
linux的nginx下安裝tengine的nginx_upstream_check_module模塊(linux心跳檢測服務切換)linux
1、ngx_http_proxy_module 模塊和ngx_http_upstream_module模塊(自帶)
嚴格來講,nginx自帶是沒有針對負載均衡後端節點的健康檢查的,可是能夠經過默認自帶的ngx_http_proxy_module 模塊和ngx_http_upstream_module模塊中的相關指令來完成當後端節點出現故障時,自動切換到健康節點來提供訪問。nginx
指定在何種狀況下一個失敗的請求應該被髮送到下一臺後端服務器git
error # 和後端服務器創建鏈接時,或者向後端服務器發送請求時,或者從後端服務器接收響應頭時,出現錯誤
timeout # 和後端服務器創建鏈接時,或者向後端服務器發送請求時,或者從後端服務器接收響應頭時,出現超時
invalid_header # 後端服務器返回空響應或者非法響應頭
http_500 # 後端服務器返回的響應狀態碼爲500
http_502 # 後端服務器返回的響應狀態碼爲502
http_503 # 後端服務器返回的響應狀態碼爲503
http_504 # 後端服務器返回的響應狀態碼爲504
http_404 # 後端服務器返回的響應狀態碼爲404
off # 中止將請求發送給下一臺後端服務器github
須要理解一點的是,只有在沒有向客戶端發送任何數據之前,將請求轉給下一臺後端服務器纔是可行的。也就是說,若是在傳輸響應到客戶端時出現錯誤或者超時,這類錯誤是不可能恢復的。後端
範例以下:服務器
http {
proxy_next_upstream http_502 http_504 http_404 error timeout invalid_header;
}cookie
ngx_http_upstream_module模塊中的server指令oracle
upstream name {
server 10.1.1.110:8080 max_fails=1 fail_timeout=10s;
server 10.1.1.122:8080 max_fails=1 fail_timeout=10s;
}負載均衡
參考文檔 http://www.iyunv.com/thread-38535-1-1.html
nginx_upstream_check_module-master 這個就是淘寶技術團隊開發的 nginx 模塊 ,經過它能夠用來檢測後端 realserver 的健康狀態。若是後端 realserver 不可用,則因此的請求就不會轉發到該節點上。
下載地址 https://codeload.github.com/yaow ... k_module/zip/master
解壓 ZIP包 跟 nginx
隱藏版本信息
sed -i -e 's/1.6.2/2.0/g' -e 's/nginx\//LXS/g' -e 's/"NGINX"/"LXS"/g' src/core/nginx.h
給nginx打補丁(根據nginx版本號選擇補丁包)
patch -p1 < ../nginx_upstream_check_module-master/check_1.5.12+.patch
編譯參數
./configure --user=www --group=www --prefix=/usr/local/nginx1 --with-pcre=/root/pcre-8.40/ --with-http_stub_status_module --with-http_ssl_module --with-openssl=/root/openssl-1.0.2l/ --add-module=../nginx_upstream_check_module-master/
make
PCRE openssl路徑都是源碼包解壓路徑而不是編譯後路徑
平滑升級
mv /usr/local/nginx1/sbin/nginx /usr/local//nginx1/sbin/nginx.old (備份舊版本)
cp objs/nginx /usr/local/nginx1/sbin/ (拷貝新版本)
檢測配置文件
平滑重啓升級nginx
kill -USR2 `cat /usr/local/nginx1/logs/nginx.pid`
多了2個進程 通過一段時間後會生成oldbin
舊版本Nginx的pid變爲oldbin,這是舊版本和新版本的nginx同時運行,過一段時間等就nginx處理完用戶請求後,執行下面操做
從容關閉舊版本的Nginx進程
kill -WINCH `cat /usr/local/nginx/logs/nginx.pid.oldbin`
慢慢舊的工做進程就都會隨着任務執行完畢而退出,新版的Nginx的工做進程會逐漸取代舊版 工做進程
決定升級到新版的nginx
kill -QUIT `cat /usr/local/nginx1/logs/nginx.pid.oldbin` ##關閉舊版nginx
以後在nginx.conf配置文件裏面的upstream加入健康檢查,以下:
upstream linuxyan {
server 192.168.10.21:80;
server 192.168.10.22:80;
check interval=3000 rise=2 fall=5 timeout=1000;
}
interval檢測間隔時間,單位爲毫秒,rsie請求2次正常的話,標記此realserver的狀態爲up,fall表示請求5次都失敗的狀況下,標記此realserver的狀態爲down,timeout爲超時時間,單位爲毫秒。
在server段裏面能夠加入查看realserver狀態的頁面
location /nstatus {
check_status;
access_log off;
#allow SOME.IP.ADD.RESS;
#deny all;
}
生產編譯參數
nginx version: nginx/1.8.0
built by gcc 4.4.7 20120313 (Red Hat 4.4.7-4) (GCC)
built with OpenSSL 1.0.1e-fips 11 Feb 2013
TLS SNI support enabled
configure arguments: --prefix=/opt/oracle/nginx --error-log-path=/opt/log/nginx/logs/error.log --http-log-path=/opt/log/nginx/logs/access.log --pid-path=/opt/log/nginx/logs/nginx.pid --lock-path=/opt/log/nginx/logs/nginx.lock --user=oracle --group=oinstall --http-client-body-temp-path=/opt/oracle/nginx/temp/nginx_clientbody_temp --http-proxy-temp-path=/opt/oracle/nginx/temp/nginx_proxy_temp --http-fastcgi-temp-path=/opt/oracle/nginx/temp/nginx_fcgi_temp --http-uwsgi-temp-path=/opt/oracle/nginx/temp/nginx_wsgi_temp --with-http_ssl_module --with-http_realip_module --with-http_stub_status_module --with-http_sub_module --with-http_gunzip_module --without-http_userid_module --without-http_browser_module --without-http_geo_module --without-http_autoindex_module --without-http_scgi_module --without-http_memcached_module --without-http_auth_basic_module --add-module=../ngx_devel_kit-0.2.19 --add-module=../headers-more-nginx-module-0.261 --add-module=../nginx-goodies-nginx-sticky-module-ng-c78b7dd79d0d
ngx_headers_more 用於添加、設置和清除輸入和輸出的頭信息,該模塊是ngx_http_headers_module模塊的加強版,提供了更多的實用工具,好比復位或清除內置頭信息
nginx-sticky-module這個第三方模塊能夠基於cookie實現會話保持
NDK(nginx development kit)模塊是一個拓展nginx服務器核心功能的模塊,第三方模塊開發能夠基於它來快速實現
車聯
--with-http_ssl_module --with-pcre --with-http_stub_status_module --with-stream --with-openssl=/root/openssl --with-pcre=/root/pcre --with-http_v2_module --with-zlib=/root/zlib