lvs+keepAlived→效率最高的負載均衡

super_lixiang發表於2018-09-14

一、 簡介 

1. 負載均衡的型別 

  • 負載均衡可以採用硬體裝置(例如常常聽見的 F5),也可以採用軟體負載
  • 商用硬體負載裝置成本通常較高(一臺幾十萬甚至上百萬),所以一般 情況下會採用軟體負載
  • 軟體負載解決的兩個核心問題是:選誰、轉發,其中最著名的是 lvs 

2. lvs 是什麼? 

  • 英文全稱是 Linux Virtual Server,即 Linux 虛擬伺服器
  • 由 章 文 嵩 博 士 發 起 的 自 由 軟 件 項 目 , 它 的 官 方 站 點 是 www.linuxvirtualserver.org
  • Linux2.4 核心以後,LVS 已經是 Linux 標準核心的一部分
  • 可以將請求分發給後端真實伺服器處理
  • 有許多比較著名網站和組織都在使用 LVS 架設的叢集系統,例如:Linux 的入口網站(www.linux.com)、向 RealPlayer 提供音訊視訊服務而聞 名的 Real 公司(www.real.com )、全球最大的開源網站 (sourceforge.net)等
  • 提供了多種排程演算法
  1. 輪詢排程(Round-Robin Scheduling)
  2. 加權輪詢排程(Weighted Round-Robin Scheduling)
  3. 最小連線排程(Least-Connection Scheduling)
  4. 加權最小連線排程(Weighted Least-Connection Scheduling)
  5. 基於區域性性的最少連結(Locality-Based Least Connections  Scheduling)
  6. 帶 復 制 的 基 於 局 部 性 最 少 鏈 接 ( Locality-Based Least  Connections with Replication Scheduling)
  7. 目標地址雜湊排程(Destination Hashing Scheduling)
  8. 源地址雜湊排程(Source Hashing Scheduling)
  9. 最短預期延時排程(Shortest Expected Delay Scheduling)
  10. 不 排 隊 調 度 ( Never Queue Scheduling )對應: rr|wrr|lc|wlc|lblc|lblcr|dh|sh|sed|nq
  • 有三種轉發規則
  1. NAT:簡單理解,就是資料進出都通過 LVS,效能不是很好。
  2. TUNL:簡單理解:隧道 
  3. DR:最高效的負載均衡規則 

3. lvs 的體系結構 

  • 最前端的負載均衡層,用 Load Balancer 表示
  • 中間的伺服器叢集層,用 Server Array 表示
  • 最底端的資料共享儲存層,用 Shared Storage 表示
  • 在使用者看來,所有的內部應用都是透明的,使用者只是在使用一個虛擬服 務器提供的高效能服務 

4. keepAlived 是什麼? 

  • 因為所有的請求都要經過負載均衡,所以負載均衡必然是非常重要,不 能掛掉,說白了就是要 keep the lvs alived。
  • 提供的功能就是可以配置 2 臺 LVS,一臺主機,一臺備機。並且檢測任 何一個節點是否還活著。 

5. lvs 的優點? 

  • 抗負載能力強,因為 lvs 工作方式的邏輯是非常之簡單,而且工作在網路 4 層僅做請求分發之用,沒有流量,所以在效率上基本不需要太過考慮。
  • 有完整的雙機熱備方案,當節點出現故障時,lvs 會自動判別,所以系統整體是非常穩定的。
  • 基本上能支援所有應用,因為 lvs 工作在 4 層,所以它可以對幾乎所有應用做負載均衡,包括 http、資料庫、聊天室等等。 

6. lvs 負載均衡機制 

  • lvs 是四層負載均衡,也就是說建立在 OSI 模型的第四層——傳輸層之 上
  • 傳輸層上有 TCP/UDP,lvs 支援 TCP/UDP 的負載均衡
  • 因為 LVS 是四層負載均衡,因此它相對於其它高層負載均衡的解決辦法, 比如 DNS 域名輪流解析、應用層負載的排程、客戶端的排程等,它的效 率是非常高的
  • lvs 的轉發可以通過修改 IP 地址實現(NAT 模式)
  • lvs 的轉發還可以通過修改直接路由實現(DR 模式) 

7. lvs 與 nginx 對比? 

  • 負載度    lvs 優於 nginx 
  • 穩定度    lvs 優於 nginx
  • 伺服器效能要求 lvs 優於 nginx
  • 網路層數的效率 lvs 優於 nginx  網路七層:應用層、會話層、表示層、傳輸層、網路層、鏈路層、 物理層
  • 功能多少   nginx 優於 lvs 

8. lvs+keepAlived 的應用場景? 

  • 大型網站負載均衡

二.lvs搭建

1.規劃

2臺webserver

1臺主lvs

1臺備lvs

2.兩臺webServer的配置

(1)線上安裝httpd,第一臺和第二臺都執行

