【Linux】叢集和負載均衡

楊奇龍發表於2010-10-24

叢集和負載均衡的概念 
叢集(Cluster)
所謂叢集是指一組獨立的計算機系統構成的一個松耦合的多處理器系統,它們之間透過網路實現程式間的通訊。應用程式可以透過網路共享記憶體進行訊息傳送,實現分散式計算機。 
負載均衡(Load Balance)
網路的負載均衡是一種動態均衡技術,透過一些工具實時地分析資料包,掌握網路中的資料流量狀況,把任務合理均衡地分配出去。這種技術基於現有網路結構,提供了一種擴充套件伺服器頻寬和增加伺服器吞吐量的廉價有效的方法,加強了網路資料處理能力,提高了網路的靈活性和可用性。
特點
(1)高可靠性(HA)。利用叢集管理軟體,當主伺服器故障時,備份伺服器能夠自動接管主伺服器的工作,並及時切換過去,以實現對使用者的不間斷服務。 
(2)高效能運算(HP)。即充分利用叢集中的每一臺計算機的資源,實現複雜運算的並行處理,通常用於科學計算領域,比如基因分析、化學分析等。 
(3)負載平衡。即把負載壓力根據某種演算法合理分配到叢集中的每一臺計算機上,以減輕主伺服器的壓力,降低對主伺服器的硬體和軟體要求。 

LVS系統結構與特點 
1. Linux Virtual Server:簡稱LVS。是由中國一個Linux程式設計師章文嵩博士發起和領導的,基於Linux系統的伺服器叢集解決方案,其實現目標是建立一個具有良好的擴充套件性、高可靠性、高效能和高可用性的體系。許多商業的叢集產品,比如RedHat的Piranha、Turbo Linux公司的Turbo Cluster等,都是基於LVS的核心程式碼的。
2. 體系結構:使用LVS架設的伺服器叢集系統從體系結構上看是透明的,終端使用者只感覺到一個虛擬伺服器。物理伺服器之間可以透過高速的LAN或分佈在各地的WAN相連。最前端是負載均衡器,它負責將各種服務請求分發給後面的物理伺服器,讓整個叢集表現得像一個服務於同一IP地址的虛擬伺服器。 
3. LVS的三種模式工作原理和優缺點: Linux Virtual Server主要是在負載均衡器上實現的,負載均衡器是一臺加了LVS Patch的2.2.x版核心的Linux系統。LVS Patch可以透過重新編譯核心的方法加入核心,也可以當作一個動態的模組插入現在的核心中。 
負載均衡器可以執行在以下三種模式下: 
(1)Virtual Server via NAT(VS-NAT):用地址翻譯實現虛擬伺服器。地址轉換器有能被外界訪問到的合法IP地址,它修改來自專有網路的流出包的地址。外界看起來包是來自地址轉換器本身,當外界包送到轉換器時,它能判斷出應該將包送到內部網的哪個節點。優點是節省IP地址,能對內部進行偽裝;缺點是效率低,因為返回給請求方的流量經過轉換器。 
(2)Virtual Server via IP Tunneling (VS-TUN):用IP隧道技術實現虛擬伺服器。這種方式是在叢集的節點不在同一個網段時可用的轉發機制,是將IP包封裝在其他網路流量中的方法。為了安全的考慮,應該使用隧道技術中的VPN,也可使用租用專線。 叢集所能提供的服務是基於TCP/IP的Web服務、Mail服務、News服務、DNS服務、Proxy伺服器等等. 
(3)Virtual Server via Direct Routing(VS-DR):用直接路由技術實現虛擬伺服器。當參與叢集的計算機和作為控制管理的計算機在同一個網段時可以用此法,控制管理的計算機接收到請求包時直接送到參與叢集的節點。優點是返回給客戶的流量不經過控制主機,速度快開銷少。 
以四臺伺服器為例實現負載均衡:

