天天看點

Keepalived+Nginx反向代理檢測叢集節點狀态企業實戰

轉載于老男孩教育

成功絕非偶然,而是正确選擇和持續努力後的必然! ------老男孩

作者簡介:

老男孩,北京老男孩IT教育創始人,51CTO金牌講師及長期戰略合作專家,大規模網站叢集實戰運維架構專家及教學教育訓練專家,國内IT教育實戰心理學運維思想體系創始人,著有《跟老男孩學習Linux運維:Web叢集實戰》一書,影響屌絲無數。

正文開始:

Keepalived+Nginx反向代理檢測叢集節點狀态企業實戰

       淘寶技術團隊開發了一個Tengine(Nginx的分支)子產品nginx_upstream_check_module,用于提供主動式後端伺服器健康檢查。通過它可以檢測後端realserver的健康狀态,如果後端realserver不可用,則所有的請求就不會轉發到該節點上。

       Tengine原生支援這個子產品,而Nginx則需要通過打更新檔的方式将該子產品添加到Nginx中。更新檔下載下傳位址:https://github.com/yaoweibin/nginx_upstream_check_module。下面介紹一下如何使用這個子產品。

1)安裝nginx_upstream_check_module子產品。

# 系統已經安裝了nginx-1.6.3軟體 [root@lb01 ~]# /application/nginx/sbin/nginx -V nginx version: nginx/1.6.3 [root@lb01 ~]# cd /home/oldboy/tools/
# 下載下傳更新檔包 [root@lb01 tools]# wget https://codeload.github.com/yaoweibin/nginx_upstream_check_module/zip/master [root@lb01 tools]# unzip master # 因為是對源程式打更新檔,是以還需要nginx軟體包 [root@lb01 tools]# cd nginx-1.6.3
[root@lb01 nginx-1.6.3]# patch -p1 <../nginx_upstream_check_module-master/check_1.5.12+.patch # 編譯參數要和以前一緻,最後加上--add-module=../nginx_upstream_check_module-master/ [root@lb01 nginx-1.6.3]# ./configure --prefix=/application/nginx-1.6.3--user=nginx --group=nginx --with-http_ssl_module--with-http_stub_status_module --add-module=../nginx_upstream_check_module-master/ [root@lb01 nginx-1.6.3]# make # 如果是新裝的nginx則繼續執行下面make install一步,如果給已經安裝的nginx系統打監控更新檔就不用執行make install了,本文忽略執行make install。 # make的作用就是重新生成Nginx二進制啟動指令而已。
# 操作前備份 [root@lb01 nginx-1.6.3]# mv/application/nginx/sbin/nginx{,.ori}  # 将打過更新檔的nginx二進制程式複制到/application/nginx/sbin/目錄下 [root@lb01 nginx-1.6.3]# cp ./objs/nginx /application/nginx/sbin/ # 檢查是否正常 [root@lb01 nginx-1.6.3]# /application/nginx/sbin/nginx -t  nginx: the configuration file /application/nginx-1.6.3/conf/nginx.confsyntax is ok nginx: configuration file /application/nginx-1.6.3/conf/nginx.conftest is successful [root@lb01 nginx-1.6.3]# /application/nginx/sbin/nginx -V built by gcc 4.4.7 20120313 (Red Hat 4.4.7-11) (GCC)
TLS SNI support enabled configure arguments: --prefix=/application/nginx-1.6.3 --user=nginx--group=nginx --with-http_ssl_module --with-http_stub_status_module --add-module=../nginx_upstream_check_module-master/

2)配置Nginx健康檢查,如下:

[root@lb01 nginx-1.6.3]# vi /application/nginx/conf/nginx.conf <code>worker_processes  </code><code>1</code><code>;</code> <code>events {</code> <code>    </code><code>worker_connections  </code><code>1024</code><code>;</code> <code>}</code> <code>http {</code> <code>    </code><code>include       mime.types;</code> <code>    </code><code>default_type  application</code><code>/</code><code>octet</code><code>-</code><code>stream;</code> <code>    </code><code>sendfile        on;</code> <code>    </code><code>keepalive_timeout  </code><code>65</code><code>;</code> <code> </code>  <code>upstream static_pools {</code> <code>    </code><code>server </code><code>10.0</code><code>.</code><code>0.9</code><code>:</code><code>80weight</code><code>=</code><code>1</code><code>;</code> <code>    </code><code>server </code><code>10.0</code><code>.</code><code>0.10</code><code>:</code><code>80weight</code><code>=</code><code>1</code><code>;</code> <code>    </code><code>check interval</code><code>=</code><code>3000</code> <code>rise</code><code>=</code><code>2</code> <code>fall</code><code>=</code><code>5</code> <code>timeout</code><code>=</code><code>1000</code> <code>type</code><code>=</code><code>http;</code>     #&lt;== interval=3000表示檢查節點間隔3秒,fall=5表示當檢測節點連續5次當機後,摘除節點,rise=2表示節點恢複後檢測兩次成功(rise)方加入叢集,逾時時間為1秒,檢查的協定是http。,這點有點模仿haproxy健康檢查的意味。 <code>upstream default_pools {</code> <code>    </code><code>server </code><code>10.0</code><code>.</code><code>0.11</code><code>:</code><code>80weight</code><code>=</code><code>1</code><code>;</code> <code>    </code><code>server {</code> <code>        </code><code>listen       </code><code>80</code><code>;</code> <code>        </code><code>server_name   www.etiantian.org;</code> <code>        </code><code>location </code><code>/</code> <code>{</code> <code>            </code><code>root   html;</code> <code>            </code><code>index index.html index.htm;</code> <code>            </code><code>proxy_pass  http:</code><code>/</code><code>/</code><code>default_pools;</code> <code>            </code><code>includeproxy.conf;</code> <code>        </code><code>}</code> <code>        </code><code>location ~.</code><code>*</code><code>.(gif|jpg|jpeg|png|bmp|swf|css|js)$ {</code> <code>            </code><code>proxy_pass  http:</code><code>/</code><code>/</code><code>static_pools;</code> <code>         </code><code>}</code> <code>        </code><code>location </code><code>/</code><code>status {</code> <code>            </code><code>check_status;</code> <code>            </code><code>access_log off;</code> <code>    </code><code>}</code>

3)重新開機Nginx負載

[root@lb01 nginx-1.6.3]# /application/nginx/sbin/nginx -s stop [root@lb01 nginx-1.6.3]# /application/nginx/sbin/nginx

#注意此處必須重新開機Nginx,不能重新加載。

4)健康檢查參數說明

# check interval=3000 rise=2 fall=5 timeout=1000 type=http;

上面配置的意思是,對static_pools這個負載均衡條目中的所有節點,每隔3秒檢測一次,請求2次正常則标記realserver狀态為up,如果檢測5次都失敗,則标記realserver的狀态為down,逾時時間為1秒,檢查的協定是http。更詳細用法見官網http://tengine.taobao.org。

繼續閱讀