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,如需轉載請自行聯系原作者