天天看點

高性能高可用方案Nginx (三)Upstream(負載均衡)

1、理論部分

1.1、nginx的負載均衡

nginx的負載均衡由upstream子產品實作

1.2、nginx的子產品

1.2.1、nginx的子產品分類

nginx子產品分為三大類:

1)handler

2)filter

3)upstream(上遊)

1.2.2、子產品的作用

handler&filter - 用于完成單機工作

upstream - 用于跨越單機限制,完成網絡資料接收、處理和轉發

1.2.3、upstream的意義

為nginx提供跨越單機的橫向處理擴充能力,使nginx擺脫隻能作為終端節點,而具備網絡應用級别的拆分、封裝和整合的戰略功能。

1.3、upstream的使用方法

1.3.1、定義upstream組和調用

1

2

3

4

5

6

7

8

9

10

11

12

13

14

15

16

<code>http {</code>

<code>  </code><code>upstream myproject {</code>

<code>    </code><code>server 127.0.0.1:8000 weight=3;</code>

<code>    </code><code>server 127.0.0.1:8001;</code>

<code>    </code><code>server 127.0.0.1:8002;</code>

<code>    </code><code>server 127.0.0.1:8003;</code>

<code>  </code><code>}</code>

<code>  </code><code>server {</code>

<code>    </code><code>listen 80;</code>

<code>    </code><code>server_name www.domain.com;</code>

<code>    </code><code>location / {</code>

<code>      </code><code>proxy_pass http:</code><code>//myproject</code><code>;</code>

<code>    </code><code>}</code>

<code>}</code>

1.3.2、upstream的配置設定方式

1)round robin(預設)

輪詢,每個請求按照時間順序逐一配置設定,如果後端伺服器當機,會自動剔除。

2)weight

權重輪詢,用于解決後端伺服器性能不均的情況。

定義方法:

<code>upstream cmdschoolSer {</code>

<code>server 10.168.0.185 weight=10;</code>

<code>server 10.168.0.186 weight=10;</code>

3)ip_bash

每個請求按照通路ip的bash結果配置設定,故訪客固定通路一個後端伺服器,可以解決session長期保持問題。

<code>ip_hash;</code>

<code>server 10.168.0.185:8080;</code>

<code>server 10.168.0.186:8080;</code>

4)fair(第三方)

按後端伺服器的響應時間配置設定,響應時間短的優先配置設定。

<code>fair;</code>

5)url_bash(第三方)

<code>hash</code> <code>$request_uri;</code>

<code>hash_method crc32;</code>

6)tips

<code>upstream cmdschoolSer {</code><code>#定義負載均衡裝置的ip及裝置狀态</code>

<code>server 10.168.0.185:8080 down;</code>

<code>server 10.168.0.185:8081 weight=2;</code>

<code>server 10.168.0.186:8081 backup;</code>

1.3.3、裝置的狀态

1)down

表示目前server暫時不參與負載

數值越大權重越大(預設1)

3)max_fails

允許請求失敗的次數,超過失敗次數,傳回proxy_next_upstream子產品定義的錯誤(預設1)

4)fail_timeout

max_fails次失敗後,暫停的時間

5)backup

其他所有非backup機器down或者忙的時候,請求backup機器(壓力最輕)

2、實驗部分

2.1、實驗資訊

2.1.1、實驗基礎

你已經做完以下實驗:

<a href="http://cmdschool.blog.51cto.com/2420395/1703299" target="_blank">http://cmdschool.blog.51cto.com/2420395/1703299</a>

2.1.2、主機資訊

lbSer

ip address=10.168.0.183

hostname=lbSer

proxySer:

ip address=10.168.0.185

hostname=proxySer

tomcatSer:

ip address=10.168.0.188

hostname=tomcatSer

client:

ipaddress=10.168.0.8

hostname=client

2.1.3、yum包安裝

In lbSer

<code>yum -y </code><code>install</code> <code>http:</code><code>//nginx</code><code>.org</code><code>/packages/centos/6/noarch/RPMS/nginx-release-centos-6-0</code><code>.el6.ngx.noarch.rpm</code>

<code>yum -y </code><code>install</code> <code>nginx</code>

2.2、配置部分

2.2.1、step

vim編輯/etc/nginx/nginx.conf

将原來http{}部分删除,替換為如下代碼:

<code>  </code><code>upstream cmdschool {</code>

<code>    </code><code>server 10.168.0.185:81;</code>

<code>    </code><code>server 10.168.0.185:82;</code>

<code>    </code><code>server_name www.cmdschool.org;</code>

<code>      </code><code>proxy_pass http:</code><code>//cmdschool</code><code>;</code>

2.2.2、step

啟動服務并設定為開機啟動

<code>/etc/init</code><code>.d</code><code>/nginx</code> <code>restart</code>

<code>chkconfig nginx on</code>

2.2.3、step

vim編輯/etc/sysconfig/iptables

增加如下代碼:

<code>-A INPUT -m state --state NEW -m tcp -p tcp --dport 80 -j ACCEPT</code>

2.2.4、step

重新開機防火牆

<code> </code><code>/etc/init</code><code>.d</code><code>/iptables</code> <code>restart</code>

In client

2.2.5、step

測試負載均衡

<code>curl http:</code><code>//10</code><code>.168.0.182</code>

----------------------------------------------------------

理論部分參閱資料:

1)官方:

<a href="http://www.nginx.org/" target="_blank">http://www.nginx.org</a>

2)Tengine:

<a href="http://tengine.taobao.org/" target="_blank">http://tengine.taobao.org</a>

實驗部分參閱資料:

1)Nginx官方下載下傳路徑:

<a href="http://nginx.org/en/download.html" target="_blank">http://nginx.org/en/download.html</a>

2)Nginx+Tomcat負載均衡配置(Upstream子產品)

<a href="https://www.nginx.com/resources/wiki/start/topics/examples/loadbalanceexample/" target="_blank">https://www.nginx.com/resources/wiki/start/topics/examples/loadbalanceexample/</a>

<a href="http://tengine.taobao.org/book/chapter_5.html" target="_blank">http://tengine.taobao.org/book/chapter_5.html</a>

<a href="http://www.cnblogs.com/xiaogangqq123/archive/2011/03/04/1971002.html" target="_blank">http://www.cnblogs.com/xiaogangqq123/archive/2011/03/04/1971002.html</a>

<a href="http://onlyzq.blog.51cto.com/1228/557848/" target="_blank">http://onlyzq.blog.51cto.com/1228/557848/</a>

<a href="http://developer.51cto.com/art/201407/446626.htm" target="_blank">http://developer.51cto.com/art/201407/446626.htm</a>

<a href="http://www.myhack58.com/Article/sort099/sort0102/2011/31642.htm" target="_blank">http://www.myhack58.com/Article/sort099/sort0102/2011/31642.htm</a>

本文轉自 tanzhenchao 51CTO部落格,原文連結:http://blog.51cto.com/cmdschool/1703509,如需轉載請自行聯系原作者

繼續閱讀