歡迎來到Linux教程網
Linux教程網
Linux教程網
Linux教程網
Linux教程網 >> Linux基礎 >> 關於Linux >> Lvs 理論知識和實踐

Lvs 理論知識和實踐

日期:2017/3/1 12:23:25   编辑:關於Linux
LVS是Linux Virtual Server的簡寫,意即Linux虛擬服務器,是一個虛擬的服務器集群系統。本項目在1998年5月由章文嵩博士成立,是中國國內最早出現的自由軟件項目之一。 LVS集群采用IP負載均衡技術和基於內容請求分發技術。調度器具有很好的吞吐率,將請求均衡地轉移到不同的服務器上執行,且調度器自動屏蔽掉服務器的故障,從而將一組服務器構成一個高性能的、高可用的虛擬服務器。整個服務器集群的結構對客戶是透明的,而且無需修改客戶端和服務器端的程序。為此,在設計時需要考慮系統的透明性、可伸縮性、高可用性和易管理性。 1,Cluster 理論 1.1,系統拓展的方式: scale up:向上發展; scaleout:向外發展; 1.2,集群類型: LB:負載均衡集群 -->將一個系統上所面臨的諸多負載load Banlancing另外一個主機上; 硬件: F5 Big-ip Citrix Netscaler A10 A10 軟件:Lvs(大型網站)除了負載均衡沒有其他的健康檢測狀態; haproxy, nginx (居多),httpd(proxy模塊) ,varnish ats (apache traffic server)發展需要; perlbal 基於工作協議層劃分: 傳輸層: Lvs,haproxy(模擬出TCP層可調度mode tcp); 應用層:haproxy(個別協議),nginx,ats,perlbal HA:高可用集群,high availability HP:高性能集群,high performancing 分布式存儲及並行處理集群, 1.3,系統: 可擴展性; 可用性; 容量;例如高速公路,可以跑多少汽車; 單位時間內完成的總量; 性能;例如車速,單位時間內通過的汽車數量;響應時間; 注意,系統運維:可用性-->做好標准化-->自動化運維 (穩定性高於一切); ################################################################################# 2,構建高可用擴展性系統的重要原則,在系統內部盡量避免穿行和交互; GSLB: Global serviceload balancing全局負載均衡 SLB:service load balancing 服務負載平衡 分層:負載均衡層靜態內容層 數據存儲層 動態內容層 分割:功能上分割,把不同的請求分布到不同的server; 分布式: 分布式應用; 分布式靜態資源; 分布式數據和存儲; 分布式計算; 2.1,四層交換,四層路由 根據請求報文的目標IP和port將其轉發至後端主機集群中的某一台主機(根據負載均衡算法); netfilter: 入站: prerouting------>input; 轉發:prerouting---> forward--->postrouting; 出站:output---->postrouting; 2.2,Lvs : ipvsadm (寫規則)/ipvs(定義規則) 工作在netfilter的內核中; ipvsadm:用戶空間的命令行工具,用於管理集群服務; ipvs:工作在內核中netfilter INPUT 鉤子協議上; 支持TCP、UDP、AH、EST、AH_EST、SCTP等協議; 2.3,Centos 7 查看調度模塊信息; # grep -i -A 10 'IPVS'/boot/config-3.10.0-229.el7.x86_64 2.4,Lvs arch : 調度器:director(導演)、dispatcher(調度員)、 RS:Real server, client IP:cip directorvirutal ip:vip director ip:dip real serverip:rip 2.5,Lvs type: A, Lvs-nat:基於Dnat模式masquerade(地址偽裝)類型 B,Lvs-dr:直接路由directrouting,gateway類型 C,Lvs-tun:ip隧道 ip tunnelingIPIP 隧道類型 D,Lvs-fullnat:非標准類型 請求報文轉發時修改源、目標地址 A,Lvs-nat: 多目標的DNAT(iptables); 通過修改請求報文的目標IP地址和端口,完成端口映射,至挑選出某RS的RIP地址實現轉發; (1) RS應該和DIP使用私網地址,且RS的網關需要指向DIP; (2)請求和響應報文都要經由director轉發;極高負載的場景中,director可能會成為系統瓶頸; (3)RS 可以使用任意OS,支持端口映射; (4)RS的RIP和director的DIP必須在同一IP網絡; 如圖1.1所示: B,Lvs-dr:direct routing 通過修改請求報文的目標mac地址進行轉發; director:VIP ,DIP RSs:RIP,VIP (1)必須保證前段路由器將目標IP為VIP的請求報文發送給director; 解決方案: 靜態綁定;director MAC地址綁定 arptables;在每個real server 啟用arptables, 修改RS主機內核參數(linux 主機); (2)RS的RIP可以使用私有地址,但也可以使用公網地址; (3)RS根director必須在同一物理網絡; (4)請求報文經由director調度,但響應報文不一定能經由director(由RS直接轉發); (5)不支持端口映射 (6)RS可以大多數OS; (7)RS的網關不能指向DIP; ################################################################################# 3,Lvs -type Lvs-nat:RIP與DIP必須在同一網段; Lvs-dir: director與RS必須在同一網段; Lvs-tun: 不修改請求報文的IP首部,而是通過原有的IP首部之外,在封裝一個IP首部; (1)RIP、DIP、VIP都是公網地址; (2)RS網關不能指向DIP, (3)請求報文經由director調度,響應報文必須不經由director; (4)不支持端口映射,RS的OS必須支持隧道功能; Lvs-fullnat:可以跨機房設置 請求報文到達時,director同時修改報文的源地址和目標地址; (1)VIP是公網地址,DIP和RIP可以不在同一網段; (2)RS接收到的請求報文源地址為DIP,因此要響應給DIP; (3)請求報文和響應報文必須經由director; (4)支持端口映射,RS的OS可以使用任意OS; 4,http:stateless 追蹤每一客戶端,需要給每一個客戶端發放一個cookie; session保持:將來自於同一個用戶的請求,調用到同一個RS; session綁定:請求報文插入cookie, (nginx可以,lvs不可以 session集群;session主從機制會浪費內存、cpu等消耗; session服務器;共享存儲服務器,KV機制存儲; 5,Lvs scheduler: 靜態方法:僅根據算法本身進行調度,不考慮負載狀態;起點公平 RR: roundrobin ,輪詢 WRR:weighted rr ,加權 SH:source hash 源地址hash 實現session保持;損害負載均衡的效果; 將來自同一個IP的請求始終調度至同一RS;反向代理 DH:destination hash,目標地址hash,不管來自哪一個的請求,請求同一個目標時,都會調度至同一個RS, 正向代理 動態方法:根據算法及各RS的當前負載狀態進行調度;sh LC:least connection 最少連接數; overhead=active(活躍的鏈接數量)*256+inactive(不活躍的連接數) WLC:weighted least connection 加權最少連接; overhead=(active(活躍的)*256+inactive(不活躍的))/weight 服務器權重 SED:最短期望延遲 shortest expection delay overhead=(active+1)*256/weight NQ:never queue SED算法改進 LBLC:locality-based lc,動態DH算法,實現正向代理時; LBLCR:帶復制的的LBLC 權重大的響應請求,分配延遲 ####################################################################################### 靜態 局部性:空間 + 時間 制作緩存時,基於內存的緩存方式 動態內容:時間 + 特定 制作緩存時,根據用戶時長判斷; ###################################################################### 6,Lvs的集群服務:TCP、UDP、ah、esp (1)一個ipvs主機可以同時定義多個clusterserver; 根據tcp,udp (2)一個cluster server上至少有一個real server; 定義時:指明lvs-type 以及lvs scheduler(程序機); 7,ipvsadm的用法: A,管理集群服務; ipvsadm-A|E -t|u|f service-address [-s scheduler] 增加和修改 ipvsadm-D -t|u|f service-address 刪除 ipvsadm-C刪除 ipvsadm -L | l [options] service-address: tcp:-t ip:port udp:-u ip:port fwm:-f mark 數字防火牆標記; -sscheculer:默認為wlc 非活動鏈接數量 B,管理集群服務中的RS; ipvsadm -a|e -t|u|f service-address -rserver-address [-g|i|m] [-wweight] ipvsadm -d -t|u|f service-address -r server-address server-address; ip [:port] 支持端口映射;大多數端口可省略; Lvs-type: -g:gateway,dr -i:ipip, tun -m:masquerade,nat nat模型 C, 清空和查看: ipvsadm -C ipvsadm -L | l[options] -n:numberic 基於數字格式顯示地址和端口; -c:connection 顯示ipvs連接數; --stats:統計數據;pkts:總包數 --rate:速率; pps 每秒的包個數 --exact:精確值; --sort:排序; D, 保存和重載: ipvsadm -R重載 ipvsadm -S [-n] 保存 E,置零計數器: ipvsadm -Z[-t|u|f service-address] ###################################################################################################### 二,實操部分 Lvs-nat 1,DIP 設置:director准備兩個網口,一個是網橋,一個是虛擬網卡2; # cd /etc/sysconfig/network-scripts/ # vimifcfg-eno16777736 #ifconfig -a 查看eno16777736地址 設置另外一個端口vmnet2: # cpifcfg-eno16777736 ifcfg-eno33554984 # vim ifcfg-eno33554984刪除UUID更改NAME、DEVICE參數; 2,接下來我們配置另外兩台web機器: 分別配置兩台web服務器的IP地址,和web服務; 然後在director上面測試兩個頁面;並關閉iptables防護牆; #curl http://192.168.20.7 #curl http://192.168.20.8 #iptables -F 在director上轉發功能打開 # cat /proc/sys/net/ipv4/ip_forward # vim /etc/sysctl.conf編輯添加"net.ipv4.ip_forword = 1" 3,現在在director上面設置規則: # ipvsadm -A -t 172.16.100.117:80 -s rr # ipvsadm -a -t 172.16.100.117:80 -r192.168.20.7 -m # ipvsadm -a -t 172.16.100.117:80 -r192.168.20.8 -m 4,保存配置永久有效: ]# ipvsadm -S > /etc/sysconfig/ipvsadm 5,如果不小心刪除規則,可以及時修復; 6,重讀配置文件,並修復; # ipvsadm -R < /etc/sysconfig/ipvsadm 7,開始驗證Lvs-nat 效果: http://172.16.100.117來查看; 8,使用"-E"選項修改調度器: #ipvsadm -E -t 172.16.100.117:80 -s sh 9,基於web修改RS端口映射; # ipvsadm -e -t172.16.100.117:80 -r 192.168.20.7:8080 -m # ipvsadm -e -t172.16.100.117:80 -r 192.168.20.8:8080 -m 或者修改 #vim/etc/sysconfig/ipvsadm 裡的參數;然後重讀信息。 wKioL1Yfm3XyKQg_AAEPFaaq0qQ904.jpg 這樣web服務又恢復了正常; 10,刪除一個real server; #ipvsadm -d -t 172.16.100.117:80 -r192.168.20.7:8080 刪除集群服務: #ipvsadm -D -t 172.16.100.117:80 修復ipvsadm #ipvsadm -R < /etc/sysconfig/ipvsadm 11,Lvs-dr 內核參數配置arp_ignore對請求是否響應/ arp_announce 接不接受請求通告 arp_announce(通告)-INTEGER請求 0 默認,不保留通告 1 盡量不通告 2只能、總是避免通告 arp_announce = 1 盡量避免, arp_announce = 2 只能、總是避免, arp_ignore -INTEGER 響應 0 -默認 通告全場 1 -僅通告報文請求的入口, Lvs-dr實操圖: A,修改DIP 配置director主機地址和回環地址: # ifconfigeno16777736:0 172.16.100.118/32 broadcast 172.16.100.118 up # route add -host 172.16.100.118 deveno16777736:0限定接口-->目標地址響應 B,配置real server *參數配置--->配置VIP 配置兩台real server內核參數; # echo 1 >/proc/sys/net/ipv4/conf/all/arp_ignore # echo 1 >/proc/sys/net/ipv4/conf/eth0/arp_ignore # echo 2 >/proc/sys/net/ipv4/conf/all/arp_announce # echo 2 >/proc/sys/net/ipv4/conf/eth0/arp_announce # ifconfig lo:0 172.16.100.118/32broadcast 172.16.100.118 up添加回環Vip地址 # route add -host 172.16.100.118 devlo:0端口限定 C,請求RIP地址驗證;curl 命令; D,director上添加集群服務; #ipvsadm -C 刪除之前的配置 # ipvsadm -A -t172.16.100.118:80 -s rr # ipvsadm -a-t 172.16.100.118:80 -r 172.16.100.21 -g # ipvsadm -a-t 172.16.100.118:80 -r 172.16.100.22 -g
Copyright © Linux教程網 All Rights Reserved