LVS負載均衡-1

LVS特性介紹:

1 屬於四層調度[物理層|數據鏈路層|網絡層|傳輸層]
不需要解封裝,但不能識別報文數據,速度快,性能好!
2 高可用性實現方式--keepalived
3 工作原理:
LVS根據請求報文的目標IP和目標協議及端口將其調度轉發至某RS,根據調度 算法來挑選RS
4 工作位置:INPUT鏈之前
5 專用術語簡介:
VS:Virtual Server,Director  Server(DS) --調度器
        Dispatcher(調度器),Load Balancer
RS:Real Server(lvs), upstream server(nginx)       
        backend server(haproxy) --後端服務器
CIP:Client IP --客戶端擁有的IP地址
VIP: Virtual serve IP VS外網的IP 
DIP: Director IP  VS內網的IP
RIP: Real server IP  後端服務器IP
6 訪問流程簡述:
CIP <--> VIP == DIP <--> RIP
7 命令行管理工具:ipvsadm
8 工作於內核級別,支持併發訪問量大
驗證內核支持LVS
[root@KEEP208:56:43~]#cat /boot/config-3.10.0-862.el7.x86_64 | grep -i "ipvs"
CONFIG_NETFILTER_XT_MATCH_IPVS=m
# IPVS transport protocol load balancing support
# IPVS scheduler
# IPVS SH scheduler
# IPVS application helper

LVS四種模型簡介:NAT

lvs-nat:修改請求報文的目標IP,多目標IP的DNAT
解析:
本質是多目標IP的DNAT,通過將請求報文中的目標地址和目標端口修改爲某挑出的RS的RIP和PORT實現轉發  
(1) RIP和DIP應在同一個IP網絡[也可以跨網段],且應使用私網地址;RS的網關要指向DIP  
(2)請求報文和響應報文都必須經由LVS轉發,LVS易於成爲系統瓶頸  
(3)支持端口映射,可修改請求報文的目標PORT  
(4)VS必須是Linux系統,RS可以是任意OS系統

LVS四種模型簡介:DR

lvs-dr:操縱封裝新的MAC地址 默認模式 
解析:
LVS-DR:Direct Routing,直接路由,LVS默認模式,應用最廣泛
通過爲請求報文重新封裝一個MAC首部進行轉發,源MAC是DIP所在的接口的MAC
目標 MAC是某挑選出的RS的RIP所在接口的MAC地址;源IP/PORT,以及目標 IP/PORT均保持不變 

1 LVS和各RS都配置有VIP 
2 確保前端路由器將目標IP爲VIP的請求報文發往LVS
方式1:
在前端網關做靜態綁定VIP和LVS的MAC地址
方式2:
在RS上使用arptables工具      
arptables -A IN -d $VIP -j DROP      
arptables -A OUT -s $VIP -j mangle --mangle-ip-s $RIP
方式3:
在RS上修改內核參數以限制arp通告及應答級別 
忽略apr廣播: 
/proc/sys/net/ipv4/conf/all/arp_ignore   --1
不宣稱自己有這段IP:
/proc/sys/net/ipv4/conf/all/arp_announce --2
後端服務器也設置vip一樣的IP地址
配置解析:
限制響應級別:arp_ignore 
0:默認值,表示可使用本地任意接口上配置的任意地址進行響應 
1: 僅在請求的目標IP配置在本地主機的接收到請求報文的接口上時,纔給予響應

限制通告級別:arp_announce 
0:默認值,把本機所有接口的所有信息向每個接口的網絡進行通告 
1:儘量避免將接口信息向非直接連接網絡進行通告 
2:必須避免將接口信息向非本網絡進行通告 
參數其它配置:
[root@KEEP211:01:29~]#find /proc -name *arp_ign*
/proc/sys/net/ipv4/conf/all/arp_ignore
/proc/sys/net/ipv4/conf/default/arp_ignore
/proc/sys/net/ipv4/conf/eth0/arp_ignore
/proc/sys/net/ipv4/conf/eth1/arp_ignore
/proc/sys/net/ipv4/conf/lo/arp_ignore
........................................................
[root@KEEP211:47:29~]#find /proc -name *arp_announce*
/proc/sys/net/ipv4/conf/all/arp_announce
/proc/sys/net/ipv4/conf/default/arp_announce
/proc/sys/net/ipv4/conf/eth0/arp_announce
/proc/sys/net/ipv4/conf/eth1/arp_announce
/proc/sys/net/ipv4/conf/lo/arp_announce

