一. LVS概述 LVS是一種工作在四層協議上的負載均衡解決方案,在1998年5月由章文嵩博士創建。目前廣泛使用的負載均衡模型主要有: 1)工作在四層協議(LVS):主要用於四層協議上的負載均衡,性能相較於工作在七層的協議更好。但是協議棧是工作在傳輸層,對於傳輸層以上的高級特性支持不足。 2)工作在 ...
一. LVS概述
LVS是一種工作在四層協議上的負載均衡解決方案,在1998年5月由章文嵩博士創建。目前廣泛使用的負載均衡模型主要有:
1)工作在四層協議(LVS):主要用於四層協議上的負載均衡,性能相較於工作在七層的協議更好。但是協議棧是工作在傳輸層,對於傳輸層以上的高級特性支持不足。
2)工作在七層協議(Nginx、HAproxy):主要解決七層協議上的負載均衡(Nginx也可以工作在四層,需要在編譯的時候添加--with-streams參數),更加適合於HTTP服務、郵件服務等高層協議的服務。相較於四層協議負載均衡,犧牲了少量的性能,提供了更有針對性的服務。
二. LVS工作模式
2.1.兩段式工作原理:
LVS工作原理和iptables的工作原理相似,他們都具有一個位於內核空間的框架(Netfilter、ipvs)+用戶空間的管理工具(iptables、ipvsadm)。用戶空間的管理工具提供了我們操作規則的入口,我們通過配置相關的規則到內核空間的框架中,使之生效來實現相對應的功能。
LVS模型涉及到的設備主要可以分成兩類:一類是Director調度器(用來接收客戶端的請求,並通過IPVS規則及演算法轉發到後端真正提供服務的設備),另一類是RealServer(即後端真正提供服務的設備)。LVS安裝在Director調度器上,位於內核空間的ipvs監聽在Netfilter中的input鏈上,並且在這裡設定了一些規則,一旦發現訪問的是集群服務,強制修改請求報文(從這裡區分了NAT模式、DR模式、TUN模式),並立即送往prerouting鏈上。如果經判斷不是訪問集群服務的請求,還是根據網路層協議正常訪問本機[根據IP+Port判斷]。
2.2.註意:
1、因為LVS模型依賴了Netfilter內核框架,並且對處理訪問集群服務的請求報文,強行做了修改,這會導致iptables功能失效。因此LVS和iptables不能共同使用。
2、2.4.23版本之前的內核沒有內置ipvs代碼,需要打補丁。在此版本後,可以直接使用LVS功能。
三. LVS常用工作模型
3.1.NAT模型
工作原理:
當監控到ClientIP訪問集群服務,Director調度器會根據調度演算法挑選一個後端RealServerIP,將數據報文送往postrouting鏈進行DNAT轉換(目標地址轉換)。當後端RealServer處理請求完畢後,響應報文再次經由Director回覆Client,在Director的prerouting鏈進行SNAT(源地址轉換)。
優點與不足:
優點是配置簡單;缺點是因數據進出都要經過director,所有性能較差,一般帶動10個RIP。
NAT模型註意事項:
1)集群節點與Director必須在同一個網路中。
2)RIP地址一般都是私有地址,而且僅用於與DIP通信。
3)Director位於Client和RealServer之間,負責進出的所有通信。
4)集群節點要使用DIP作為預設網關。
5)Director支持埠映射。
6)任何操作系統都可以作為RealServer。
7)Director容易成為集群性能的瓶頸。
3.2.DR模型
工作原理:
【Director調度階段】Director在接收到Client的請求後(client訪問的是Director的VIP),發現該請求是訪問集群服務時,便修改請求報文的目標MAC地址並通過postrouting鏈轉發該報文至RealServer。
【RealServer處理階段】每個RealServer都具有VIP,配置在IP別名上,僅用於封裝響應報文,不用於與Director通信。當RealServer收到該請求報文時,在數據鏈路協議發現MAC地址是自己的,解封裝後發現自己也有配置在別名上的VIP,便接收該報文並處理。
【RealServer回覆階段】RealServer收到的這個請求報文,其源IP地址和目標IP地址均沒有做修改。因此在回覆報文時,RealServer根據網路層IP協議直接回覆Client,不需要經過Director。
優點與不足:
優點是Director調度器僅需要處理請求報文,不用處理響應報文,工作效率大大提升,能夠帶動數百台的RealServer;缺點是配置相對於NAT模型要複雜。
DR模型註意事項:
1)各集群節點必須跟Director在同一個物理網路中,因為要根據MAC地址轉發。
2)RIP可以不用私網地址。
3)Director僅處理入站請求,響應報文直接由RealServer回覆給客戶端。
4)RealServer一定不能將預設網關指向Director,要指向能訪問互聯網的路由設備。
5)Director無法實現埠映射,只改變了MAC地址,TCP/IP都沒有發生改變。
6)大多數的操作系統都可以用在RealServer上,Server必須要支持隱藏IP。
拓展:禁止RealServer響應ARP方式
1)在路由設備上固定寫上VIP的MAC地址。
2)arptables規則鏈上定義規則,不響應arp。
3)kernel parameter:有兩個參數arp_ignore、arp_announce用於限定主機對arp廣播的響應級別和通告級別。用戶請求的VIP和進來的網路介面不是同一個,那就忽略這個arp報文。
arp_announce:
0:將本機任何介面的任何地址向外通報;1:儘可能向目標網路通報與其網路匹配的介面。2:僅向與本地介面匹配的網路進行通告。預設0。
arp_ignore:
0:表示回應任何本機配了的地址。1:表示只響應該IP地址且該IP配置同網路的介面上。預設0。
3.3.TUN模型
工作原理:
Director當接收到Client的請求報文併發現訪問的是集群服務時,調度器會在原有的IP請求報文外部,再次封裝一層IP報文併發送至外網(在原有的IP報文再次封裝一層IP報文即為隧道技術),最終轉發至不同網路域的RealServer。
優點及缺點:
優點是能夠解決異地災備的需求;缺點是Director和RealServer設備要支持隧道技術,配置複雜;
TUN模型註意事項:
1)RealServer可以跨越互聯網。
2)RealServer的RIP必須是公網地址。
3)Director只處理入站請求,響應報文有RealServer發往客戶端。
4)只有支持隧道協議的OS才能用於RealServer。
5)不支持埠映射。
四. LVS配置詳情(Centos7)
4.1.NAT模型配置
網路規劃
NAT模式
VIP:
192.168.100.150 outer
DIP:172.16.100.10 inner
rip1:
172.16.100.11 inner
rip2:
172.16.100.12 inner
RealServer配置
1 # 安裝nginx並配置 2 yum install nginx -y
Director配置
1 # 安裝ipvsadm工具 2 yum install ipvsadm -y 3 # 關閉ICMP重定向 4 echo 1 > /proc/sys/net/ipv4/ip_forward 5 echo 0 > /proc/sys/net/ipv4/conf/all/send_redirects 6 echo 0 > /proc/sys/net/ipv4/conf/defaults/send_redirects 7 echo 0 > /proc/sys/net/ipv4/conf/eth0/send_redirects 8 echo 0 > /proc/sys/net/ipv4/conf/eth1/send_redirects 9 # director設置ipvsadm 10 ipvsadm -A -t 192.168.100.150:80 -s rr 11 ipvsadm -a -t 192.168.100.150:80 -r 172.16.100.11:80 -m 12 ipvsadm -a -t 192.168.100.150:80 -r 172.16.100.12:80 -m
4.2.DR模式配置
網路規劃
Director:
vip:192.168.100.150
dip:192.168.100.155
rip1:
lo:0 192.168.100.150(vip)
rip 192.168.100.151
rip2
lo:0 192.168.100.150(vip)
rip 192.168.100.152
RealServer配置
# 配置內核參數,禁止響應ARP報文 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 # 配置別名VIP ifconfig lo:0 192.168.100.150 broadcast 192.168.100.150 netmask 255.255.255.255 up # 添加預設路由指向Director前的網關,由於實驗環境使用NAT模式,已經配好了指向預設網關,這裡就不再配置了
Director配置
# 安裝Nginx並配置 yum install nginx -y # 配置埠轉發功能 echo 1 > /proc/sys/net/ipv4/ip_forward # 配置VIP ifconfig ens33:0 192.168.100.150 broadcast 192.168.100.150 netmask 255.255.255.255 up # 添加至RealServer的路由 route add -host 192.168.100.150 dev ens33:0 # 配置ipvs ipvsadm -A -t 192.168.100.155:80 -s rr ipvsadm -a -t 192.168.100.155:80 -r 192.168.100.151:80 -g ipvsadm -a -t 192.168.100.155:80 -r 192.168.100.152:80 -g