Linux系統之LVS負載均衡羣集

一、羣集技術的概述

1、羣集的類型

無論是那種羣集,都至少包括兩臺節點服務器,而外表現爲一個整體,只提供一個訪問入口,相當於一臺大型計算機。根據羣集所針對的目標差異,可分爲以下三種內型。

負載均衡羣集:以提高應用系統的響應能力,儘可能處理更多的訪問請求,減少延遲,獲得高併發,高負載的整天性能,例如:“DNS輪詢”,“應用層交換”,“反向代理”等都可以做負載均衡羣集。

高可用羣集:以提高應用系統的可靠性,儘可能地減少中斷時間,確保服務的連續性,達到高可用的容錯效果,例如:“故障切換”,“雙機熱備”,“多機熱備”等都屬於高可用羣集。

高性能運算羣集:以提高應用系統的CPU運算速度,擴展硬件資源和分析能力,獲得相當於大型,超級計算機的高性能運算能力,例如:“雲計算”等就屬於高性能運算羣集的一種。

2、負載均衡的分層結構

在典型的負載均衡羣集中,包括以下三個層次的組件。

第一層:負載調度器,這是訪問整個羣集系統的唯一入口,多外使用所有服務器共有的VIP(虛擬IP)地址,也稱羣集IP地址。通常會配置主,備兩臺調度器實現熱備,當主調度器失效以後平滑替換至備用調度器,確保高可用性。

第二層:服務器池:羣集所提供的應用服務由服務器池承擔,其中的每個節點具有獨立的RIP(真實IP)地址,只處理調度器分發過來的客戶機請求。

第三層:共享存儲,爲服務器池中的所有節點提供穩定,一致的文件存取服務,確保整個羣集的統一性。在Linux環境中,共享存儲可以使用NAS設備或者提供NFS(網絡文件系統)共享服務的專用服務器。

典型的負載均衡羣集結構拓撲圖如下:

155118499.jpg

3、負載均衡的工作模式

關於羣集的負載調度技術,可以基於IP,端口,內容等進行分發,其中基於IP的負載調度室效率最高的。基於IP的負載均衡中,常見的有地址轉換,IP隧道,直接路由這三種工作模式。如下圖所示:

160011657.jpg

地址轉換:簡稱NAT模式,類似於防火牆的私有網絡結構,負載調度器作爲所有服務器節點的網關,即作爲客戶機的訪問入口,也是個節點回應客戶機的訪問出口,服務器節點使用私有IP地址,與負載均衡調度器位於同一個物理網絡,安全性要優於其他兩種方式。

IP隧道:簡稱TUN模式,採用開放式的網絡結構,負載調度器僅作爲客戶機的入口,各節點通過各自的Internet連接直接回應客戶機,而不再經過負調度器。服務器節點分散在互聯網的不同位置,具有獨立的公網IP地址,通常專用IP隧道與負載調度器相互通信。

直接路由:簡稱DR模式,採用半開放式的網絡結構,與TUN模式的結構類似,但個節點並不是分散在各地,而是與調度器位於同一個物理網絡。負載調度器與個節點服務器通過本地網絡連接,不需要建立專用的IP隧道。


二、LVS虛擬服務器概述

Linux Virtual Server是針對Linux內核開發的一個負載均衡項目,LVS現在已經成爲Linux內核的一部分,默認編譯爲ip_vs模塊,必要時能夠自動調用。

1、LVS的負載調度算法

輪詢(rr):將收到的訪問請求按照順序輪流分配給羣集中的各節點,均等地對待每一臺服務器,而不管服務器實際的連接數和系統負載。

加權輪詢(wrr):根據真實服務器的處理能力輪流分配收到的訪問請求,調度器可以自動查詢各節點的負載情況,並動態調整其權重。

最少連接(lc):根據真實服務器已建立的連接數進行分配,將收到的訪問請求優先分配給連接數最少的節點。

加權最少連接(wlc):在服務節點的性能差異較大的情況下,可以爲真實服務器自動調整權重,權重較高的節點將承載更大比例的活動連接負載。

2、加載LVS內核模塊,安裝ipvsadm管理工具

ipvsadm是在負載調度器上使用的LVS羣集管理工具,通過調用ip_vs模塊來添加,刪除服務器節點,以及查看羣集的運行狀態。

[root@localhost /]#modprobe ip_vs
[root@localhost /]#rpm -ivh /media/Packages/ipvsadm-1.25-9.e16.i686.rpm

3、使用ipvsadm工具管理LVS羣集

LVS羣集的管理工作主要包括:創建虛擬服務器,添加服務器節點,查看羣集節點狀態,刪除服務器節點保存負載分配策略。

