負載均衡LVS概述以及DR模式簡易部署

前言:

   在做這個實驗之前,總覺得高可用負載均衡很高大上,很難理解。隨性我自己也去試試,後來發現真的是這樣!或許因爲我是新手,所以實驗多以失敗告終。加上自己的虛擬機環境很噁心,經常故障,不過最後還是簡單地搭建了一個LVS。以下內容是我總結了大多個博文而來,文後注有博文來源。


  LVSLinux Virtual Server的簡稱,也就是Linux虛擬服務器, 是一個由章文嵩博士發起的自由軟件項目,它的官方站點是www.linuxvirtualserver.org。現在LVS已經是 Linux標準內核的一部分,在Linux2.4內核以前,使用LVS時必須要重新編譯內核以支持LVS功能模塊,但是從Linux2.4內核以後,已經完全內置了LVS的各個功能模塊,無需給內核打任何補丁,可以直接使用LVS提供的各種功能。

 LVS的作用

LVS主要用於服務器集羣的負載均衡。它工作在網絡層,可以實現高性能,高可用的服務器集羣技術。它廉價,可把許多低性能的服務器組合在一起形成一個超級服務器。它易用,配置非常簡單,且有多種負載均衡的方法。它穩定可靠,即使在集羣的服務器中某臺服務器無法正常工作,也不影響整體效果。另外可擴展性也非常好。

LVS自從1998年開始,發展到現在已經是一個比較成熟的技術項目了。可以利用LVS技術實現高可伸縮的、高可用的網絡服務,例如WWW服務、Cache服務、DNS服務、FTP服務、MAIL服務、視頻/音頻點播服務等等,有許多比較著名網站和組織都在使用LVS架設的集羣系統,例如:Linux的門戶網站(www.linux.com)、向RealPlayer提供音頻視頻服務而聞名的Real公司(www.real.com)、全球最大的開源網站(sourceforge.net)等。 

2.3LVS的體系結構

  使用LVS架設的服務器集羣系統有三個部分組成:

  (1)最前端的負載均衡層,用Load Balancer表示;

  (2)中間的服務器集羣層,用Server Array表示;

  (3)最底端的數據共享存儲層,用Shared Storage表示;

  在用戶看來,所有的內部應用都是透明的,用戶只是在使用一個虛擬服務器提供的高性能服務。

wKioL1fvVROgMsk0AAGNcQmYL8w790.png

 

