一、負載均衡集群介紹 1、集群 ① 集群(cluster)技術是一種較新的技術,通過集群技術,可以在付出較低成本的情況下獲得在性能、可靠性、靈活性方面的相對較高的收益,其任務調度則是集群系統中的核心技術。 ② 集群是一組相互獨立的、通過高速網路互聯的電腦,它們構成了一個組,並以單一系統的模式加以管 ...
一、負載均衡集群介紹
① 集群(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
六、負載均衡集群企業級應用實戰-LVS
實現基於LVS負載均衡集群的電商網站架構
前景:隨著業務的發展,網站的訪問量越來越大,網站訪問量已經從原來的1000QPS,變為3000QPS,網站已經不堪重負,響應緩慢,面對此場景,單純靠單台LNMP的架構已經無法承載更多的用戶訪問,此時需要用負載均衡技術,對網站容量進行擴充,來解決承載的問題。scale out? scale up?
yum install ipvsadm -y #在LVS-server安裝lvs管理軟體
2、grep -i -C 10 "ipvs" /boot/config-VERSION-RELEASE.x86_64 查看內核是否支持IPVS
3、iptables -F && setenforing 清空防火牆策略,關閉selinux
實戰一:LVS的NAT模式實現負載均衡
機器名稱 |
IP配置 |
服務角色 |
備註 |
lvs-server |
VIP:172.17.1.6 DIP:192.168.30.106 |
負載均衡器 |
開啟路由功能 (VIP橋接、DIP僅主機) |
rs01 |
RIP:192.168.30.107 |
後端伺服器 |
網關指向DIP(僅主機) |
rs02 |
RIP:192.168.30.7 |
後端伺服器 |
網關指向DIP(僅主機) |
ipvsadm -A -t 172.17.1.6:80 -s wrr
② 配置web服務後端real server 為nat工作方式 權重為1
ipvsadm -a -t 172.17.1.6:80 -r 192.168.30.107:80 -m -w 1
ipvsadm -a -t 172.17.1.6:80 -r 192.168.30.7:80 -m -w 1
route add default gw 192.168.30.106
4、自己的windows 做客戶端,通過vip 172.17.1.6訪問web服務,調度成功
實戰二:LVS的DR 模式實現負載均衡
機器名稱 |
IP配置 |
服務角色 |
備註 |
lvs-server |
VIP:172.17.100.100 |
負載均衡器 |
開啟路由功能 (VIP橋接) |
rs01 |
RIP:172.17.1.7 |
後端伺服器 |
網關指向DIP(橋接) |
rs02 |
RIP:172.17.22.22 |
後端伺服器 |
網關指向DIP(橋接) |
註意:lvs-server 和rs 要在一個網段,rs只有一個網段
ifconfig eth0:0 172.17.100.100 broadcast 172.17.100.100 netmask 255.255.255.255 up
route add -host 172.17.100.100 dev eth0:0 給網卡別名指向網關
ipvsadm -A -t 172.17.100.100:80 -s wrr
配置web服務後端real server 為DR工作方式 權重為1
ipvsadm -a -t 172.17.100.100:80 -r 172.17.22.22:80 -g -w 1
ipvsadm -a -t 172.17.100.100:80 -r 172.17.1.6:80 -g -w 1
ifconfig lo:0 172.17.100.100 broadcast 172.17.100.100 netmask 255.255.255.255 up
route add -host 172.17.100.100 lo:0
echo "1" > /proc/sys/net/ipv4/conf/lo/arp_ignore
echo "2" > /proc/sys/net/ipv4/conf/lo/arp_announce
echo "1" > /proc/sys/net/ipv4/conf/all/arp_ignore
echo "2" > /proc/sys/net/ipv4/conf/all/arp_announce
1:僅在請求的目標IP配置在本地主機的接收到請求報文的介面上時,才給予響應
net.ipv4.conf.lo.arp_ignore = 1
net.ipv4.conf.lo.arp_announce = 2
net.ipv4.conf.all.arp_ignore = 1
net.ipv4.conf.all.arp_announce = 2
① 可分別在rs1和rs2建立2個不同內容,統一路徑的test.html測試文件,測試負載均衡功能
② 打開http://172.17.1.6/ ,併在director上用ipvsadm -L -n觀察訪問連接
③ 用另外一臺測試機,用ab壓力測試工具,測試經過負載均衡後的伺服器容量
實戰三:實現80、443埠都可訪問服務,且LVS實現持久連接
機器名稱 |
IP配置 |
服務角色 |
備註 |
lvs-server |
VIP:172.17.100.100 |
負載均衡器 |
開啟路由功能 (VIP橋接) |
rs01 |
RIP:172.17.1.7 |
後端伺服器 |
網關指向DIP(橋接) |
rs02 |
RIP:172.17.22.22 |
後端伺服器 |
網關指向DIP(橋接) |
iptables -t mangle -A PREROUTING -d 172.17.100.100 -p tcp --dport 80 -j MARK --set-mark 99
iptables -t mangle -A PREROUTING -d 172.17.100.100-p tcp --dport 443 -j MARK --set-mark 99
ipvsadm -a -f 99 -r 172.17.1.7 -g
ipvsadm -a -f 99 -r 172.17.22.22 -g
關於ssl 443 加密的設置
4、測試,自己windows 做客戶端,訪問 http://172.17.1.6/