一、負載均衡集群介紹
① 集群(cluster)技術是一種較新的技術,通過集群技術,可以在付出較低成本的情況下獲得在性能、可靠性、靈活性方面的相對較高的收益,其任務調度則是集群系統中的核心技術。
② 集群是一組相互獨立的、通過高速網絡互聯的計算機,它們構成了一個組,並以單一系統的模式加以管理。一個客戶與集群相互作用時,集群像是一個獨立的服務器。
③ 集群組成后,可以利用多個計算機和組合進行海量請求處理(負載均衡),從而獲得很高的處理效率,也可以用多個計算機做備份(高可用),使得任何一個機器壞了整個系統還是能正常運行。集群在目前互聯網公司是必備的技術,極大提高互聯網業務的可用性和可縮放性。
① 負載均衡(Load Balance):負載均衡集群為企業需求提供了可解決容量問題的有效方案。負載均衡集群使負載可以在計算機集群中盡可能平均地分攤處理。
② 負載通常包括應用程序處理負載和網絡流量負載。這樣的系統非常適合向使用同一組應用程序的大量用戶提供服務。每個節點都可以承擔一定的處理負載,並且可以實現處理負載在節點之間的動態分配,以實現負載均衡。對於網絡流量負載,當網絡服務程序接受了高入網流量,以致無法迅速處理,這時,網絡流量就會發送給在其它節點上運行的網絡服務程序。也可根據服務器的承載能力,進行服務請求的分發,從而使用戶的請求得到更快速的處理。
負載均衡技術類型:基於4層負載均衡技術和基於7層負載均衡技術
硬件負載均衡產品:F5 BIG-IP 、Citrix Netscaler 、深信服 、Array 、Radware
軟件負載均衡產品: LVS(Linux Virtual Server)、 Haproxy、Nginx、Ats(apache traffic server)
二、lvs 的介紹
(1)LVS是Linux Virtual Server的簡稱,也就是Linux虛擬服務器, 是一個由章文嵩博士發起的自由軟件項目,它的官方站點是www.linuxvirtualserver.org。現在LVS已經是 Linux標准內核的一部分,在Linux2.4內核以前,使用LVS時必須要重新編譯內核以支持LVS功能模塊,但是從Linux2.4內核以后,已經完全內置了LVS的各個功能模塊,無需給內核打任何補丁,可以直接使用LVS提供的各種功能。
(2)LVS自從1998年開始,發展到現在已經是一個比較成熟的技術項目了。可以利用LVS技術實現高可伸縮的、高可用的網絡服務,例如WWW服務、Cache服務、DNS服務、FTP服務、MAIL服務、視頻/音頻點播服務等等,有許多比較著名網站和組織都在使用LVS架設的集群系統,例如:Linux的門戶網站(www.linux.com)、向RealPlayer提供音頻視頻服務而聞名的Real公司(www.real.com)、全球最大的開源網站(sourceforge.net)等。
(3)LVS軟件作用:通過LVS提供的負載均衡技術和Linux操作系統實現一個高性能、高可用的服務器群集,它具有良好可靠性、可擴展性和可操作性。從而以低廉的成本實現最優的服務性能。
高並發連接:LVS基於內核網絡層面工作,有超強的承載能力和並發處理能力。單台LVS負載均衡器,可支持上萬並發連接。
穩定性強:是工作在網絡4層之上僅作分發之用,這個特點也決定了它在負載均衡軟件里的性能最強,穩定性最好,對內存和cpu資源消耗極低。
成本低廉:硬件負載均衡器少則十幾萬,多則幾十萬上百萬,LVS只需一台服務器和就能免費部署使用,性價比極高。
配置簡單:LVS配置非常簡單,僅需幾行命令即可完成配置,也可寫成腳本進行管理。
支持多種算法:支持多種論調算法,可根據業務場景靈活調配進行使用
支持多種工作模型:可根據業務場景,使用不同的工作模式來解決生產環境請求處理問題。
應用范圍廣:因為LVS工作在4層,所以它幾乎可以對所有應用做負載均衡,包括http、數據庫、DNS、ftp服務等等
缺點:工作在4層,不支持7層規則修改,機制過於龐大,不適合小規模應用。
3、LVS 核心組件和專業術語
ipvsadm:用戶空間的命令行工具,用於管理集群服務及集群服務上的RS等;
ipvs:工作於內核上的netfilter INPUT鈎子之上的程序,可根據用戶定義的集群實現請求轉發;
VIP:Director Virtual IP #負載均衡器虛擬IP
RIP:Real Server IP #后端請求處理服務器IP
4、LVS工作內核模型及工作模式
① 當客戶端的請求到達負載均衡器的內核空間時,首先會到達PREROUTING鏈。
② 當內核發現請求數據包的目的地址是本機時,將數據包送往INPUT鏈。
③ LVS由用戶空間的ipvsadm和內核空間的IPVS組成,ipvsadm用來定義規則,IPVS利用ipvsadm定義的規則工作,IPVS工作在INPUT鏈上,當數據包到達INPUT鏈時,首先會被IPVS檢查,如果數據包里面的目的地址及端口沒有在規則里面,那么這條數據包將被放行至用戶空間。
④ 如果數據包里面的目的地址及端口在規則里面,那么這條數據報文將被修改目的地址為事先定義好的后端服務器,並送往POSTROUTING鏈。
三、LVS負載均衡四種工作模式
1、NAT工作模式
Virtual Server via NAT(VS-NAT):用地址翻譯實現虛擬服務器。地址轉換器有能被外界訪問到的合法IP地址,它修改來自專有網絡的流出包的地址。外界看起來包是來自地址轉換器本身,當外界包送到轉換器時,它能判斷出應該將包送到內部網的哪個節點。優點是節省IP 地址,能對內部進行偽裝;缺點是效率低,因為返回給請求方的流量經過轉換器。
(2)工作流程
(a). 當用戶請求到達Director Server,此時請求的數據報文會先到內核空間的PREROUTING鏈。 此時報文的源IP為CIP,目標IP為VIP
(b). PREROUTING檢查發現數據包的目標IP是本機,將數據包送至INPUT鏈
(c). IPVS比對數據包請求的服務是否為集群服務,若是,修改數據包的目標IP地址為后端服務器IP,然后將數據包發至POSTROUTING鏈。 此時報文的源IP為CIP,目標IP為RIP
(d). POSTROUTING鏈通過選路,將數據包發送給Real Server
(e). Real Server比對發現目標為自己的IP,開始構建響應報文發回給Director Server。 此時報文的源IP為RIP,目標IP為CIP
(f). Director Server 把RS來到響應包,通過FORWORD 轉發給client 在響應客戶端前,此時會將源IP地址修改為自己的VIP地址,然后響應給客戶端。 此時報文的源IP為VIP,目標IP為CIP
2、DR工作模式
Virtual Server via Direct Routing(VS-DR):用直接路由技術實現虛擬服務器。當參與集群的計算機和作為控制管理的計算機在同一個網段時可以用此方法,控制管理的計算機接收到請求包時直接送到參與集群的節點。直接路由模式比較特別,很難說和什么方面相似,前種模式基本上都是工作在網絡層上(三層),而直接路由模式則應該是工作在數據鏈路層上(二層)。
DR和REAL SERVER都使用同一個IP對外服務。但只有DR對ARP請求進行響應,所有REAL SERVER對本身這個IP的ARP請求保持靜默。也就是說,網關會把對這個服務IP的請求全部定向給DR,而DR收到數據包后根據調度算法,找出對應的 REAL SERVER,把目的MAC地址改為REAL SERVER的MAC並發給這台REAL SERVER。這時REAL SERVER收到這個數據包,則等於直接從客戶端收到這個數據包無異,處理后直接返回給客戶端。由於DR要對二層包頭進行改換,所以DR和REAL SERVER之間必須在一個廣播域,也可以簡單的理解為在同一台交換機上
(3)工作流程
(a) 當用戶請求到達Director Server,此時請求的數據報文會先到內核空間的PREROUTING鏈。 此時報文的源IP為CIP,目標IP為VIP
(b) PREROUTING檢查發現數據包的目標IP是本機,將數據包送至INPUT鏈
(c) IPVS比對數據包請求的服務是否為集群服務,若是,將請求報文中的源MAC地址修改為DIP的MAC地址,將目標MAC地址修改RIP的MAC地址,然后將數據包發至POSTROUTING鏈。 此時的源IP和目的IP均未修改,僅修改了源MAC地址為DIP的MAC地址,目標MAC地址為RIP的MAC地址
(d) 由於DS和RS在同一個網絡中,所以是通過二層,數據鏈路層來傳輸。POSTROUTING鏈檢查目標MAC地址為RIP的MAC地址,那么此時數據包將會發至Real Server。
(e) RS發現請求報文的MAC地址是自己的MAC地址,就接收此報文。處理完成之后,將響應報文通過lo接口傳送給eth0網卡然后向外發出。 此時的源IP地址為VIP,目標IP為CIP
① 保證前端路由將目標地址為VIP報文統統發給Director Server,而不是RS
② RS可以使用私有地址;也可以是公網地址,如果使用公網地址,此時可以通過互聯網對RIP進行直接訪問
③ RS跟Director Server必須在同一個物理網絡中
④ 所有的請求報文經由Director Server,但響應報文必須不能進過Director Server
⑦ RS的網關絕不允許指向DIP(因為我們不允許他經過director)
3、TUN工作模式
用IP隧道技術實現虛擬服務器。這種方式是在集群的節點不在同一個網段時可用的轉發機制,是將IP包封裝在其他網絡流量中的方法。為了安全的考慮,應該使用隧道技術中的VPN,也可使用租用專線。 集群所能提供的服務是基於TCP/IP的Web服務、Mail服務、News服務、DNS服務、Proxy服務器等等.
TUN模式:采用NAT技術時,由於請求和響應報文都必須經過調度器地址重寫,當客戶請求越來越多時,調度器的處理能力將成為瓶頸。為了解決這個問題,調度器把請求報文通過IP隧道轉發至真實服務器,而真實服務器將響應直接返回給客戶,所以調度器只處理請求報文。由於一般網絡服務應答比請求報文大許多,采用 VS/TUN技術后,集群系統的最大吞吐量可以提高10倍
(a) 客戶端將請求發往前端的負載均衡器,請求報文源地址是CIP,目標地址為VIP。
(b) 負載均衡器收到報文后,發現請求的是在規則里面存在的地址,那么它將在客戶端請求報文的首部再封裝一層IP報文,將源地址改為DIP,目標地址改為RIP,並將此包發送給RS。
(c) RS收到請求報文后,會首先拆開第一層封裝,然后發現里面還有一層IP首部的目標地址是自己lo接口上的VIP,所以會處理次請求報文,並將響應報文通過lo接口送給eth0網卡直接發送給客戶端。注意:需要設置lo接口的VIP不能在共網上出現
4、full-nat 工作模式
通過請求報文的源地址為DIP,目標為RIP來實現轉發:對於響應報文而言,修改源地址為VIP,目標地址為CIP來實現轉發:
架構特點:這是一種對nat模型的改進,是一個擴展,使得RS與Director可以處於不同網絡。
(2)RIP和DIP可以不再同一個網絡中,且RIP的網關未必需要指向DIP;
(5)請求報文經由Director,響應報文也經由Director
5、四者的區別
機器名稱 |
IP配置 |
服務角色 |
備注 |
lvs-server |
VIP:172.16.100.1 DIP:192.168.100.1 |
負載均衡器 |
開啟路由功能 (VIP橋接、DIP僅主機) |
rs01 |
RIP:192.168.100.2 |
后端服務器 |
網關指向DIP(僅主機) |
rs02 |
RIP:192.168.100.3 |
后端服務器 |
網關指向DIP(僅主機)
|
rs03 |
RIP:192.168.100.4 |
后端服務器 |
網關指向DIP(僅主機)
|
lvs-nat與lvs-fullnat:請求和響應報文都經由Director
lvs-nat:RIP的網關要指向DIP
lvs-fullnat:RIP和DIP未必在同一IP網絡,但要能通信
lvs-dr與lvs-tun:請求報文要經由Director,但響應報文由RS直接發往Client
lvs-dr:通過封裝新的MAC首部實現,通過MAC網絡轉發
lvs-tun:通過在原IP報文外封裝新IP頭實現轉發,支持遠距離通信
四、LVS ipvsadm 命令的使用
1、yum install ipvsadm -y #在LVS-server安裝lvs管理軟件
規則重載工具:/usr/sbin/ipvsadm-restore
配置文件:/etc/sysconfig/ipvsadm-config
① -A --add-service 在服務器列表中新添加一條新的虛擬服務器記錄
-s --scheduler 使用的調度算法, rr | wrr | lc | wlc | lblb | lblcr | dh | sh | sed | nq 默認調度算法是 wlc
例:ipvsadm -A -t 192.168.1.2:80 -s wrr
② -a --add-server 在服務器表中添加一條新的真實主機記錄
-t --tcp-service 說明虛擬服務器提供tcp服務
-u --udp-service 說明虛擬服務器提供udp服務
-m --masquerading 指定LVS工作模式為NAT模式
-g --gatewaying 指定LVS工作模式為直接路由器模式(也是LVS默認的模式)
-p 會話保持時間,定義流量唄轉到同一個realserver的會話存留時間
例:ipvsadm -a -t 192.168.1.2:80 -r 192.168.2.10:80 -m -w 1
③ -E -edit-service 編輯內核虛擬服務器表中的一條虛擬服務器記錄。
-D -delete-service 刪除內核虛擬服務器表中的一條虛擬服務器記錄。
-S -save 保存虛擬服務器規則,輸出為-R 選項可讀的格式
-e -edit-server 編輯一條虛擬服務器記錄中的某條真實服務器記錄
-d -delete-server 刪除一條虛擬服務器記錄中的某條真實服務器記錄
-Z –zero 虛擬服務表計數器清零(清空當前的連接數量等)
五、實現LVS持久連接
由於HTTP是一種無狀態協議,每次請求完畢之后就立即斷開了,當用戶瀏覽購物網站挑選商品的時候,看到一件商品加入購物車,此過程被重定向到了REALSERVER1上面來,當把第二件商品加入購物車又被重定向到了REALSERVER2上面,最后結賬的時候在REALSERVER2上面,只有一件商品,這顯然是用戶無法接受的,此時就需要一種持久連接機制,來把同一用戶的HTTP請求在超時時間內都重定向到同一台REALSERVER,超時時間可以自己定義,比如說2個小時,在超時時間內服務器會不斷追蹤用戶的訪問請求,把某一用戶的所有請求都轉發到同一台REALSERVER上面
對於電子商務網站來說,用戶在挑選商品的時候使用的是80端口來瀏覽的,當付款的時候則是通過443的ssl加密的方式,當然當用戶挑選完商品付款的時候我們當然不希望https的443跳轉到另外一台REALSERVER,很顯然應該是同一REALSERVER才對,這時候就要用到基於防火牆標記的持久連接,通過定義端口的姻親關系來實現
無論ipvs使用何種scheduler,其都能夠實現在指定時間范圍內始終將來自同一個ip地址的請求發往同一個RS;此功能是通過lvs持久連接模板實現,其與調度方法無關;
iptables -t mangle -A PREROUTING -d 172.16.100.100 -p tcp --dport 80 -j MARK --set-mark 99
iptables -t mangle -A PREROUTING -d 172.16.100.100-p tcp --dport 443 -j MARK --set-mark 99
ipvsadm -a -f 99 -r 172.16.100.2 -g
pvsadm -a -f 99 -r 172.16.100.3 -g