1)創建虛擬服務器

若羣集的VIP地址爲172.16.16.172,針對TCP的80端口提供負載分流服務,使用調度算法爲輪詢,則命令語法如下。對於負載均衡調度器來說,VIP必須是本機(調度器)實際以啓用的IP地址。

[root@localhost /]#ipvsadmin -A -t 172.16.16.172:80 -s rr

上述操作中,選項“-A”表示添加虛擬服務器,“-t”用來指定VIP地址及TCP端口,“-s”用來指定負載調度算法——輪詢(rr),加權輪詢(wrr),最少連接(lc),加權最少連接(wlc)。

2)添加服務器節點

爲虛擬服務器172.16.16.172添加四個服務器節點,IP地址依次爲192.168.7.21-192.168.7.24,對應的ipvsadm命令語法如下。若希望使用保持連接,可以使用“-p 60”參數,其中60爲60秒。

[root@localhost /]#ipvsadmin -a -t 172.16.16.172:80 -r 192.168.7.21:80 -m -w 1
[root@localhost /]#ipvsadmin -a -t 172.16.16.172:80 -r 192.168.7.22:80 -m -w 1
[root@localhost /]#ipvsadmin -a -t 172.16.16.172:80 -r 192.168.7.23:80 -m -w 1
[root@localhost /]#ipvsadmin -a -t 172.16.16.172:80 -r 192.168.7.24:80 -m -w 1

上述操作中,選項“-a”表示添加真實服務器,“-t”用來指定VIP地址及TCP端口,“-r”用來指定RIP地址及TCP端口,“-m”表示使用NAT羣集模式(-g DR模式,-i TUN模式),“-w”用來設置權重(權重爲0時表示暫停節點)

3)查看羣集節點狀態

結合選項“-L”可以列表查看LVS虛擬服務器,可以指定只查看某一個VIP地址,結合選項“-n”將以數字形式顯示地址,端口等信息。

[root@localhost /]#ipvsadm -L -n       //查看節點狀態
[root@localhost /]#ipvsadm -Lnc        //查看負載連接情況

4)刪除服務器節點

需要刪除服務器池中某一個節點時,使用選項“-d”。執行刪除操作必須指定目標對象,包括節點地址,虛擬IP地址。如果需要刪除整個虛擬服務器時,使用選項“-D”並指定虛擬IP地址即可,無需指定節點。

[root@localhost /]#ipvsadm -d -r 192.168.7.24:80 -t 172.16.16.172:80
[root@localhost /]#ipvsadm -D -t 172.16.16.172:80   //刪除整個虛擬服務器

5)保存負載分配策略

使用導出/導入工具ipvsadm-save/ipvsadm-restore可以保存,恢復LVS策略,操作方法類似於iptables規則的導入/出 。

[root@localhost /]#ipvsadm-save > /etc/sysconfig/ipvsadm     //保存策略
[root@localhost /]#service ipvsadm stop     //停止服務(清楚策略)
[root@localhost /]#service ipvsadm start    //啓動服務(加載保存的策略)


三、配置NFS共享存儲服務

NFS是一種基於TCP/IP傳輸的網絡文件系統協議,最初由SUN公司開發。

1、使用NFS發佈共享資源

NFS服務的實現依賴於RPC(遠程過程調用)機制,以完成遠程到本地的映射過程。在RHEL 6系統中,需要安裝nfs-utils和rpcbind軟件包來提供NFS共享服務,前者用NFS共享發佈和訪問,後者用於NPC支持。

1)安裝nfs-utils和rpcbind軟件包

[root@localhost /]#yum -y install nfs-utils rpcbind
[root@localhost /]#chkconfig nfs on
[root@localhost /]#chkconfig rpcbind on

2)設置共享目錄

NFS的配置文件爲“/etc/exports”,文件內容默認爲空(無任何共享)。在exports文件中設置共享資源時,記錄格式爲“目錄文件” 客戶機地址(權限選項)。

[root@localhost /]#vim /etc/exports
/var/www/html    192.168.7.0/24(rw,sync,no_root_squash)

其中客戶機地址可以是主機名,IP地址,網段地址,允許使用*,?等通配符;權限選項中rw表示讀寫,sync表示同步寫入,no_root_squash表示客戶機以root身份登錄時將root權限作爲nfsnobody用戶降權對待。

當需要將同一個目錄共享給不同的客戶機,且分配不同的權限時,只需要分隔指定多個“客戶機(權限選項)”即可。

[root@localhost /]#vim /etc/exports
/var/www/html 192.168.7.1(ro) 192.168.7.10(rw)

