IPVS負載均衡


概念:

ipvs (IP Virtual Server) 實現了傳輸層負載均衡,也就是我們常說的4層LAN交換,作為 Linux 內核的一部分。ipvs運行在主機上,在真實服務器集群前充當負載均衡器。ipvs可以將基於TCPUDP的服務請求轉發到真實服務器上,並使真實服務器的服務在單個 IP 地址上顯示為虛擬服務。

ipvs vs. iptables

我們知道kube-proxy支持 iptables 和 ipvs 兩種模式, 在kubernetes v1.8 中引入了 ipvs 模式,在 v1.9 中處於 beta 階段,在 v1.11 中已經正式可用了。iptables 模式在 v1.1 中就添加支持了,從 v1.2 版本開始 iptables 就是 kube-proxy 默認的操作模式,ipvs 和 iptables 都是基於netfilter的,那么 ipvs 模式和 iptables 模式之間有哪些差異呢?

  • ipvs 為大型集群提供了更好的可擴展性和性能
  • ipvs 支持比 iptables 更復雜的復制均衡算法(最小負載、最少連接、加權等等)
  • ipvs 支持服務器健康檢查和連接重試等功能

ipvs 依賴 iptables

ipvs 會使用 iptables 進行包過濾、SNAT、masquared(偽裝)。具體來說,ipvs 將使用ipset來存儲需要DROPmasquared的流量的源或目標地址,以確保 iptables 規則的數量是恆定的,這樣我們就不需要關心我們有多少服務了

LVS調度算法:

1. 輪叫調度 rr
這種算法是最簡單的,就是按依次循環的方式將請求調度到不同的服務器上,該算法最大的特點就是簡單。輪詢算法假設所有的服務器處理請求的能力都是一樣的,調度器會將所有的請求平均分配給每個真實服務器,不管后端 RS 配置和處理能力,非常均衡地分發下去。

2. 加權輪叫 wrr
這種算法比 rr 的算法多了一個權重的概念,可以給 RS 設置權重,權重越高,那么分發的請求數越多,權重的取值范圍 0 – 100。主要是對rr算法的一種優化和補充, LVS 會考慮每台服務器的性能,並給每台服務器添加要給權值,如果服務器A的權值為1,服務器B的權值為2,則調度到服務器B的請求會是服務器A的2倍。權值越高的服務器,處理的請求越多。

3. 最少鏈接 lc
這個算法會根據后端 RS 的連接數來決定把請求分發給誰,比如 RS1 連接數比 RS2 連接數少,那么請求就優先發給 RS1

4. 加權最少鏈接 wlc
這個算法比 lc 多了一個權重的概念。

5. 基於局部性的最少連接調度算法 lblc
這個算法是請求數據包的目標 IP 地址的一種調度算法,該算法先根據請求的目標 IP 地址尋找最近的該目標 IP 地址所有使用的服務器,如果這台服務器依然可用,並且有能力處理該請求,調度器會盡量選擇相同的服務器,否則會繼續選擇其它可行的服務器

6. 復雜的基於局部性最少的連接算法 lblcr
記錄的不是要給目標 IP 與一台服務器之間的連接記錄,它會維護一個目標 IP 到一組服務器之間的映射關系,防止單點服務器負載過高。

7. 目標地址散列調度算法 dh
該算法是根據目標 IP 地址通過散列函數將目標 IP 與服務器建立映射關系,出現服務器不可用或負載過高的情況下,發往該目標 IP 的請求會固定發給該服務器。

8. 源地址散列調度算法 sh
與目標地址散列調度算法類似,但它是根據源地址散列算法進行靜態分配固定的服務器資源。

LVS三種模式對比:

img

ipvsadm參數:

添加虛擬服務器
    語法:ipvsadm -A [-t|u|f]  [vip_addr:port]  [-s:指定算法]
    -A:添加
    -t:TCP協議
    -u:UDP協議
    -f:防火牆標記
    -D:刪除虛擬服務器記錄
    -E:修改虛擬服務器記錄
    -C:清空所有記錄
    -L:查看
添加后端RealServer
    語法:ipvsadm -a [-t|u|f] [vip_addr:port] [-r ip_addr] [-g|i|m] [-w 指定權重]
    -a:添加
    -t:TCP協議
    -u:UDP協議
    -f:防火牆標記
    -r:指定后端realserver的IP
    -g:DR模式
    -i:TUN模式
    -m:NAT模式
    -w:指定權重
    -d:刪除realserver記錄
    -e:修改realserver記錄
    -l:查看
通用:
    ipvsadm -ln:查看規則
    service ipvsadm save:保存規則

負載均衡器端:

安裝LVS
    [root@lb01 ~]#yum -y install ipvsadm 
    [root@lb01 ~]#ipvsadm  
添加綁定VIP
    [root@lb01 ~]#ip addr add 192.168.0.89/24 dev eth0 label eth0:1
配置LVS-DR模式
    [root@lb01 ~]#ipvsadm -A -t 192.168.0.89:80 -s rr //創建一個DR,並指定調度算法采用rr。
    [root@lb01 ~]#ipvsadm -a -t 192.168.0.89:80 -r 192.168.0.93 -g  //添加RS
    [root@lb01 ~]#ipvsadm -a -t 192.168.0.89:80 -r 192.168.0.94 -g  //添加RS

Real-Server端

配置測試后端realserver
    配置httpd省略
    [root@realserver-1 ~]#curl 192.168.0.93 #測試realserver-1網站是否正常    
    192.168.0.93
    [root@realserver-2 ~]#curl 192.168.0.94 #測試realserver-2網站是否正常
    192.168.0.94
綁定VIP到lo網卡
    [root@realserver-1 ~]#ip addr add 192.168.0.89/32 dev lo label lo:1  #由於DR模式需要realserver也有VIP
抑制ARP
    [root@realserver-1 ~]#echo 2 > /proc/sys/net/ipv4/conf/all/arp_announce  
    [root@realserver-1 ~]#echo 2 > /proc/sys/net/ipv4/conf/lo/arp_announce
    [root@realserver-1 ~]#echo 1 > /proc/sys/net/ipv4/conf/all/arp_ignore
    [root@realserver-1 ~]#echo 1 >/proc/sys/net/ipv4/conf/lo/arp_ignore  

客戶端測試

[root@test ~]#curl 192.168.0.89
192.168.0.93
[root@test ~]#curl 192.168.0.89
192.168.0.94

參考:

https://blog.csdn.net/qq_15437667/article/details/50644443

https://www.centos.bz/2017/09/lvs-intro-and-lvs-keepalived/

http://blog.maxkit.com.tw/2016/05/lvs-lvs-natlvs-tunlvs-dr.html

https://jishu.io/kubernetes/ipvs-loadbalancer-for-kubernetes/

https://blog.qikqiak.com/post/how-to-use-ipvs-in-kubernetes/

https://www.opsdev.cn/post/IPVSinKube-proxy.html

https://segmentfault.com/a/1190000016333317

https://www.cnblogs.com/liwei0526vip/p/6370103.html


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM