該子產品可以為Tengine提供主動式後端伺服器健康檢查的功能。
該子產品在Tengine-1.4.0版本以前沒有預設開啟,它可以在配置編譯選項的時候開啟:<code>./configure --with-http_upstream_check_module</code>
編輯/etc/nginx/nginx.conf
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
<code>http {</code>
<code> </code><code>upstream cluster1 {</code>
<code> </code><code># simple round-robin</code>
<code> </code><code>server 192.168.30.116:80;</code>
<code> </code><code>#server 192.168.0.2:80;</code>
<code> </code><code>check interval=3000 rise=2 fall=5 timeout=1000 </code><code>type</code><code>=http;</code>
<code> </code><code>check_http_send </code><code>"HEAD / HTTP/1.0\r\n\r\n"</code><code>;</code>
<code> </code><code>check_http_expect_alive http_2xx http_3xx;</code>
<code> </code><code>}</code>
<code> </code><code>upstream cluster2 {</code>
<code> </code><code>server 192.168.30.113:80;</code>
<code> </code><code>server 192.168.30.114:80;</code>
<code> </code><code>check_keepalive_requests 100;</code>
<code> </code><code>check_http_send </code><code>"HEAD / HTTP/1.1\r\nConnection: keep-alive\r\n\r\n"</code><code>;</code>
<code> </code><code>server {</code>
<code> </code><code>listen 80;</code>
<code> </code><code>location </code><code>/1</code> <code>{</code>
<code> </code><code>proxy_pass http:</code><code>//cluster1</code><code>;</code>
<code> </code><code>}</code>
<code> </code><code>location </code><code>/2</code> <code>{</code>
<code> </code><code>proxy_pass http:</code><code>//cluster2</code><code>;</code>
<code> </code><code>location </code><code>/status</code> <code>{</code>
<code> </code><code>check_status;</code>
<code> </code><code>access_log off;</code>
<code> </code><code>allow SOME.IP.ADD.RESS;</code>
<code> </code><code>deny all;</code>
<code>}</code>
<code>指令後面的參數意義是:</code>
<code>interval:向後端發送的健康檢查包的間隔。</code>
<code>fall(fall_count): 如果連續失敗次數達到fall_count,伺服器就被認為是down。</code>
<code>rise(rise_count): 如果連續成功次數達到rise_count,伺服器就被認為是up。</code>
<code>timeout: 後端健康請求的逾時時間。</code>
<code>default_down: 設定初始時伺服器的狀态,如果是</code><code>true</code><code>,就說明預設是down的,如果是</code><code>false</code><code>,就是up的。預設值是</code><code>true</code><code>,也就是一開始伺服器認為是不可用,要等健康檢查包達到一定成功次數以後才會被認為是健康的。</code>
<code>type</code><code>:健康檢查包的類型,現在支援以下多種類型</code>
<code>tcp:簡單的tcp連接配接,如果連接配接成功,就說明後端正常。</code>
<code>ssl_hello:發送一個初始的SSL hello包并接受伺服器的SSL hello包。</code>
<code>http:發送HTTP請求,通過後端的回複包的狀态來判斷後端是否存活。</code>
<code>mysql: 向mysql伺服器連接配接,通過接收伺服器的greeting包來判斷後端是否存活。</code>
<code>ajp:向後端發送AJP協定的Cping包,通過接收Cpong包來判斷後端是否存活。</code>
<code>port: 指定後端伺服器的檢查端口。你可以指定不同于真實服務的後端伺服器的端口,比如後端提供的是443端口的應用,你可以去檢查80端口的狀态來判斷後端健康狀況。預設是0,表示跟後端server提供真實服務的端口一樣。該選項出現于Tengine-1.4.0。</code>
<code>check_http_send http_packet:</code>
<code>該指令可以配置http健康檢查包發送的請求内容。為了減少傳輸資料量,推薦采用</code><code>"HEAD"</code><code>方法。</code>
<code>當采用長連接配接進行健康檢查時,需在該指令中添加keep-alive請求頭,如:</code><code>"HEAD / HTTP/1.1\r\nConnection: keep-alive\r\n\r\n"</code><code>。 同時,在采用</code><code>"GET"</code><code>方法的情況下,請求uri的size不宜過大,確定可以在1個interval内傳輸完成,否則會被健康檢查子產品視為後端伺服器或網絡異常。</code>
<code>check_http_expect_alive: 該指令指定HTTP回複的成功狀态,預設認為2XX和3XX的狀态是健康的。</code>
<code>check_status:</code>
<code>顯示伺服器的健康狀态頁面。該指令需要在http塊中配置。</code>
<code>在Tengine-1.4.0以後,你可以配置顯示頁面的格式。支援的格式有: html、csv、 json。預設類型是html。</code>
<code>你也可以通過請求的參數來指定格式,假設‘</code><code>/status</code><code>’是你狀态頁面的URL, </code><code>format</code><code>參數改變頁面的格式,比如:</code>
<code>/status</code><code>?</code><code>format</code><code>=html</code>
<code>/status</code><code>?</code><code>format</code><code>=csv</code>
<code>/status</code><code>?</code><code>format</code><code>=jsonfan</code>
<a href="http://s3.51cto.com/wyfs02/M00/23/0E/wKioL1Mv3VOgHGEWAAE1CkpOgE0098.jpg" target="_blank"></a>
本文轉自ljl_19880709 51CTO部落格,原文連結:http://blog.51cto.com/luojianlong/1382622,如需轉載請自行聯系原作者