安裝配置LVS 
1. 安裝前準備: 
(1)首先說明,LVS並不要求叢集中的伺服器規格劃一,相反,可以根據伺服器的不同配置和負載狀況,調整負載分配策略,充分利用叢集環境中的每一臺伺服器。如下表: 
Srv Eth0 Eth0:0 Eth1 Eth1:0 
vs1 10.0.0.1 10.0.0.2 192.168.10.1 192.168.10.254 
vsbak 10.0.0.3 192.168.10.102 
real1 192.168.10.100 
real2 192.168.10.101
其中,10.0.0.2是允許使用者訪問的IP。 
(2)這4臺伺服器中,vs1作為虛擬伺服器(即負載平衡伺服器),負責將使用者的訪問請求轉發到叢集內部的real1,real2,然後由real1,real2分別處理。 Client為客戶端測試機器,可以為任意作業系統。 
(3)所有OS為redhat6.2,其中vs1 和vsbak 的核心是2.2.19, 而且patch過ipvs的包, 所有real server的Subnet mask 都是24位, vs1和vsbak 的10.0.0. 網段是24 位。
2.理解LVS中的相關術語
(1) ipvsadm :ipvsadm是LVS的一個使用者介面。在負載均衡器上編譯、安裝ipvsadm。 
(2) 排程演算法: LVS的負載均衡器有以下幾種排程規則:Round-robin,簡稱rr;weighted Round-robin,簡稱wrr;每個新的連線被輪流指派到每個物理伺服器。Least-connected,簡稱lc;weighted Least-connected,簡稱wlc,每個新的連線被分配到負擔最小的伺服器。 
(3) Persistent client connection,簡稱pcc,(持續的客戶端連線,核心2.2.10版以後才支援)。所有來自同一個IP的客戶端將一直連線到同一個物理伺服器。超時時間被設定為360秒。Pcc是為https和cookie服務設定的。在這處排程規則下,第一次連線後,所有以後來自相同客戶端的連線(包括來自其它埠)將會傳送到相同的物理伺服器。但這也會帶來一個問題,因為大約有25%的Internet可能具有相同的IP地址。 
(4) Persistent port connection排程演算法:在核心2.2.12版以後,pcc功能已從一個排程演算法(你可以選擇不同的排程演算法:rr、wrr、lc、wlc、pcc)演變成為了一個開關選項(你可以讓rr、 wrr、lc、wlc具備pcc的屬性)。在設定時,如果你沒有選擇排程演算法時,ipvsadm將預設為wlc演算法。 在Persistent port connection(ppc)演算法下,連線的指派是基於埠的,例如,來自相同終端的80埠與443埠的請求,將被分配到不同的物理伺服器上。不幸的是,如果你需要在的網站上採用cookies時將出問題,因為http是使用80埠,然而cookies需要使用443埠,這種方法下,很可能會出現cookies不正常的情況。 
(5)Load Node Feature of Linux Director:讓Load balancer 也可以處理users 請求。 
(6)IPVS connection synchronization。 
(7)ARP Problem of LVS/TUN and LVS/DR:這個問題只在LVS/DR,LVS/TUN 時存在。 
3. 配置例項
(1) 需要的軟體包和包的安裝:
I. piranha-gui-0.4.12-2*.rpm (GUI介面cluster設定工具); 
II. piranha-0.4.12-2*.rpm; 
III. ipchains-1.3.9-6lp*.rpm (架設NAT)。 
取得套件或mount到光碟,進入RPMS目錄進行安裝: 
# rpm -Uvh piranha* 
# rpm -Uvh ipchains* 
(2) real server群: 
真正提供服務的server(如web server),在NAT形式下是以內部虛擬網域的形式,設定如同一般虛擬網域中Client端使用網域:192.168.10.0/24 架設方式同一般使用虛擬IP之區域網路。 
a. 設網路卡IP 
real1 :192.168.10.100/24 
real2 :192.168.10.101/24 
b.每臺server均將default gateway指向192.168.10.254。 192.168.10.254為該網域唯一對外之通道,設定在virtual server上,使該網域進出均需透過virtual server 。 
c.每臺server均開啟httpd功能供web server服務,可以在各real server上放置不同內容之網頁,可由瀏覽器觀察其對各real server讀取網頁的情形。 
d.每臺server都開啟rstatd、sshd、rwalld、ruser、rsh、rsync,並且從Vserver上面拿到相同的lvs.conf檔案。 
(3) virtual server: 
作用在導引封包的對外主機,專職負責封包的轉送,不提供服務,但因為在NAT型式下必須對進出封包進行改寫,所以負擔亦重。 
a.IP設定: 
對外eth0:IP:10.0.0.1 eth0:0 :10.0.0.2 
對內eth1:192.168.10.1 eth1:0 :192.168.10.254 
NAT形式下僅virtual server有真實IP,real server群則為透過virtual server. 
b.設定NAT功能 
# echo 1 >; /proc/sys/net/ipv4/ip_forward 
# echo 1 >; /proc/sys/net/ipv4/ip_always_defrag 
# ipchains -P forward MASQ 
c.設定piranha 進入X-window中 (也可以直接編輯/etc/lvs.cf ) 
a).執行皮膚系統piranha 
b).設定“整體配置”(Global Settings) 主LVS伺服器主機IP:10.0.0.2, 選定網路地址翻譯(預設) NAT路徑名稱: 192.168.10.254, NAT 路徑裝置: eth1:0 
c).設定虛擬伺服器(Virtual Servers) 新增編輯虛擬伺服器部分:(Virtual Server)名稱:(任意取名);應用:http;協議: tcp;連線:80;地址:10.0..0.2;裝置:eth0:0; 重入時間:180 (預設);服務延時:10 (預設);載入監控工具:ruptime (預設);排程策略:Weighted least-connections; 持續性:0 (預設); 持續性遮蔽:255.255.255.255 (預設); 按下啟用:實時伺服器部分:(Real Servers); 新增編輯:名字:(任意取名); 地址:192.168.10.100; 權重:1 (預設) 按下啟用 
另一架real server同上,地址:192.168.10.101。
d). 控制/監控(Controls/Monitoring) 控制:piranha功能的啟用與停止,上述內容設定完成後即可按開始鍵啟用piranha.監控器:顯示ipvsadm設定之routing table內容 可立即更新或定時更新。
(4)備援主機的設定(HA) 
單一virtual server的cluster架構virtual server 負擔較大,提供另一主機擔任備援,可避免virtual server的故障而使對外服務工作終止;備份主機隨時處於預備狀態與virtual server相互偵測 
a.備份主機: 
eth0: IP 10.0.0.3
eth1: IP 192.168.10.102 同樣需安裝piranha,ipvsadm,ipchains等套件 
b.開啟NAT功能(同上面所述)。 
c.在virtual server(10.0.0.2)主機上設定。
a).執行piranha冗餘度 ;
b).按下“啟用冗餘度”;
冗餘LVS伺服器IP: 10.0.0.3;HEARTBEAT間隔(秒數): 2 (預設) 
假定在…秒後進入DEAD狀態: 5 (預設); HEARTBEAT連線埠: 539 (預設) 
c).按下“套用”;
d).至“控制/監控”頁,按下“在當前執行層新增PULSE DEAMON” ,按下“開始”;
e).在監控器按下“自動更新”,這樣可由視窗中看到ipvsadm所設定的routing table,並且動態顯示real server聯機情形,若real server故障,該主機亦會從監視視窗中消失。 
d.啟用備份主機之pulse daemon (執行# /etc/rc.d/init.d/pulse start)。 
至此,HA功能已經啟用,備份主機及virtual server由pulse daemon定時相互探詢,一但virtual server故障,備份主機立刻啟用代替;至virtual server 正常上線後隨即將工作交還virtual server。 

LVS測試 
經過了上面的配置步驟,現在可以測試LVS了,步驟如下: 
1. 分別在vs1,real1,real2上執行/etc/lvs/rc.lvs_dr。注意,real1,real2上面的/etc/lvs目錄是vs2輸出的。如果您的NFS配置沒有成功,也可以把vs1上/etc/lvs/rc.lvs_dr複製到real1,real2上,然後分別執行。確保real1,real2上面的apache已經啟動並且允許telnet。 
2. 測試Telnet:從client執行telnet 10.0.0.2, 如果登入後看到如下輸出就說明叢集已經開始工作了:(假設以guest使用者身份登入) 
[guest@real1 guest]$——說明已經登入到伺服器real1上。 
再開啟一個telnet視窗,登入後會發現系統提示變為: 
[guest@real2 guest]$——說明已經登入到伺服器real2上。 
3. 測試http:從client執行iexplore
因為在real1 和real2 上面的測試頁不同,所以登入幾次之後,顯示出的頁面也會有所不同,這樣說明real server 已經在正常工作了。
本文出自《網管員世界》2002年第10期“系統維護”欄目

來自 “ ITPUB部落格 ” ,連結:http://blog.itpub.net/22664653/viewspace-676630/,如需轉載,請註明出處,否則將追究法律責任。

相關文章