LVS
-
簡述
-
HA基礎知識
-
lvs配置
簡述
什么是lvs?
lvs是linux virtual server linux虛擬服務的縮寫,通過一臺調度服務器來調度收到的請求并分發給后端的real server。
lvs的功能是什么?
lvs能夠實現在大并發的情況下,將前端調度器收到的請求分發給后端服務器處理,實現了負載均衡集群的作用。
lb基礎知識
lb集群的基本架構
lb常見的調度算法
靜態: RR:round robin,輪詢,你一個我一個。 WRR:weighted round robin,加權輪詢,按照事先設置好的比例的前提下的輪詢。 DH:Destination hashing,目標地址哈希,對目標地址做hash,將對同一個資源的訪問都指向同一臺服務器。 SH:source hashing,源地址地址哈希,對源地址做hash,將同一個來源ip的請求都發送到同一臺服務器上,實現session保持。 動態: LC:least connected,最小連接,inactive+active*256 WLC:weighted least connected,加權最小連接,(inactive+active*256)*weight SED:Shortest Expected Delay,最短期望延遲,(inactive+active*256+1)*weight NQ:never queue,永不排隊,第一次不按照SED的算法來計算,之后的按照(inactive+active*256+1)*weight來計算。 LBLC:Locality-Based Least Connection,基于局部性的最少連接,基于請求目標ip的負載均衡度來計算。 LBLCR:Locality-Based Least Connections withReplication,帶復制的基于局部性最少鏈接,基于請求目標ip的負載均衡度來計算,并且帶復制,也就是說當一方即將超負載就會復制信息到另外一臺rs服務器上保證用戶的緩存信息不會丟失。
lb會遇到的難點和一般解決方案
-
在整個負載均衡集群架構中,可以看見所有的請求的都會先發送到director上,當并發量達到一定程度的時候,這個單一節點就有可能成為整個系統的性能瓶頸,并且當這個節點故障后就會導致整個集群的失效,所以我們可以采用對這個節點做高可用和負載均衡。
-
lb還需要考慮的一個問題就是seesion保持的問題,當調度器分發請求到后端服務器上,可是每一個連接的緩存內容只會在一個主機上,這就會導致,用戶在訪問時,會有可能丟失seesion,為了解決這個問題可以采用三種方式,session與后端主機綁定,session集群,session服務器來解決。
lvs
lvs的負載均衡模型
NAT
dip與sip需要在一個網絡內,當director收到請求報文后,會將請求調度根據算法轉發調度至real server,然后real server返回資源,director再構建響應報文響應,但是也會產生問題,由于是所有的請求和響應都要經過director,所以這個節點極易成為瓶頸所在。
-
director需要開啟內核的路由轉發功能。
echo 1 > /proc/sys/net/ipv4/ip_forward
-
dip與rip遇到在一個網絡內。
-
rip的網關需要指向dip。
route add default gw 192.168.1.20
DR
dip與sip需要在一個物理網絡內,需要接收arp廣播,當director收到請求報文后,會通過arp廣播的方式調度至rs,rs上也配置了vip,所以當rs收到了報文后,解開后發現訪問地址就是本機上的vip,所以就會獲取資源構建響應報文直接通過路由互聯網去送達給用戶,這個方式可以看見,我們的director只需要接收請求報文并且調度廣播出去,響應報文不會像nat一樣還要經由director來響應,這樣提高了director的承載量與性能。
-
rs需要在lo上配置vip。
ifconfig lo:0 192.168.1.200/32 broadcast 192.168.1.200 up
-
rs需要調整核心的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
-
real server 將lo上的vip都路由至lo:0。
route add -host 192.168.1.200 dev lo:0
TUN
當我們的director和rs各自在不同的網絡中,并且位于不同地區,我們就可以采用tun,也就是隧道的方式來解決,tun方式,是在director收到請求報文后,會在原報文的基礎上再構建請求報文,也就是嵌套兩兩層,director與rs建立tcp連接,當rs收到后就會先拆開外面的一層獲得原先的請求報文,之后再拆,就能得到原先的請求內容,然后又發現vip是本機上的地址,然后就直接構建響應報文通過互聯網響應給用戶端。
lvs的配置與規則設置
格式
ipvsadm -[parm [value]]
參數詳解:
-L:列出信息。 -n:以數字的形式顯示。 -c:顯示現在的連接。 --stats 顯示統計信息。 --rate 顯示速率信息。 -A:新增一個虛擬服務。 -E:修改一個虛擬服務。 -D:刪除一個虛擬服務,注意如果直接刪除虛擬服務,設定的real server也會直接全部刪除。 -C:清空所有規則與服務。 -Z:清空所有的計數器。 -s [rr|wrr|lc|wlc|lblc|lblcr|dh|sh|sed|nq]:指定調度算法。 -S [file]:保存ipvsadm規則到一個文件。 -R [file]:從一個文件讀取ipvsadm規則。 -a:新增一個real server -e:修改一個real server -d:刪除一個real server -t|u|f [host[:port]]:設置tcp|udp|fwmark服務。 -m|g|i:設定為masquerading|gatewaying|ipip方式,m為nat方式,g為dr方式,i為tun方式。 -w [num]:指定權重。 -r [ip[:port]]:指定real server。 -p [timeout]:持久連接,即一個cilent的多個請求都由一個rs處理。
常用命令組合示例:
ipvsadm -L -n ipvsadm -L -c ipvsadm -A -t 192.168.1.1:80 -s rr ipvsadm -a -t 192.168.1.1:80 -r 192.168.1.2 -g -w 1 ipvsadm -a -t 192.168.1.1:80 -r 192.168.1.3 -g -w 2 iptables -t mangle -d 192.168.1.1 -m mutilport --dports 22,80 -j mark --mark 1 ipvsadm -A -f 1 -s rr ipvsadm -a -f 1 -r 192.168.1.2 -g -w 1 -p 300 ipvsadm -a -f 1 -r 192.168.1.3 -g -w 2 -p 300
原創文章,作者:Net18_肖肖,如若轉載,請注明出處:http://www.www58058.com/17188