(2)設定開機自啟動

(3)開啟http伺服器

(4)通過瀏覽器訪問http伺服器,預設埠是80

(5)建立html檔案,寫入內容,區分兩個節點

 

(6)建立檔案並寫入如下內容

#!/bin/bash  
#description : start realserver  
SNS_VIP=192.168.20.50 #定義了一個VIP變數,必須跟真是服務在一個網段
/etc/rc.d/init.d/functions  
case "$1" in  
start)  
echo " start LVS of REALServer"  
/sbin/ifconfig lo:0 $SNS_VIP broadcast $SNS_VIP netmask 255.255.255.255 up  #增加一個本地路由 lo:0
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  
;;  
stop)  
/sbin/ifconfig lo:0 down  
echo "close LVS Directorserver"  
echo "0" >/proc/sys/net/ipv4/conf/lo/arp_ignore  
echo "0" >/proc/sys/net/ipv4/conf/lo/arp_announce  
echo "0" >/proc/sys/net/ipv4/conf/all/arp_ignore  
echo "0" >/proc/sys/net/ipv4/conf/all/arp_announce  
;;  
*)  
echo "Usage: $0 {start|stop}"  
exit 1  
esac

(7)給指令碼賦許可權

(8)啟動指令碼

(9)用ifconfig檢視效果

(10)第二臺http也同樣做上面步驟,增加路由,SNS_VIP要跟第一臺一樣

 

(11)檢視系統核心版本,2.4以後就有lvs,不用安裝

(12)lvs的機器安裝keepalived,做心跳檢查用的

(13)檢視配置檔案安裝位置

(14)建立並覆蓋上面的配置檔案

(15)編輯剛建立的檔案,加入以下內容

global_defs {                       
#   notification_email {             
#   }
#   smtp_connect_timeout 30
        router_id LVS_DEVEL             
}
vrrp_instance VI_1 {            
        state MASTER     #配置LVS是主機的狀態        
        interface eno16777736     #配置LVS機器對外開放的IP       
        virtual_router_id 51        
        priority 100                  
        advert_int 1           
        authentication {        
                auth_type PASS
                auth_pass 1111
        }
        virtual_ipaddress {         
                192.168.20.50    #LVS的對內IP
        }
}
virtual_server 192.168.20.50 80 {
        delay_loop 6           
        lb_algo wrr            
        lb_kind DR         #使用LVSDR模式                 
        nat_mask 255.255.255.0   
        persistence_timeout 0    
        protocol TCP                          
        real_server 192.168.20.233 80 {    #真實服務的IP 
                weight 1        #配置加權輪詢的權重             
                TCP_CHECK {                     
                        connect_timeout 10   
                        nb_get_retry 3
                        delay_before_retry 3
                        connect_port 80
                }
        }
        real_server 192.168.20.203 80 {
                weight 2
                TCP_CHECK {
                        connect_timeout 10
                        nb_get_retry 3
                        delay_before_retry 3
                        connect_port 80
                }
        }
}

(16)開啟LVS機器的keepalived

3.LVS測試

(1)轉發,訪問虛擬IP,真是伺服器提供服務,為了解決瀏覽器快取看不到效果的問題,訪問的URL後加 a=Math.random() 隨機數

(2)故障移除,停其中一個服務,認為down掉了

 

(3)故障恢復自動新增

4.LVS備機搭建

(1)步驟同主機搭建,一直到配置檔案,如下

global_defs {                       

#   notification_email {             

#   }

#   smtp_connect_timeout 30

        router_id LVS_DEVEL             

}

vrrp_instance VI_1 {            

        state BACKUP     #配置LVS是主機的狀態        

        interface eno16777736     #配置LVS機器對外開放的IP       

        virtual_router_id 51        

        priority 100                  

        advert_int 1           

        authentication {        

                auth_type PASS

                auth_pass 1111

        }

        virtual_ipaddress {         

                192.168.20.50    #LVS的對內IP

        }

}

virtual_server 192.168.20.50 80 {

        delay_loop 6           

        lb_algo wrr            

        lb_kind DR         #使用LVSDR模式                 

        nat_mask 255.255.255.0   

        persistence_timeout 0    

        protocol TCP                          

        real_server 192.168.20.233 80 {    #真實服務的IP

                weight 1        #配置加權輪詢的權重             

                TCP_CHECK {                     

                        connect_timeout 10   

                        nb_get_retry 3

                        delay_before_retry 3

                        connect_port 80

                }

        }

        real_server 192.168.20.203 80 {

                weight 2

                TCP_CHECK {

                        connect_timeout 10

                        nb_get_retry 3

                        delay_before_retry 3

                        connect_port 80

                }

        }

}

5.LVS主備測試

(1)主LVS模擬掛掉

(2)測試後,證明主備自動切換,LVS高可用

(3)主LVS啟動,自動上位

相關文章