天天看點

伺服器架構之性能擴充-第二章(3) 第二章:Lvs基礎:

首先了解一下OSI模型:

<a target="_blank" href="http://blog.51cto.com/attachment/201208/115947257.png"></a>

實體層定義了線纜的标準,資料鍊路層完成了資料包的加封,它加了一個源MAC位址和目的MAC位址,網絡層是加入了源IP位址和目的IP位址,傳輸層加入了源端口和目的端口,會話層表示層和應用層是應用程式,會話層定義了通信狀态,表示層是通信的編碼狀态。加封和解封過程,完成一個資料的通信。

<a target="_blank" href="http://blog.51cto.com/attachment/201208/120016447.png"></a>

資料11-》44,首先給資訊給交換機,交換機收到記錄源位址,發送廣播,等待44的回應。44回應,交換機會加下目的位址,下次直接發送就可以了。

<a target="_blank" href="http://blog.51cto.com/attachment/201208/120035628.png"></a>

路由器是連接配接不同網段的裝置。口較少。目的MAC位址是資料發送之前,廣播通知而得到的資料。而此時arp就是MAC和IP對應的表,交換機也可以傳回一個MAC位址給廣播,一步步的傳輸。

<a target="_blank" href="http://blog.51cto.com/attachment/201208/120052818.png"></a>

<a target="_blank" href="http://blog.51cto.com/attachment/201208/120205926.png"></a>

負載均衡架設有基于網絡裝置的負載均和和基于作業系統的負載均衡,基于網絡裝置如Cisco路由或F5負載均衡器,基于作業系統的有windows的NBL和linux的LVS。

LVS-nat模式:(virtual server via network address translation)

通過網絡位址轉換,排程器将重寫請求封包的目标位址,根據預設的排程算法,将請求分派給後端的真是伺服器;真是伺服器響應封包通過排程器時,封包的源位址将被重寫,傳回給客戶,完成整個負載排程。

優點:節省IP資源,屏蔽内網ip,内外分離。

缺點:通路量大,容易造成VIP主機瓶頸(一般不會)。

<a target="_blank" href="http://blog.51cto.com/attachment/201208/120242962.png"></a>

IP tun模式:(virtual server via ip tunneling)

為了解決nat技術的排程器負擔問題,排程器吧請求封包通過ip隧道轉發給真實伺服器,而真實伺服器将相應直接傳回給客戶,是以排程器中處理請求封包。由于一般請求封包比應答封包大許多,此技術可以使叢集系統的吞吐量提高10倍。

缺點:比較浪費公網ip。有點:由于下行速度大于上行速度,此技術速度快。

<a target="_blank" href="http://blog.51cto.com/attachment/201208/120302492.png"></a>

LVS-dr模式:(virtual server via direct routing)

此模式通過改寫請求封包的MAC位址,将請求發到真實伺服器,真實伺服器直接傳給客戶。這種沒有ip隧道模式的開銷,具有更廣泛的應用場合。但要求排程伺服器和真實伺服器都有一塊網卡在同一網段。

<a target="_blank" href="http://blog.51cto.com/attachment/201208/120316870.png"></a>

輪叫:(round robin):

排程器通過“輪叫”排程算法,将外部請求按順序輪流配置設定到叢集中的每一台伺服器。

權重輪叫:(weighted round robin)

權重輪叫算法,會根據真實伺服器的不同處理能力來排程通路請求。這樣可以保證處理能力強的伺服器承受更多的通路流量,并可以動态調整權值。

最小連接配接:(least connections)

最少連接配接排程器可以動态的将網絡請求排程到連結最少的伺服器上,如果真實伺服器的性能相近,看可以達到較好的目的。

權重最少連結:(weighted least connections)

在叢集計算機性能差異較大時,采用權重最少連結可以讓權值較高的伺服器承受較大比例的請求,并且動态調整權值。

實驗環境:

負載均衡伺服器:真實IP 8.8.8.8      内網IP:192.168.10.1

真實伺服器:server1:192.168.10.2

真實伺服器:server2:192.168.10.3

 1、先做兩個快照:

<a target="_blank" href="http://blog.51cto.com/attachment/201208/120330364.png"></a>

