初識Linux集群
Linux集群
Linux集群(cluster)就是一組Linux計算機,它們作為一個整體向用戶提供一組網絡資源,這些單個的計算機系統就是集群的節點(node)。一個理想的集群,用戶是不會意識到集群系統底層的節點的,在他們看來,集群是一個系統,而非多個計算機系統,並且集群系統的管理員可以隨意增加和刪改集群系統的節點。
Linux集群系統的優點主要有4方面:
1、易於擴展,管理員可很方便的增加或刪除集群系統中的節點。
2、高可用性,當集群中某一個節點失效時,其負責的任務可以傳遞給其他節點,有效避免單點故障。
3、高性能,負載均衡的集群系統能夠承擔極大的並發客戶請求。
4、高性價比,可以使用相對廉價的硬件構造出高性能的系統。
常見的Linux集群類型包括:
1、LB:Load Balancing,負載均衡集群
負載均衡集群中有調度器(Director),它處在多臺內部服務器的上層,根據定義的調度方式從下層的服務器組中選擇一臺來響應客戶端發送的請求。
2、HA:High Availability,高可用性集群
顧名思義就是服務的可用性比較高,當某臺服務器故障後不會造成所提供的服務中斷,集群自動將客戶的訪問請求轉交給一個正常工作的服務器。
3、HP:Hight Performance,高性能
高性能的集群是當某一項任務計算量非常大的時候,由一個計算機集群共同來完成這項任務,這種 處理方式我們稱為並行處理機制。一般高性能集群用於科研工作方面。
常見的Linux集群擴展類型(組建方式)有:
1、scale up(縱向擴展):通過增加硬件資源,即增加更好的設備來滿足性能消耗的需求。但是此方式性價比很低。
2、scale out(橫向擴展):通過硬件或軟件的方式,將由單一服務器負責的業務需求轉為一組節點服務器來進行處理,此種方式易於擴展且性價比高。
LVS,Linux Virtual Server
初步認識Linux Cluster後,我們進一步介紹負載均衡集群技術LVS(Linux Virtual Server)。
LVS是章文嵩博士發起的自由軟件項目,它的官方站點是http://www.linuxvirtualserver.org。LVS工作在內核空間,實現TCP/IP協議群的四層路由,在Linux2.4內核以前,使用LVS時必須要重新編譯內核以支持LVS功能模塊,但從Linux2.4內核以後已經完全內置了LVS的各個功能模塊,無需給內核打任何補丁,可以直接使用LVS提供的各種功能。
LVS采用三層結構:調度器、服務器池、共享存儲,結構如下圖:
負載調度器(load balancer/Director):由一臺或多臺負載調度器組成,主要作用類似一個路由器,將用戶請求分發給服務器池上的real server;
服務器池(server pool/Realserver):一組真正執行客戶請求的服務器,執行的服務一般有WEB、MAIL、FTP和DNS等。
共享存儲(shared storage):為服務器池提供一個共享的存儲區,能使得服務器池擁有相同的內容,提供相同的服務。
LVS需要在內核的TCP/IP協議棧對數據流進行過濾篩選,這就需要有內核的模塊來支持,而這樣的過濾轉發規則又是由用戶進行定義的,我們可以認為LVS是兩段式的架構,在內核空間中工作的是”ipvs”,而在用戶空間中工作的,用來定義集群服務規則的是”ipvsadm”。
LVS集群類型相關術語:
調度器:Director; VS:Virtual Server; RS:Real Server; CIP:Client IP;
VIP:Virtual Serve Ip; DIP:Director IP; RIP:Real Server IP
LVS集群的類型:
lvs-nat:修改請求報文的目標IP;MASQUERADE類型
lvs-dr(direct routing):重新封裝新的MAC地址,默認使用的類型; GATEWAY類型
lvs-tun(ip tunneling):在原請求IP報文之外新加一個IP首部;IPIP類型
lvs-fullnat:修改請求報文的源和目標IP
lvs-nat: 多目標IP的DNAT,通過將請求報文中的目標地址和目標端口修改為某挑出的RS的RIP和PORT實現轉發 要點: (1)RIP和DIP必須在同一個IP網絡,且應該使用私網地址;RS的網關要指向DIP; (2)請求報文和響應報文都必須經由Director轉發;極高負載的場景中,Director可能成為系統瓶頸; (3)支持端口映射,可修改請求報文的目標PORT; (4)VS必須是Linux系統,RS可以是任意系統 lvs-dr:lvs的默認模式 通過為請求報文重新封裝一個MAC首部進行轉發,源MAC是DIP所在的接口的MAC,目標MAC是挑選出的RS的RIP所在接口的MAC地址;源IP/PORT,以及目標IP/PORT均保持不變 要點: (1)Director和各RS都得配置使用VIP; (2)確保前端路由器將目標IP為VIP的請求報文發往Director:通過在RS上修改內核參數以限制arp通告及應答級別(arp_announce及arp_ignore); (3)RS的RIP可以使用私網地址,也可以是公網地址;RIP與DIP在同一IP網絡;RIP的網關不能指向DIP,以確保響應報文不會經由Director;VIP配置在DR上的時候,應該是在eth0:0上,在RS上配置VIP的時候,就必須是lo:0了,否則達不到讓RS不響應VIP的ARP通告的效果。 (4)RS跟Director要在同一個物理網絡即同一廣播域; (5)請求報文要經由Director,但響應不能經由Director,而是由RS通過網關直接發往Client; (6)不支持端口映射 lvs-tun: 轉發方式:不修改請求報文的IP首部(源IP為CIP,目標IP為VIP),而在原IP報文之外再封裝一個IP首部(源IP是DIP,目標IP是RIP),將報文發往挑選出的目標RS 要點: (1)DIP,VIP,RIP都應該是公網地址; (2)RS的網關不能,也不可能指向DIP,在RS的lo別名網卡上配置vip地址; (3)請求報文要經由Director,但響應不能經由Director; (4)不支持端口映射; (5)RS的OS得支持隧道功能 lvs-fullnat: 通過同時修改請求報文的源IP地址和目標IP地址進行轉發 要點: (1)VIP是公網地址,RIP和DIP是私網地址,且通常不在同一IP網絡;因此,RIP的網關一般不會指向DIP; (2)RS收到的請求報文源地址是DIP,因此,只需響應給DIP;但Director還要將其發往Client; (3)請求和響應報文都經由Director; (4)支持端口映射; (5)lvs-fullnat型lvs默認不支持需更換支持的內核
LVS的調度算法:
靜態調度算法:根據算法本身進行調度 rr:roundrobin,輪詢,調度器將外部請求輪流分配到集群中的節點中; wrr:Weighted RR,加權輪詢,調度器根據事先設置的權重來分配外部請求到集群中的節點; sh:Source Hashing,實現session sticky,源IP地址hash,將來自同一個IP的請求始終發往第一次挑中的真實服務器IP,從而實現會話綁定; dh:Destination Hashing,目標地址hash,將發往同一個目標地址的請求始終轉發至第一次挑中的真實服務器IP,典型使用場景是正向代理緩存場景中的負載均衡 動態調度算法:根據真實服務器當前的負載狀態及調度算法進行調度 lc:least connections,調度器通過lc調度算法動態地將網絡請求調度到已建立連接最少的服務器上; wlc:Weighted Least Connections,調度器通過wlc調度算法根據事先設置的權重優化負載均衡調度,具有較高權重的服務器將承受較大比例的連接請求; sed:Shortest Expection Delay,在wlc基礎上改進,Overhead=(activeconns+1)*256/權重; nq:Never Queue Scheduling,如果有臺 realserver的連接數=0就直接分配過去,不需要再進行sed運算,保證不會有一個主機很空閑; lblc:locality-based least-connection,基於地址的最小連接數調度,將來自同一個目的地址的請求分配給同一臺RS,此時這臺服務器是尚未滿負荷的。否則就將這個請求分配給連接數最小的RS,並以它作為下一次分配的首先考慮; lblcr:Locality-Based Least Connections with Replication,帶復制的基於局部性最少鏈接”調度算法也是針對目標IP地址的負載均衡,目前主要用於Cache集群系統,它與lblc算法的不同之處是它要維護從一個目標IP地址到一組服務器的映射,而lblc算法維護從一個目標IP地址到一臺服務器的映射。
初識Linux集群