3)啓動NFS共享服務程序

[root@localhost /]#service rpcbind start
[root@localhost /]#service nfs start
[root@localhost /]#netstat -anpt | grep rpcbind

4)查看本機發布的NFS共享目錄

[root@localhost /]#showmount -e

2、在客戶機上訪問NFS共享資源

NFS協議的目標是提供一種網絡文件系統,因此對NFS共享的訪問方式也使用mount命令來進行掛載,對應的文件系統內型爲NFS。

1)安裝rpcbind軟件包,並啓用rpcbind服務

若要正常訪問NFS共享資源,客戶機中也需要安裝rpcbind軟件包,並啓用rpcbind系統服務;另外,爲了是showmount查詢工具,建議將nfs-utils軟件包也一起裝上。

[root@localhost /]#yum -y install rpcbind nfs-utils
[root@localhost /]#chkconfig rpcbind on
[root@localhost /]#service rpcbind start

2)手動掛載NFS目錄

[root@localhost /]#mount 192.168.7.250:/var/www/html /var/www/html

完成掛載以後,只要訪問客戶機的“/var/www/html”文件夾,實際上就相當於訪問NFS服務器上的“/var/www/html”文件夾。

3)fstab自動掛載設置

修改“/etc/fstab”配置文件,加入NFS共享目錄的掛載設置,注意文件系統類型設爲nfs,掛載參數建議添加netdev;若添加soft,intr參數可以實現軟掛載,允許在網絡中斷時放棄掛載。這樣客戶機就可以在每次開機後自動掛載NFS共享資源了。

[root@localhost /]#vim /etc/fstab
......//省略部分內容
192.168.7.250:/var/www/html  nfs  /var/www/html  defaults,_netdev  0 0


四、構建LVS負載均衡羣集實例

1、案例1:構建NAT模式的負載均衡羣集

在NAT模式的羣集中,LVS負載調度器是所有節點訪問Internet的網關服務器,其外網地址172.16.16.172同時也作爲整個羣集的VIP地址。LVS調度器具有兩塊網卡,分別連接內外網絡。拓撲圖如下:

084627627.jpg

對於LVS負載調度器來說,需要使用iptables爲出站配置SNAT轉發規則,以便節點服務器能夠訪問Internet。所有的節點服務器,共享存儲均位於私有網絡內,其默認網關設爲LVS負載調度器的內外地址(192.168.7.254).

1)配置SNAT轉發規則

[root@localhost /]#vim /etc/sysctl.conf
......//省略部分內容
net.ipv4.ip_forward = 1
[root@localhost /]#sysctl -p
[root@localhost /]#iptables -t nat -A POSTROUTING -s 192.168.7.0/24 -o eth0 -j SNAT --to-source 172.16.16.172

2)配置負載分配策略

[root@localhost /]#service ipvsadm stop     //清楚原有策略
[root@localhost /]#ipvsadm -A -t 172.16.16.172:80 -s rr
[root@localhost /]#ipvsadm -a -t 172.16.16.172:80 -r 192.168.7.21:80 -m -w 1
[root@localhost /]#ipvsadm -a -t 172.16.16.172:80 -r 192.168.7.22:80 -m -w 1
[root@localhost /]#ipvsadm -a -t 172.16.16.172:80 -r 192.168.7.23:80 -m -w 1
[root@localhost /]#ipvsadm -a -t 172.16.16.172:80 -r 192.168.7.24:80 -m -w 1
[root@localhost /]#service ipvsadm save     //保存策略
[root@localhost /]#chkconfig ipvsadm on

3)配置節點服務器

所有節點服務器均使用相同的配置,包括httpd服務端口 ,網站文檔內容。實際上各節點的網站文檔可存放在共享存儲設備上,從而免去同步過程。

[root@localhost /]#yum -y install httpd
[root@localhost /]#mount 192.168.7.250:/var/www/html /var/www/html
[root@localhost /]#vim /var/www/html/index.html
<h1>負載均衡測試網頁!!!</h1>
[root@localhost /]#service httpd start
[root@localhost /]#chkcofnig httpd on

4)測試LVS羣集

安排多臺測試機,從Internet中直接訪問http://172.16.16.172將能夠看到由真實服務器提供的網頁內容——如果各節點的網頁不同,則不同客戶機看到的網頁也可能不以樣。可以使用ipvsadm工具查看當前連接負載的情況。(在調度器上進行查詢)

[root@localhost /]#ipvsadm -Ln

2、案例2:構建DR模式的負載均衡羣集