負載均衡排程的伺服器需要兩塊網卡,一塊内網一塊外網的,内網的網卡要和其他的兩台真實伺服器的網卡在同一個交換機上。如我們将内網都在VM2交換機上,将外網用vm1交換機。

<a target="_blank" href="http://blog.51cto.com/attachment/201208/120343695.png"></a>

2、配置IP

LVS伺服器:我們使用臨時ip測試

Ipconfig eth0 8.8.8.8 netmask 255.255.255.0

Ipconfig eth1 192.168.10.1 netmask 255.255.255.0

真實伺服器: ipconfig eth0 192.168.10.2 netmask 255.255.255.0

和ipconfig eth0 192.168.10.3 netmask 255.255.255.0

<a target="_blank" href="http://blog.51cto.com/attachment/201208/120402791.png"></a>

<a target="_blank" href="http://blog.51cto.com/attachment/201208/120415912.png"></a>

<a target="_blank" href="http://blog.51cto.com/attachment/201208/120445658.png"></a>

為了使我們配置的公網可以通路,我們要配置我們的本地ip和8.8.8.1在同一個網段,我們配置本地ip為8.8.8.1,掩碼為255.255.255.0這樣它們在同一個子網8.8.8.0了,這裡我們選擇的VMware1的網卡。

<a target="_blank" href="http://blog.51cto.com/attachment/201208/120500979.png"></a>

為了不影響測試,我們這裡将防火牆和selinux停掉。

<a target="_blank" href="http://blog.51cto.com/attachment/201208/120513142.png"></a>

為了ping通網絡,我們通過指令“echto 1&gt;/proc/sys/net/ipv4/ip_forward”開啟路由轉發功能,對于真實伺服器我們還需要增加預設網關,通過指令“route add default gw 192.168.10.1”實作。

<a target="_blank" href="http://blog.51cto.com/attachment/201208/120529809.png"></a>

這樣我們伺服器之間便可以ping通了,隻有環境正确才能達到目的。我們可以通過本地ping通lvs伺服器,我們可以通過lvs伺服器ping通内外網,因為它是内外網的使者。

<a target="_blank" href="http://blog.51cto.com/attachment/201208/120544580.png"></a>

3.安裝ipvsadm插件,首先執行“ipvsadm”指令,看能否識别指令,如不識别用yum安裝即可。

<a target="_blank" href="http://blog.51cto.com/attachment/201208/120604427.png"></a>

4、編寫測試腳本,在LVS伺服器上編寫如下腳本,該腳本首先使用-C請求之前的腳本,然後定義提供伺服器的ip,并使用rr輪訓方式,然後指定真實伺服器的ip,-m指使用nat模式。

<a target="_blank" href="http://blog.51cto.com/attachment/201208/120619649.png"></a>

測試腳本:OK

<a target="_blank" href="http://blog.51cto.com/attachment/201208/120637906.png"></a>

5、定義服務:

真實伺服器1和真實伺服器2分别開啟apache功能,并且分别定義首頁。如果源碼包安裝的apache,可以通過/usr/local/apache/bin/apachectl start 開啟,然後到/usr/local/apache/htdocs目錄下建立index.html檔案内容寫“&lt;h1&gt;192.168.10.2,it works!&lt;h1&gt;”.

6、測試nat模式:

<a target="_blank" href="http://blog.51cto.com/attachment/201208/120658748.png"></a>

<a target="_blank" href="http://blog.51cto.com/attachment/201208/120710158.png"></a>

負載均衡伺服器:隧道IP 200.168.10.10     内部IP:200.168.10.1

真實伺服器:server1:200.168.10.2

真實伺服器:server2:200.168.10.3

<a target="_blank" href="http://blog.51cto.com/attachment/201208/120725801.png"></a>

1、配置ip

首先LVS伺服器我們需要一塊網卡就行了,我們使用eth0即可,聽到eth1.其次我們需要增加我們的隧道ip,通過指令“ifconfig tunl0 eth0 200.168.10.10 netmask 255.255.255.255 up”實作,我們還需要将隧道ip加入路由,通過“route add -host 200.168.10.10 dev eth0”實作。

