LB集羣實現前端
硬件nginx
1 F5 2 BIG-IP 3 Citrix NetScaler 4 A10 5 Redware
軟件算法
1 lvs 2 haproxy 3 nginx 4 ats apache traffic server 5 perlbal 基於工做協議層次劃分 傳輸層 lvs,haproxy(mode tcp) 應用層 naproxy, nginx, ats, perlbar
LVS基礎知識apache
工做在傳輸層的軟件(TCP/IP協議棧),能基於TCP和UDP(目標IP和目標PORT)對請求進行負載均衡,也稱四層交換、四層路由 能根據負載均衡算法發送至後端主機集羣中某一臺主機 netfilter鏈使用 PREROUTING ---> INPUT ---> POSTROUTING ipvsadm 用戶空間命令行工具,定義集羣規則,管理集羣服務 ipvs 工做在內核中netfilter INPUT鉤子上 ipvsadm經過系統調用將規則發送給ipvs 支持TCP、UDP、AH、EST、AH_EST、SCTP等諸多協議
查看內核編譯IPVS狀況後端
1 grep -i -A 10 'IPVS' /boot/config-3.10.0-693.17.1.el7.x86_64
LVS Arch服務器
1 調度器:director, dispatcher, balancer 2 RS:Real Server
LVS Typecookie
lvs-nat網絡
MASQUERADE類型 多目標的DNAT模式(iptables):它經過修改請求報文的目標IP地址(必要時一併修改目標PORT)至挑選出的Real Server的IP地址實現轉發 特性 1. RealServer的IP地址和DIP使用私網地址 2. 請求和響應報文都經由調度器轉發,極高負載的場景中,調度器:director可能會成爲系統瓶頸 3. 支持端口映射 4. RealServer可使用任意OS 5. RIP 和 DIP 最好在同一IP網絡
lvs-dr (direct routing)session
GATEWAY類型 它經過修改請求報文的目標mac地址進行轉發 1. 保證前端路由器將目標IP爲VIP的請求報文發送給Director 靜態綁定 arptables 修改RS主機的內核參數 2. RIP可使用私網地址也可使用公網地址,只要保證能和Director、公網通訊 3. RealServer 和 Director 要在一個局域網中 4. 請求報文經由Director調度,但響應報文直接由Real Server發送 5. RealServer網關不能指向DIP 6. 不支持端口映射 7. RealServer能夠用大多數OS
lvs-tun (ip tunneling)負載均衡
IPIP類型 1. RIP,DIP,VIP全都是公網地址 2. RealServer的網關不能指向DIP 3. 請求報文必須由Director調度,但響應報文必須由RealServer發送 4. 不支持端口映射 5. RealServer必須支持隧道功能
lvs-fullnat
Director經過同時修改請求報文的目標地址和源地址進行轉發 1. VIP是公網地址,RIP和DIP是私網地址,兩者無須在同一網絡中 2. Real Server 接收到請求報文的源地址爲DIP,所以要響應給DIP 3. 請求報文和響應報文都經由Director 4. 支持端口映射機制 5. Real Server 可使用任意OS
LVS Scheduler
靜態方法:僅根據算法自己調度 RR round robin,輪詢 WRR weight round robin,加權輪詢 DH destination hash,將對同一個目標的請求始終調度至同一RealServer SH source hash,session保持機制 動態方法:根據算法和各RealServer當前負載狀態進行調度 LC least connection,最少活動鏈接 Overhead(負載) = Active * 256 + Inactive WLC weight least connection,加權最少活動鏈接 Overhead = (Active * 256 + Inactive) / weight SED shortest expection delay,最短時間望延遲 Overhead = (Active + 1 ) * 256 NQ never queue,永不排隊 SED算法改進:第一輪用SED挑,挑一個排除一個,直到全部的RS都處理過一個請求,後續的使用SED處理 LBLC locality-based least connection,動態DH算法 正向代理情形下的cache server調度 LBLCR Locality-Based Least-Connection with Replication,帶複製功能的LBLC
ipvs集羣服務
1. 一個ipvs主機能夠同時定義多個cluster service 2. 一個cluster service上至少應該有一個Real Server 3. 定義cluster service時,要同時指明lvs-type、lvs scheduler
ipvsadm用法
service-address tcp:-t ip:port udp:-u ip:port fwm:-f mark server-address ip[:port] lvs-type -g:gateway,dr -i:ipip,tun -m:masquerade,nat scheduler -s:默認爲wlc 管理集羣服務 ipvsadm -A|E -t|u|f service-address [-s scheduler] ipvsadm -D -t|u|f service-address 管理集羣服務的RealServer ipvsadm -a|e -t|u|f service-address -r server-address ipvsadm -d -t|u|f service-address -r server-address 清空和查看 ipvsadm -C ipvsadm -L|l [options] -n:numberic,以數字格式顯示地址和端口 -c:connection,顯示當前TCP鏈接 --stats,statistics,顯示統計數據 --rate:速率 --sort:排序 --exact:精確值 保存和重載 ipvsadm -R ipvsadm -S [-n] 置零計數器 ipvsadm -Z [-t|u|f service-address]
實例:lvs-nat
Director VIP 192.168.111.128 DIP 192.168.1.1 RealServer(Web Server) RIP1 192.168.1.2:8080 RIP2 192.168.1.3:8080 ipvsadm -A -t 192.168.111.128:80 -s rr ipvsadm -a -t 192.168.111.128:80 -r 192.168.1.2 -m ipvsadm -a -t 192.168.111.128:80 -r 192.168.1.3 -m ipvsadm -L -n ipvsadm -E -t 192.168.111.128:80 -s sh ipvsadm -L -n ipvsadm -e -t 192.168.111.128:80 -r 192.168.1.2:8080 -m ipvsadm -e -t 192.168.111.128:80 -r 192.168.1.3:8080 -m ipvsadm -S > /etc/sysconfig/ipvsadm || ipvsadm-save
實例:lvs-dr
Director VIP 192.168.111.10 DIP 192.168.111.128 RealServer(Web Server) RIP1 192.168.111.11 gw 192.168.111.1 VIP1(lo) 192.168.111.10 RIP2 192.168.111.12 gw 192.168.111.1 VIP2(lo) 192.168.111.10 LAN-ARP問題解決(多個VIP地址相同,IP地址必須惟一) 修改RealServer兩個內核參數 arp_announce 0 通告自身擁有的全部地址 1 儘可能避免把非本網絡的地址往外通告 2 老是使用最佳地址向外通告(能解決問題) arp_ignore 0 通告自身擁有的全部地址 1 請求報文從哪一個接口進入,就用哪一個接口的地址響應(能解決問題) Director VIP Configure (alias broadcast intface_network) ifconfig ens33:0 192.168.111.10/32 broadcast 192.168.111.10 up route add -host 192.168.111.10 dev ens33:0 Real Server Configure (defined kernel args) echo 1 > /proc/sys/net/ipv4/conf/all/arp_ignore echo 1 > /proc/sys/net/ipv4/conf/ens33/arp_ignore echo 2 > /proc/sys/net/ipv4/conf/all/arp_announce echo 2 > /proc/sys/net/ipv4/conf/ens33/arp_announce ifconfig lo:0 192.168.111.10/32 broadcast 192.168.111.10 up route add -host 192.168.111.10 dev lo:0 IPVS Rule ipvsadm -A -t 192.168.111.10:80 -s rr ipvsadm -a -t 192.168.111.10:80 -r 192.168.111.11 -g ipvsadm -a -t 192.168.111.10:80 -r 192.168.111.12 -g 多服務負載使用同一集羣 將共享同一組RS的集羣服務同一進行定義 Directior # 使用FWM定義集羣 iptables -t mangle -A PREROUTING -d 192.168.111.10 -p tcp -dport 80 -j MARK --set-mark 10 iptables -t mangle -A PREROUTING -d 192.168.111.10 -p tcp -dport 443 -j MARK --set-mark 10 # iptables -t mangle -A PREROUTING -d 192.168.111.10 -p tcp -dport 22 -j MARK --set-mark 10 # 基於FWM定義集羣服務 ipvsadm -A -f 10 -s rr ipvs -a -f 10 -r 192.168.111.11 ipvs -a -f 10 -r 192.168.111.12
實例:lvs-dr (RIP,DIP不在同一網段)
1 加一臺Route Host兩個IP地址,一個能和公網通訊,另外一個是RIP的網關 2 這樣即便RIP和DIP不在同一網段,也能經過這臺路由器轉發數據包 3 路由器既要對DIP到RIP的數據包進行轉發,也要對VIP到CIP的數據包進行轉發
RealServer高可用
防止:RS宕機而Director還繼續對它進行調度 方法:讓Director對其作健康狀態檢測機制,並根據檢測的結果自動完成添加或移除等管理功能 總結 1. 基於協議層檢測 網絡層:icmp 傳輸層:檢測端口的開放狀態 應用層:請求獲取關鍵性資源 2. 檢查頻率 3. 狀態判斷 下線: success ---> failure ---> failure ---> failure 上線:failure ---> success ---> success ---> success 4. 日誌問題 作PV時,健康檢測訪問Web的日誌不該該被算入正常請求日誌 5. back server, sorry server 全部RS宕機時,須要反饋用戶一些信息 默認sorry server weight爲0,當全部RS宕機時sorry爲1
解決Session保持問題
session綁定 object source ip hash cookies hash lvs sh 未來自同一個用戶IP的請求都定向到同一個Real Server,自行維護一個會話追蹤表 lvs persistence 不管ipvs使用何種調度方法,其都能實現未來自同一個Client的請求始終定向至上一次調度時挑選出的RS 需求:持久鏈接模板,sourceip realserver timer,每一個鏈接都有一個計數器, 存儲在模板中,爲LVS提供算法調度的參數 持久鏈接的實現方式 每一個端口持久:PPC,單服務持久調度 每一個FWM持久:PFWMC,單FWM持久調度 PORT AFFINITY 每一個客戶端持久:PCC,單客戶端持久調度 Director會將用戶的任何請求都識別爲集羣服務,並向RS進行調度 使用:-p指定超時時間單位s ipvsadm -A|E -t|u|f service-address [-s scheduler] [-p [timeout]] session複製 ... session集羣 ... session服務器 ...