在DR模式的羣集中,LVS負載調度器作爲羣集的訪問入口,但不作爲網關使用;服務器池中的所有節點都各自接入Internet,發送給客戶機的WEB響應數據包不需要經過LVS負載調度器。

093336727.jpg

這種方式入站,出站訪問數據被分別處理,因此LVS負載調度器和所有的節點服務器都需要配置有VIP地址,以便響應對整個羣集的訪問。考慮到數據存儲的安全性,共享存儲設備會放在內部的專用網絡中。

1)配置調度器的虛擬IP地址(VIP)

採用虛接口的方式(eth0:0),爲網卡eth0綁定VIP地址,以便響應羣集訪問。配置結果爲eht0 172.16.16.173/24,eth0:0 172.16.16.172/24

[root@localhost /]#cd /etc/sysconfig/network-scripts/
[root@localhost network-scripts]#cp ifcfg-eth0 ifcfg-eth0:0
[root@localhost network-scripts]#vim ifcfg-eth0;0
......//省略部分內容
DEVICE=eht0:0
ONBOOT=yes
IPADDR=172.16.16.172
NETMASK=255.255.255.0
[root@localhost network-scripts]#service network restart

2)調整/proc響應參數

對於DR羣集模式來說,由於LVS負載調度器和各節點需要公用VIP地址,爲了避免網絡內的ARP解析出現異常,應關閉Linux內核的重定向參數響應。

[root@localhost /]#vim /etc/sysctl.conf
......//省略部分內容
net.ipv4.conf.all.send_redirects = 0
net.ipv4.conf.default.send_redirects = 0
net.ipv4.conf.eth0.send_redirects = 0
[root@localhost /]#sysctl -p

3)配置負載分配策略

[root@localhost /]#service ipvsadm stop
[root@localhost /]#ipvsadm -A -t 172.16.16.172:80 -s rr
[root@localhost /]#ipvsadm -a -t 172.16.16.172:80 -r 172.16.16.177:80 -g -w 1
[root@localhost /]#ipvsadm -a -t 172.16.16.172:80 -r 172.16.16.178:80 -g -w 1
[root@localhost /]#ipvsadm -a -t 172.16.16.172:80 -r 172.16.16.179:80 -g -w 1
[root@localhost /]#ipvsadm -a -t 172.16.16.172:80 -r 172.16.16.180:80 -g -w 1
[root@localhost /]#service ipvsadm save
[root@localhost /]#chkconfig ipvsadm on

4)配置節點服務器的虛擬IP地址(VIP)

在每個節點服務器,同樣需要具有VIP地址172.16.16.172,但此地址僅用作發送WEB響應數據包的源地址,並不需要監聽客戶機的訪問請求(訪問請求有調度器監聽)。因此使用虛接口lo:0來承載VIP地址,併爲本機添加一條路由記錄,將訪問VIP的數據限制在本地以避免通信絮亂。

[root@localhost /]#cd /etc/sysconfig/network-scripts/
[root@localhost network-scripts]#cp ifcfg-lo ifcfg-lo:0
[root@localhost network-scripts]#vim ifcfg-lo:0
......//省略部分內容
DEVICE=lo:0
ONBOOT=yes
IPADDR=172.16.16.172
NETMASK=255.255.255.255
[root@localhost network-scripts]#service network restart
[root@localhost network-scripts]#vim /etc/rc.local
......//省略部分內容
/sbin/route add -host 172.16.16.172 dev lo:0
[root@localhost network-scripts]#route add -host 172.16.16.172 dev lo:0

5)調整/proc響應參數

[root@localhost /]#vim /etc/sysctl.conf
......//省略部分內容
net.ipv4.conf.all.arp_ignore = 1
net.ipve.conf.all.arp_announce = 2
net.ipv4.conf.default.arp_ignore = 1
net.ipve.conf.default.arp_announce = 2
net.ipv4.conf.lo.arp_ignore = 1
net.ipve.conf.lo.arp_announce = 2
[root@localhost /]#sysctl -p

6)配置節點服務器

[root@localhost /]#yum -y install httpd
[root@localhost /]#mount 192.168.7.250:/var/www/html /var/www/html
[root@localhost /]#vim /var/www/html/index.html
<h1>負載均衡測試網頁!!!</h1>
[root@localhost /]#service httpd start
[root@localhost /]#chkcofnig httpd on

7)測試LVS羣集

安排多臺測試機,從Internet中直接訪問http://172.16.16.172將能夠看到由真實服務器提供的網頁內容——如果各節點的網頁不同,則不同客戶機看到的網頁也可能不以樣。可以使用ipvsadm工具查看當前連接負載的情況。(在調度器上進行查詢)

[root@localhost /]#ipvsadm -Ln


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