IPVS實現負載均衡機制有三種,分別是NATTUNDR,詳述如下: 
 VS/NAT即(Virtual Server viaNetwork Address Translation
也就是網絡地址翻譯技術實現虛擬服務器,當用戶請求到達調度器時,調度器將請求報文的目標地址(即虛擬IP地址)改寫成選定的Real Server地址,同時報文的目標端口也改成選定的Real Server的相應端口,最後將報文請求發送到選定的Real Server。在服務器端得到數據後,Real Server返回數據給用戶時,需要再次經過負載調度器將報文的源地址和源端口改成虛擬IP地址和相應端口,然後把數據發送給用戶,完成整個負載調度過程。
可以看出,在NAT方式下,用戶請求和響應報文都必須經過DirectorServer地址重寫,當用戶請求越來越多時,調度器的處理能力將稱爲瓶頸。
 VS/TUN :即(Virtual Server via IP Tunneling 
也就是IP隧道技術實現虛擬服務器。它的連接調度和管理與VS/NAT方式一樣,只是它的報文轉發方法不同,VS/TUN方式中,調度器採用IP隧道技術將用戶請求轉發到某個Real Server,而這個Real Server將直接響應用戶的請求,不再經過前端調度器,此外,對Real Server的地域位置沒有要求,可以和DirectorServer位於同一個網段,也可以是獨立的一個網絡。因此,在TUN方式中,調度器將只處理用戶的報文請求,集羣系統的吞吐量大大提高。
 VS/DR即(Virtual Server viaDirect Routing 
也就是用直接路由技術實現虛擬服務器。它的連接調度和管理與VS/NATVS/TUN中的一樣,但它的報文轉發方法又有不同,VS/DR通過改寫請求報文的MAC地址,將請求發送到Real Server,而Real Server將響應直接返回給客戶,免去了VS/TUN中的IP隧道開銷。這種方式是三種負載調度機制中性能最高最好的,但是必須要求DirectorServerReal Server都有一塊網卡連在同一物理網段上。

配置實例:LVS DR模型詳解

wKiom1fvVSfAmKXsAACcfv3_dsg833.png

DR模型的特點:

1.director必須與realserver位於同一個網絡。

2.realserver可以使用公網ip地址,便於遠程管理與配置。

3.director只負責處理入站請求。而響應報文則由realserver直接返回給client端。大大節省director的資源

4.不能做端口映射

整個工作原理如下:

戶端通過路由器將請求交給directorVIPdirector接收請求,將通過相應的算法將請求轉發給相應的realserver。在轉發的過程中,會修改請求包的目的mac地址,目的ip地址不變。realserver接收請求,並直接響應客戶端。這時,便出現一個問題:director此時與 realserver位於同一個網絡中,當director直接將請求轉發給realserver時,realserver檢測到該請求包的目的ip vip而並非自己,便會丟棄,而不會響應。。爲了解決這個問題,我們需要在所有realserver上都配上VIP。這時會出現第二個問題:directorrealserver位於同一個網絡中,當出現多個vip時,通過arp廣播,整個網絡必然混亂,我們無法保證客戶端的請求一定會發往director。爲保證當客戶端請求抵達網絡時,只有director來響應請求。我們需要realserver忽略對viparp請求,並且在 arp通告時,不通告vip地址。我們需要配置如下兩個內核參數:

arp_ignore 

當一臺主機某個接口接收到arp請求時,這臺機上的ip地址是否通過該接口響應給對應請求的限制級別。簡單來說,當這臺主機有多塊網卡,或者有多個ip地址時,是否通過該接口將所有ip地址響應給對應的請求。

0:不作任何限制。將所有本機的ip地址都響應給對應請求。

1:當請求的ip就配置在本接口上時,才予以響應。換句話說,就是隻響應當前接口的ip地址。

arp_announce

當一臺主機加入到一個新的網絡。會發出ARP通告,向網絡中其他主機通告自己的ip地址及mac等信息。arp_anounce就用來限制通告的級別。當這臺主機有多塊網卡或者多個ip地址時,是否通過某一個接口將所有ip地址通告給該網絡中的主機。

0:不作任何限制。從任意接口通告所有ip地址。

1:儘可能避免通告非本接口上的ip

2:只通知本接口的ip。非本接口的ip不予通告。

由此我們亦可知,在realserver上配置vip時顯然也不能配置的物理接口的虛接口上,而應該配置在loopback上。

 

在做實驗之前先連接ipvsadm的用法

ipvsadm的用法和格式如下:
ipvsadm -A|E -t|u|f virutal-service-address:port [-s scheduler] [-p [timeout]][-M netmask]
ipvsadm -D -t|u|f virtual-service-address
ipvsadm -C
ipvsadm -R
ipvsadm -S [-n]
ipvsadm -a|e -t|u|f service-address:port -r real-server-address:port [-g|i|m][-w weight]
ipvsadm -d -t|u|f service-address -r server-address
ipvsadm -L|l [options]
ipvsadm -Z [-t|u|f service-address]
ipvsadm --set tcp tcpfin udp
ipvsadm --start-daemon state [--mcast-interface interface]
ipvsadm --stop-daemon
ipvsadm -h

命令選項解釋:
有兩種命令選項格式,長的和短的,具有相同的意思。在實際使用時,兩種都可以。

-A --add-service 在內核的虛擬服務器表中添加一條新的虛擬服務器記錄。也就是增加一臺新的虛擬服務器。

-E --edit-service 編輯內核虛擬服務器表中的一條虛擬服務器記錄。

-D --delete-service 刪除內核虛擬服務器表中的一條虛擬服務器記錄。

-C --clear 清除內核虛擬服務器表中的所有記錄。

-R --restore 恢復虛擬服務器規則

-S --save 保存虛擬服務器規則,輸出爲-R選項可讀的格式

-a --add-server 在內核虛擬服務器表的一條記錄裏添加一條新的真實服務器記錄。也就是在一個虛擬服務器中增加一臺新的真實服務器

-e --edit-server 編輯一條虛擬服務器記錄中的某條真實服務器記錄

-d --delete-server 刪除一條虛擬服務器記錄中的某條真實服務器記錄

-L|-l --list 顯示內核虛擬服務器表

-Z --zero 虛擬服務表計數器清零(清空當前的連接數量等)

--set tcp tcpfin udp 設置連接超時值

--start-daemon 啓動同步守護進程。他後面可以是masterbackup,用來說明LVS Routermaster或是backup。在這個功能上也可以採用keepalivedVRRP功能。

--stop-daemon 停止同步守護進程

-h --help 顯示幫助信息

其他的選項:
-t --tcp-service service-address
說明虛擬服務器提供的是tcp的服務[vip:port] or [real-server-ip:port]

-u --udp-service service-address 說明虛擬服務器提供的是udp的服務[vip:port] or [real-server-ip:port]

-f --fwmark-service fwmark 說明是經過iptables標記過的服務類型。

-s --scheduler scheduler 使用的調度算法,有這樣幾個選項rr|wrr|lc|wlc|lblc|lblcr|dh|sh|sed|nq,
默認的調度算法是: wlc.

-p --persistent [timeout] 持久穩固的服務。這個選項的意思是來自同一個客戶的多次請求,將被同一臺真實的服務器處理。timeout的默認值爲300秒。

-M --netmask netmask persistentgranularity mask

-r --real-server server-address 真實的服務器[Real-Server:port]

-g --gatewaying 指定LVS的工作模式爲直接路由模式(也是LVS默認的模式)

-i --ipip 指定LVS的工作模式爲隧道模式

-m --masquerading 指定LVS的工作模式爲NAT模式

-w --weight weight 真實服務器的權值

--mcast-interface interface 指定組%B

 

配置示例:
1
)實驗環境
lvs
負載調度器:eth0172.16.16.173/24VIP eth0:0172.16.16.172
web
服務器池:節點1-節點2172.16.16.177-178/24

2)配置負載調度器
a.
配置虛擬IP地址(VIP
ifconfig eth0:0 172.16.16.172 broadcast 172.16.16.172 netmask 255.255.255.0 up  #
eth0上配置並啓動VIP
route add -host 172.16.16.172 dev eth0:0   #
特殊路由,當客戶端請求的ipvip時,則由eth0:0響應。


b.
調整/proc響應參數
echo 1 > /proc/sys/net/ipv4/ip_forward    #
開啓路由轉發

echo 0 >/proc/sys/net/ipv4/conf/all/send_redirects

echo 0 >/proc/sys/net/ipv4/conf/default/send_redirects

echo 0 >/proc/sys/net/ipv4/conf/eth0/send_redirects

send_redirectsicmp發送重定向。經查閱相關資料,開啓此選項有一定的危險性,容易被人僞造icmp重定向包發起***。若當前director並非充當路由或網關,建議關閉。默認爲開啓,0爲關閉。

 

c.配置負載分配策略
service ipvsadm stop
ipvsadm -A -t 172.16.16.172:80 -s wlc
ipvsadm -a -t 172.16.16.172:80 -r 172.16.16.177 -g -w 1
ipvsadm -a -t 172.16.16.172:80 -r 172.16.16.178 -g -w 1

# -g DR模式  -m NAT模式 -i IPtun模式
service ipvsadm save
chkconfig ipvsadm on

 

3)配置節點服務器
a.
配置虛擬IP地址
ifconfig lo:0 172.16.16.172 broadcast 172.16.16.172 netmask 255.255.255.255 up
/sbin/route add -host 172.16.16.172 dev lo:0

b.調整/proc響應參數

echo 1 >/proc/sys/net/ipv4/conf/all/arp_ignore

echo 2 >/proc/sys/net/ipv4/conf/all/arp_announce

echo 1 >/proc/sys/net/ipv4/conf/default/arp_ignore

echo 2 >/proc/sys/net/ipv4/conf/default/arp_announce

echo 1 >/proc/sys/net/ipv4/conf/lo/arp_ignore

echo 2 >/proc/sys/net/ipv4/conf/lo/arp_announce

此幾項配置即是用於限制arp請求及arp通告


c.
安裝httpd,進行測試。

wKioL1fvVTiyfQlPAAFMQCVZR88749.png

用客戶端訪問VIP172.16.16.172,就會看到真實服務器172.16.16.178提供的web服務,刷新以下就看到另一個服務器的web服務了,調度算法默認是輪循。

 

參考博文:

王晨純,《Web基礎架構:負載均衡和LVS》:http://www.importnew.com/11229.html

http://dengaosky.blog.51cto.com/9215128/1852537

http://ixdba.blog.51cto.com/2895551/552947


發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章