vip配置在lo接口上!
舉例:
ip a a 1.1.1.1/32 dev lo --要配置32的子網掩碼
 ---加默認路由 route add default dev eth0

ping -I 1.1.1.1 1.1.1.2 --指定從本機那個IP -ping對方

DR模型特點:
1 RS的RIP可以使用私網地址,也可以是公網地址;
2 RIP與DIP在同一IP網絡; RIP的網關不能指向DIP,以確保響應報文不會經由Director
3 RS和LVS一個物理網絡
4 請求報文要經由LVS,相應報文不經過LVS
而由RS直接發往 Client
5 不支持端口映射-端口不能修改
6 RS可使用大多數OS系統 

DR模型不用啓用ip_forward功能
NAT模型必須要啓用此功能

LVS四種模型簡介:tun

lvs-tun: 在原請求IP報文之外新加一個IP首部
轉發方式:不修改請求報文的IP首部(源IP爲CIP,目標IP爲VIP)
而在原IP報文之外再封裝一個IP首部(源IP是DIP,目標IP是RIP)
將報文發往挑選出的目標 RS;RS直接響應給客戶端(源IP是VIP,目標IP是CIP) 

(1) DIP, VIP, RIP都應該是公網地址 
(2) RS的網關一般不能指向DIP 
(3) 請求報文要經由Director,但響應不能經由Director 
(4) 不支持端口映射 
(5) RS的OS須支持隧道功能 

LVS四種模型簡介:lvs-fullnat

lvs-fullnat:
通過同時修改請求報文的源IP地址和目標IP地址進行轉發  
 CIP --> DIP   
 VIP --> RIP   
    (1) VIP是公網地址,RIP和DIP是私網地址,且通常不在同一IP網絡;
    因此RIP的網關一般不會指向DIP  

    (2) RS收到的請求報文源地址是DIP,因此只需響應給DIP;
    但Director還 要將其發往Client  

    (3) 請求和響應報文都經由LVS
    (4) 支持端口映射  

    注意:此類型kernel默認不支持

模式之間差異總結:

差異總結:
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頭實現轉發,支持遠距離通信 

對比項                 NAT               TUN               DR
後端服務器          任何服務器        必須支持隧道       關閉apr廣播
服務器網絡          私網/公網         私網/公網           局域網
後端服務器數量       10--20            最大100            最大100
服務器網關:        指向LVS            其它路由           其它路由

LVS十種算法:靜態算法

1、RR:roundrobin,輪詢 
2、WRR:Weighted RR,加權輪詢 
 自己的權重/總權重

3、SH:Source Hashing,實現session sticky,源IP地址hash;
將來自於同一個IP地址的請求始終發往第一次挑中的RS,從而實現會話綁定 

4、DH:Destination Hashing;目標地址哈希,將發往同一個目標地址的請求始終轉發至第一次挑中的RS,
典型使用場景是正向代理緩存場景中的負載均衡, 如:寬帶運營商

LVS十種算法:動態算法

1、LC:least connections 適用於長連接應用[最小連接算法]  
Overhead=activeconns*256+inactiveconns 
          活動連接*256+非活動連接
          值越小優先級越高!
2、WLC:Weighted LC,默認調度方法  
Overhead=(activeconns*256+inactiveconns)/weight 
          (活動連接*256+非活動連接)/權重
          值越小優先級越高!
          權重越大,值越小,優先級越高
          第一個請求過來時,爲0
3、SED:Shortest Expection Delay,初始連接高權重優先  
Overhead=(activeconns+1)*256/weight 
          (活動連接+1)*256/權重
4、NQ:Never Queue,第一輪均勻分配,後續SED 

5、LBLC:Locality-Based LC,動態的DH算法,
使用場景:根據負載狀態實現 正向代理 

6、LBLCR:LBLC with Replication,帶複製功能的LBLC,
解決LBLC負載不均衡 問題,從負載重的複製到負載輕的RS
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章