1. 程式人生 > >Linux系統之LVS負載均衡群集

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模組來新增,刪除伺服器節點,以及檢視群集的執行狀態。

[[email protected] /]#modprobe ip_vs
[[email protected] /]#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地址。

[[email protected] /]#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秒。

[[email protected] /]#ipvsadmin -a -t 172.16.16.172:80 -r 192.168.7.21:80 -m -w 1
[[email protected] /]#ipvsadmin -a -t 172.16.16.172:80 -r 192.168.7.22:80 -m -w 1
[[email protected] /]#ipvsadmin -a -t 172.16.16.172:80 -r 192.168.7.23:80 -m -w 1
[[email protected] /]#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”將以數字形式顯示地址,埠等資訊。

[[email protected] /]#ipvsadm -L -n       //檢視節點狀態
[[email protected] /]#ipvsadm -Lnc        //檢視負載連線情況

4)刪除伺服器節點

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

[[email protected] /]#ipvsadm -d -r 192.168.7.24:80 -t 172.16.16.172:80
[[email protected] /]#ipvsadm -D -t 172.16.16.172:80   //刪除整個虛擬伺服器

5)儲存負載分配策略

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

[[email protected] /]#ipvsadm-save > /etc/sysconfig/ipvsadm     //儲存策略
[[email protected] /]#service ipvsadm stop     //停止服務(清楚策略)
[[email protected] /]#service ipvsadm start    //啟動服務(載入儲存的策略)

三、配置NFS共享儲存服務

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

1、使用NFS釋出共享資源

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

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

[[email protected] /]#yum -y install nfs-utils rpcbind
[[email protected] /]#chkconfig nfs on
[[email protected] /]#chkconfig rpcbind on

2)設定共享目錄

NFS的配置檔案為“/etc/exports”,檔案內容預設為空(無任何共享)。在exports檔案中設定共享資源時,記錄格式為“目錄檔案” 客戶機地址(許可權選項)。

[[email protected] /]#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使用者降權對待。

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

[[email protected] /]#vim /etc/exports
/var/www/html 192.168.7.1(ro) 192.168.7.10(rw)

3)啟動NFS共享服務程式

[[email protected] /]#service rpcbind start
[[email protected] /]#service nfs start
[[email protected] /]#netstat -anpt | grep rpcbind

4)檢視本機發布的NFS共享目錄

[[email protected] /]#showmount -e

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

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

1)安裝rpcbind軟體包,並啟用rpcbind服務

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

[[email protected] /]#yum -y install rpcbind nfs-utils
[[email protected] /]#chkconfig rpcbind on
[[email protected] /]#service rpcbind start

2)手動掛載NFS目錄

[[email protected] /]#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共享資源了。

[[email protected] /]#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轉發規則

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

2)配置負載分配策略

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

3)配置節點伺服器

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

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

4)測試LVS群集

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

[[email protected] /]#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

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

2)調整/proc響應引數

對於DR群集模式來說,由於LVS負載排程器和各節點需要公用VIP地址,為了避免網路內的ARP解析出現異常,應關閉Linux核心的重定向引數響應。

[[email protected] /]#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
[[email protected] /]#sysctl -p

3)配置負載分配策略

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

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

在每個節點伺服器,同樣需要具有VIP地址172.16.16.172,但此地址僅用作傳送WEB響應資料包的源地址,並不需要監聽客戶機的訪問請求(訪問請求有排程器監聽)。因此使用虛介面lo:0來承載VIP地址,併為本機新增一條路由記錄,將訪問VIP的資料限制在本地以避免通訊絮亂。

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

5)調整/proc響應引數

[[email protected] /]#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
[[email protected] /]#sysctl -p

6)配置節點伺服器

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

7)測試LVS群集

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

[[email protected] /]#ipvsadm -Ln