1、羣集技術的概述html
一、羣集的類型
算法
不管是那種羣集,都至少包括兩臺節點服務器,而外表現爲一個總體,只提供一個訪問入口,至關於一臺大型計算機。根據羣集所針對的目標差別,可分爲如下三種內型。vim
負載均衡羣集:以提升應用系統的響應能力,儘量處理更多的訪問請求,減小延遲,得到高併發,高負載的成天性能,例如:「DNS輪詢」,「應用層交換」,「反向代理」等均可以作負載均衡羣集。
安全
高可用羣集:以提升應用系統的可靠性,儘量地減小中斷時間,確保服務的連續性,達到高可用的容錯效果,例如:「故障切換」,「雙機熱備」,「多機熱備」等都屬於高可用羣集。服務器
高性能運算羣集:以提升應用系統的CPU運算速度,擴展硬件資源和分析能力,得到至關於大型,超級計算機的高性能運算能力,例如:「雲計算」等就屬於高性能運算羣集的一種。網絡
二、負載均衡的分層結構併發
在典型的負載均衡羣集中,包括如下三個層次的組件。
負載均衡
第一層:負載調度器,這是訪問整個羣集系統的惟一入口,多外使用全部服務器共有的VIP(虛擬IP)地址,也稱羣集IP地址。一般會配置主,備兩臺調度器實現熱備,當主調度器失效之後平滑替換至備用調度器,確保高可用性。ide
第二層:服務器池:羣集所提供的應用服務由服務器池承擔,其中的每一個節點具備獨立的RIP(真實IP)地址,只處理調度器分發過來的客戶機請求。高併發
第三層:共享存儲,爲服務器池中的全部節點提供穩定,一致的文件存取服務,確保整個羣集的統一性。在Linux環境中,共享存儲可使用NAS設備或者提供NFS(網絡文件系統)共享服務的專用服務器。
典型的負載均衡羣集結構拓撲圖以下:
三、負載均衡的工做模式
關於羣集的負載調度技術,能夠基於IP,端口,內容等進行分發,其中基於IP的負載調度室效率最高的。基於IP的負載均衡中,常見的有地址轉換,IP隧道,直接路由這三種工做模式。以下圖所示:
地址轉換:簡稱NAT模式,相似於防火牆的私有網絡結構,負載調度器做爲全部服務器節點的網關,即做爲客戶機的訪問入口,也是個節點回應客戶機的訪問出口,服務器節點使用私有IP地址,與負載均衡調度器位於同一個物理網絡,安全性要優於其餘兩種方式。
IP隧道:簡稱TUN模式,採用開放式的網絡結構,負載調度器僅做爲客戶機的入口,各節點經過各自的Internet鏈接直接回應客戶機,而再也不通過負調度器。服務器節點分散在互聯網的不一樣位置,具備獨立的公網IP地址,一般專用IP隧道與負載調度器相互通訊。
直接路由:簡稱DR模式,採用半開放式的網絡結構,與TUN模式的結構相似,但個節點並非分散在各地,而是與調度器位於同一個物理網絡。負載調度器與個節點服務器經過本地網絡鏈接,不須要創建專用的IP隧道。
2、LVS虛擬服務器概述
Linux Virtual Server是針對Linux內核開發的一個負載均衡項目,LVS如今已經成爲Linux內核的一部分,默認編譯爲ip_vs模塊,必要時可以自動調用。
一、LVS的負載調度算法
輪詢(rr):將收到的訪問請求按照順序輪流分配給羣集中的各節點,均等地對待每一臺服務器,而無論服務器實際的鏈接數和系統負載。
加權輪詢(wrr):根據真實服務器的處理能力輪流分配收到的訪問請求,調度器能夠自動查詢各節點的負載狀況,並動態調整其權重。
最少鏈接(lc):根據真實服務器已創建的鏈接數進行分配,將收到的訪問請求優先分配給鏈接數最少的節點。
加權最少鏈接(wlc):在服務節點的性能差別較大的狀況下,能夠爲真實服務器自動調整權重,權重較高的節點將承載更大比例的活動鏈接負載。
二、加載LVS內核模塊,安裝ipvsadm管理工具
ipvsadm是在負載調度器上使用的LVS羣集管理工具,經過調用ip_vs模塊來添加,刪除服務器節點,以及查看羣集的運行狀態。
[root@localhost /]#modprobe ip_vs [root@localhost /]#rpm -ivh /media/Packages/ipvsadm-1.25-9.e16.i686.rpm
三、使用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 //啓動服務(加載保存的策略)
3、配置NFS共享存儲服務
NFS是一種基於TCP/IP傳輸的網絡文件系統協議,最初由SUN公司開發。
一、使用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
二、在客戶機上訪問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
4、構建LVS負載均衡羣集實例
一、案例1:構建NAT模式的負載均衡羣集
在NAT模式的羣集中,LVS負載調度器是全部節點訪問Internet的網關服務器,其外網地址172.16.16.172同時也做爲整個羣集的VIP地址。LVS調度器具備兩塊網卡,分別鏈接內外網絡。拓撲圖以下:
對於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:構建DR模式的負載均衡羣集
在DR模式的羣集中,LVS負載調度器做爲羣集的訪問入口,但不做爲網關使用;服務器池中的全部節點都各自接入Internet,發送給客戶機的WEB響應數據包不須要通過LVS負載調度器。
這種方式入站,出站訪問數據被分別處理,所以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