LVS概述html
一、LVS(Linux Virtual Server)Linux虛擬服務器:是一個虛擬的服務器集羣系統。本項目在1998年5月有章文嵩博士成立,是中國國內最先出現的自由軟件項目之一。經過LVS提供的負載均衡技術和Linux操做系統可實現一個高性能、高可用的服務器集羣,從而以低成本實現最優的服務性能。前端
二、集羣簡介:集羣(Cluster)是一組相互獨立的、經過高速網絡互聯的計算機,它們構成了一個組,並以單一系統的模式加以管理。一個客戶與集羣相互做用時,集羣像是一個獨立的服務器。集羣配置是用於提升可用性和可縮放性。集羣系統的主要優勢:高可擴展性、高可用性、高性能、高性價比。node
三、集羣類型算法
LB:Load Balancing 高可拓展,伸縮集羣後端
HA :High Availability 高可用集羣bash
HP:High Performance 高性能集羣服務器
LVS詳解
網絡
1、LVS組成:LVS其實由兩個組件組成,在用戶空間的ipvsadm和內核空間的ipvs,ipvs工做於INPUT鏈上,若是有請求報文被ipvs事先定義,就會將請求報文直接截取下根據其特定的模型修改請求報文,再轉發到POSTROUTING鏈上送出TCP/IP協議棧。session
2、LVS的實現模型:LVS在不一樣場景中提供了4種實現模型:分別是NAT,DR,TUN,FULLNAT。併發
一、NAT工做模式
實現原理:NAT模型其實就是一個多路的DNAT,客戶端對VIP進行請求,Director經過事先指定好的調度算法計算出應該轉發到那臺RS上,並修改請求報文的目標地址爲RIP,經過DIP送往RS。當RS響應客戶端報文給CIP,在通過Director時,Director又會修改源地址爲VIP並將響應報文發送給客戶端,這段過程對於用戶來講是透明的。
NAT特性:
1)RS和Director必需要在同一個IP網段中。
2)RS的網關必須指向DIP
3)能夠實現端口映射
4)請求報文和響應報文都會通過Director
5)RS能夠是任意OS
6)DIP和RIP只能是內網IP
NAT工做流程:
1)客戶端將請求發送前端的負載均衡器,請求報文源地址是CIP(客戶端IP),目標地址爲VIP(負載均衡器前端地址);
2)負載均衡器收到報文後,發現請求的是在規則裏面存在的地址,作DNAT,把目標IP轉換爲任意後端RS的RIP,而後發送到後端服務器。
3)報文送到Real Server,進行響應,響應報文源IP爲RIP,目標IP仍是CIP,可是網關指向DIP。
4)Dirctor接收到響應報文後,自動進行源地址轉換,把RIP轉換爲VIP,發往互聯網,到達客戶端。
二、DR工做模式
DR模型是一個比較複雜的模型,由於VIP在Director和每個RS上都存在,客戶端對VIP(Director)請求時,Director接收到請求,會將請求報文的源MAC地址和目標MAC地址修改成本機DIP所在網卡的MAC地址和指定的RS的RIP所在網卡的MAC地址,RS接收到請求報文後直接對CIP發出響應報文,而不須要通過Director。
DR特性:
1)RS和Director能夠不在同一IP網段中,可是必定要在同一物理網絡中。(最好同一網段)
2)RS可使用公網地址,此時能夠直接經過互聯網連入,配置監控RS服務器。
3)RS的網關必定不能指向Director。
4)客戶端請求報文必須通過Director,可是響應報文必定不能經過Director。
5)不能實現端口映射。
6)RS能夠是大部分操做系統。
DR模型的問題(客戶請求VIP怎麼到達Director):
1)網絡設備(路由器)中設置VIP地址和Director的MAC地址進行綁定。(前提:路由器的配置權限;缺點:Director故障轉移,沒法更新此綁定;)
2)arptables(前提:在各RS安裝arptables程序,並編寫arptables規則;缺點:依賴於獨特功能的應用程序;)
3)修改Linux內核參數,arp_ignore,arp_announce(前提:RS必須是Linux;缺點:適用性差;)
兩個參數的取值含義:
arp_announce:定義通告模式
0:default,只要主機接入網絡,則自動通告全部網卡MAC地址。
1:盡力不通告非直接連入網絡的網卡MAC地址。
2:只通告直接進入網絡的網卡MAC地址。
arp_ignore:定義收到arp請求時的響應模式
0:只有arp廣播請求,立刻響應,而且響應全部本機網卡的mac地址。
1:只響應,接受arp廣播請求的網卡接口mac地址。
2:只響應,接受arp廣播請求的網卡接口mac地址,而且須要請求廣播於接口地址屬於同一網段。
3:主機範圍(Scope host)內生效的接口,不予響應,只響應全局生效於外網能通訊的網卡接口。
4-7:保留位
8:不響應一切arp廣播請求。
DR工做流程:
DR模型,當RIP,DIP,VIP所有爲公網地址時:
1)客戶端對VIP發送請求。
2)Director接收請求,發現是請求後端的集羣服務,而後對後端集羣RIP發起ARP請求。
3)Director獲得後方RS的MAC地址後,選擇一個把請求經過MAC地址發送給後端服務器。
4)RS接收到請求後,進行響應,使用隱藏的VIP進行封裝報文,但使用RIP所在網卡進行向外發送。
5)RS發出的響應報文因爲是使用VIP隱藏網卡封裝,所以源IP爲VIP,目標IP爲CIP,因此報文直接發往互聯網路由器,到達客戶端。
DR模型,當RIP,DIP,VIP所有爲私有地址時:
1)客戶端對VIP發送請求。
2)Director接收請求,發現是請求後端集羣服務,而後對後端集羣RIP發起ARP請求。
3)Director獲得後方RS的MAC地址後,如今一個把請求經過MAC地址發送給後端服務器。
4)RS接收到請求後,進行響應,使用隱藏的VIP網卡進行封裝報文,但使用RIP所在網卡進行向外發送。
5)RS發出的響應報文因爲是使用VIP隱藏網卡封裝,所以源IP爲VIP,目標IP爲CIP。
6)因爲RS的通訊RIP地址爲私有地址,所以網關須要指向併發往轉發服務器同網段地址網卡。
7)轉發服務器將響應報文發往互聯網,最終到達客戶端。
三、TUN:IP隧道,IP報文中套IP報文
TUN模型經過隧道的方式在公網中實現請求報文的轉發,客戶端請求VIP(Director),Director不修改請求報文的源IP和目標IP,而是在IP首部前附加DIP和對應的RIP地址並轉發到RIP上,RS收到請求報文,RS的本地接口上也有VIP,遂直接響應報文給CIP。
TUN特性
1)RIP,DIP,VIP都必須是公網地址。
2)RS網關不會指向DIP。
3)請求報文必須通過Director,但響應報文必定不通過Director。
4)不支持端口映射。
5)RS的OS(操做系統)必須得支持隧道功能。
TUN模型,一般爲異地容災策略:
1)客戶端對VIP發送請求。
2)Director接收請求,發現是請求後端集羣服務,因爲和RS在異地網絡,所以在原請求報文的基礎上,在加上一層,源IP爲DIP,目標IP爲RIP的層。
3)Director將加了包裝的報文發往互聯網,互聯網路由將TUN報文路由發往響應的RS。
4)RS接收到請求後,拆掉外出IP首部,發現裏面還有一層IP首部,而且目標地址爲本身的VIP,所以接收報文並響應。
5)RS經過隱藏VIP包裝響應報文,目標IP仍然是原CIP。
6)RS將響應報文發往互聯網路由器,並最終路由至客戶端。
四、FullNAT:NAT的加強版
FULLNAT是最近幾年纔出現的,客戶端請求VIP(Director),Director修改請求報文的源地址(DIP)和目標地址(RIP)並轉發給RS,FULLNAT模型通常是Director和RS處於複雜的內網環境中的實現。
FULLNAT特性:
1)VIP是公網地址,DIP和RIP是內網地址,可是無需在同一網絡中。
2)請求報文須要通過Director,響應報文也要通過Director。
3)RIP接收到的請求報文的源地址爲DIP,目標地址爲RIP。
4)支持端口映射。
5)RS能夠是任意的OS(操做系統)。
3、LVS的調度算法
靜態方法:僅根據調度算法自己進行調度
rr:round robin,輪流,輪訓,輪叫,輪調 wrr:weighted round robin,增強輪詢 sh:source hashing,session綁定 dh:destination hashing,目標地址hash
動態方法:根據算法及各RS當前的負載情況進行調度
lc:least connection,最少鏈接 wlc:weighted lc,加權最少鏈接 sed:shortest expection delay,最少指望延遲 nq:never queue,永不排隊 lblc:Locality-Based Least Connection,基於局部性的最少鏈接 lblcr:Replicated lblc,基於局部性的帶複製功能的最少鏈接
LVS缺陷:不能檢查後端服務器的健康狀況,老是發送鏈接到後端。
session持久機制:
一、session綁定:始終將同一個請求者的鏈接定向至同一個RS(第一次請求時仍由調度方法選擇);沒有容錯能力,有損負載均衡效果。
二、session複製:在RS之間同步session,所以,每一個RS中都有集羣中全部的session;對於大規模集羣環境不適用。
三、session服務器:利用單獨部署的服務器來同一管理session。
4、LVS使用方法(ipvsadm)
命令格式: ipvsadm -A|E -t|u|f service-address [-s scheduler] [-p [timeout]] [-M netmask] ipvsadm -D -t|u|f service-address ipvsadm -C ipvsadm -R ipvsadm -S [-n] ipvsadm -a|e -t|u|f service-address -r server-address [-g|i|m] [-w weight] [-x upper] [-y lower] ipvsadm -d -t|u|f service-address -r server-address ipvsadm -L|l [options] ipvsadm -Z [-t|u|f service-address] ipvsadm --set tcp tcpfin udp ipvsadm --start-daemon state [--mcast-interface interface] [--syncid syncid] ipvsadm --stop-daemon state ipvsadm -h 命令詳解: 定義集羣服務: -A 添加一個集羣服務 -D -t|u|f service-address:刪除指定的集羣服務 -E 修改一個集羣服務 -t VIP:端口 定義集羣服務的類型爲TCP的某個端口 -u VIP:端口 定義集羣服務的類型爲UDP的某個端口 -f 防火牆標記 定義集羣服務的類型爲防火牆標記 -s 調度算法 指定集羣服務的調度算法 -p timeout:persistent connection,持久鏈接 定義集羣節點: -a 添加一個節點到集羣服務 -t|-u|-f service-address:指明將RS添加至那個Cluster-service中 -r:指定RS,可包含{IP[:port]},只有支持端口映射的lvs類型才能使用跟集羣服務中不一樣的端口 -d 從集羣服務中刪除一個節點 -e 修改集羣服務器中的節點 -r 節點IP:端口 定義節點的IP及類型 -m 定義爲NAT模型 -g 定義爲DR模型 -i 定義爲TUN模型 -w 權重 定義服務器的權重 查看已經定義的集羣服務及RS: ipvsadm -L [options] -c:查看各鏈接 -n:數字格式顯示IP地址 --stats: 顯示統計數據 --rate: 速率 --exact: 顯示統計數據的精確值 --timeout:超時時間 -Z:計數器清零; 從集羣服務中刪除RS: ipvsadm -d -t|u|f service-address -r server-address 刪除集羣服務: ipvsadm -D -t|u|f service-address 清空全部的集羣服務: ipvsadm -C 保存集羣服務定義: ipvsadm -S > /path/to/some_rule_file ipvsadm-save > /path/to/some_rule_file 讓規則文件中的規則生效: ipvsadm -R < /path/from/some_rule_file ipvsadm-restore < /path/from/some_rule_file
5、LVS各類模型的實現
一、LVS NAT模型的實現
一、集羣環境,一臺Director,兩臺後端Real server RS1,RS2 Director:兩張網卡 eth0:192.168.120.100/24 #VIP地址 eth1:172.16.10.1/16 RS1: eth1:172.16.10.11/16 RS2: eth1:172.16.10.12/16 Director的eth1和RS1,RS2的eth1模擬在同一網絡,使用物理機 Windows7做爲客戶端在192.168.120.0/24網段中 二、爲RS添加網關指向Director RS1: # ifconfig eth1 172.16.10.11/16 up # route add default gw 172.16.10.1 RS2: # ifconfig eth1 172.16.10.12/16 up # route add default gw 172.16.10.1 三、修改內核參數,開啓轉發功能 # echo 1 > /proc/sys/net/ipv4/ip_forward 四、在RS1和RS2上分別建立測試頁,並在Director驗證服務 [root@node2 ~]# echo node2.bjwf.com > /var/www/html/index.html [root@node2 ~]# systemctl start httpd.service [root@node3 ~]# echo node3.bjwf.com > /var/www/html/index.html [root@node3 ~]# systemctl start httpd.service Director上驗證: [root@node1 ~]# curl http://172.16.10.11 node2.bjwf.com [root@node1 ~]# curl http://172.16.10.12 node3.bjwf.com 五、在Director添加集羣服務 [root@node1 ~]# yum -y install ipvsadm #安裝集羣管理軟件 # ipvsadm -A -t 192.168.120.210:80 -s rr # ipvsadm -a -t 192.168.120.210:80 -r 172.16.10.11:80 -m -w 1 # ipvsadm -a -t 192.168.120.210:80 -r 172.16.10.12:80 -m -w 1
二、LVS DR模型的實現
一、集羣環境,一臺Director,兩臺後端Real server RS1,RS2 Director: eth0:192.168.120.100/24 配置VIP:ifconfig eth0:0 192.168.120.110 netmask 255.255.255.255 broadcast 192.168.120.110 RS1: eth0:192.168.120.211/24 RS2: eth0:192.168.120.212/24 VIP: 192.168.120.100 二、修改RS1,RS2的內核參數,關閉lo的arp通告和lo的arp響應,並配置隱藏地址 # echo 2 > /proc/sys/net/ipv4/conf/all/arp_announce # echo 2 > /proc/sys/net/ipv4/conf/lo/arp_announce # echo 1 > /proc/sys/net/ipv4/conf/all/arp_ignore # echo 1 > /proc/sys/net/ipv4/conf/lo/arp_ignore # ifconfig lo:1 192.168.120.100 netmask 255.255.255.255 broadcast 192.168.120.100 三、在RS1和RS2上分別建立測試頁,並在Director驗證服務 [root@node2 ~]# echo node2.bjwf.com > /var/www/html/index.html [root@node2 ~]# systemctl start httpd.service [root@node3 ~]# echo node3.bjwf.com > /var/www/html/index.html [root@node3 ~]# systemctl start httpd.service Director上驗證: [root@node1 ~]# curl http://192.168.120.101 node2.bjwf.com [root@node1 ~]# curl http://192.168.120.102 node3.bjwf.com 四、爲RS1和RS2添加路由條目,保證其發出報文通過eth0以前,還要進過lo:0,保證源地址爲VIP # route add 192.168.120.110 dev lo:1 五、在Director添加集羣服務 # ipvsadm -A -t 192.168.120.110:80 -s rr # ipvsadm -a -t 192.168.120.110:80 -r 192.168.120.101:80 -g -w 1 # ipvsadm -a -t 192.168.120.110:80 -r 192.168.120.102:80 -g -w 1