<a target="_blank" href="http://blog.51cto.com/attachment/201208/120741885.png"></a>

<a target="_blank" href="http://blog.51cto.com/attachment/201208/120758929.png"></a>

對于真實ip我們也一樣配置一個真實ip和一個隧道ip然後将隧道ip加入路由。這裡我們要求我們的三台伺服器使用同一個交換機vm1.

下圖是增加了隧道ip的網卡配置和route效果。

<a target="_blank" href="http://blog.51cto.com/attachment/201208/120813640.png"></a>

<a target="_blank" href="http://blog.51cto.com/attachment/201208/120826519.png"></a>

2.Ping測試,我們都是公網,我們本地ip也改為200.168.10.4子網路遮罩255.255.255.0這樣都在一個網段,可以ping通所有的這網段的ip。

<a target="_blank" href="http://blog.51cto.com/attachment/201208/120838837.png"></a>

3.建立配置檔案。我們首先個LVS伺服器建立配置檔案,我們這一次使用-i指定為隧道模式。然後增加執行權限,檢視結果。

<a target="_blank" href="http://blog.51cto.com/attachment/201208/120852555.png"></a>

<a target="_blank" href="http://blog.51cto.com/attachment/201208/120906399.png"></a>

4.對于真實伺服器我們需要建立如下腳本,然後執行。這是為了使如果請求直接通路了真實伺服器,真實伺服器會忽略請求。這樣就保證了,每次請求都是LVS伺服器發過來的。

<a target="_blank" href="http://blog.51cto.com/attachment/201208/122348756.png"></a>

5.測試:我們分别修改真實伺服器的主檔案,修改ip為現在的ip,然後浏覽測試。

<a target="_blank" href="http://blog.51cto.com/attachment/201208/122421242.png"></a>

<a target="_blank" href="http://blog.51cto.com/attachment/201208/122605695.png"></a>

測試之後,我們還可以傳回LVS伺服器檢視輪詢的情況和權值等資訊。

<a target="_blank" href="http://blog.51cto.com/attachment/201208/122621989.png"></a>

負載均衡伺服器:虛拟IP 200.168.10.10     内部IP:200.168.10.1

<a target="_blank" href="http://blog.51cto.com/attachment/201208/122744566.png"></a>

LVS伺服器,我們需要一快網卡,然後虛拟一個ip即可,我們可以使用指令“ifconfig eth0 200.168.10.10 netmask 255.255.255.255 up”。

<a target="_blank" href="http://blog.51cto.com/attachment/201208/122804419.png"></a>

對于真實伺服器,我們要通過回環ip綁定這個ip,通過指令“ifconfig lo:0 200.168.10.10 netmask 255.255.255.255 up”實作,然後将該ip分别加入路由“route add -host 200.168.101.10 dev lo:0”實作。

2.配置配置檔案,對于配置檔案我們這次指定-g即dr模式來實作。然後賦予執行權限,執行。

<a target="_blank" href="http://blog.51cto.com/attachment/201208/122824129.png"></a>

對于真實伺服器,我們同樣要進行配置,讓它忽略對于VIP的請求。

<a target="_blank" href="http://blog.51cto.com/attachment/201208/122842802.png"></a>

3、測試:我們進行測試

<a target="_blank" href="http://blog.51cto.com/attachment/201208/122902930.png"></a>

<a target="_blank" href="http://blog.51cto.com/attachment/201208/122955157.png"></a>

可以通過真實伺服器執行“ipvsadm -L -n”進行檢視輪訓效果

<a target="_blank" href="http://blog.51cto.com/attachment/201208/123010431.png"></a>

 注:本章是進行LVS的基本使用在生産環境中:

1、ip的配置最好使用setup的圖形界面或vi /etc/sysconfig/network-scripts/ifcfg-eth0.

2、對于作為提供真實服務的主機,要保證通路的網頁一緻。可以通過架設rsync同步伺服器,或drbd鏡像服務功能或共享磁盤(有DAS/NAS/SAN 等方式)的方式來進行同步真實伺服器的資料,保證結果的一緻性,這個作為下一步的研究目标。

本文轉自zsaisai 51CTO部落格,原文連結:http://blog.51cto.com/3402313/964038