Linux學習系列之lvs+keepalived


LVS簡介

LVS介紹

LVS是Linux Virtual Server的縮寫,意即Linux虛擬服務器,是一個虛擬的服務器集群系統,屬於4層負載均衡

ipvs和ipvsadm的關系

我們使用配置LVS的時候,不能直接配置內核中的ipvs,需要使用ipvs的管理工具ipvsadm進行管理  

LVS術語

LVS轉發原理

LVS負載均衡器接受所有入站請求,並根據調度算法決定哪個realserver處理該請求

LVS調度算法

  • 輪詢(rr):按照請求順序輪流分發到后端RS
  • 加權輪詢(wrr):權值高的獲得的任務更多
  • 最小連接數(lc):動態的將請求建立到連接數較少的RS上
  • 加權最小連接數(wlc):調度器自動詢問RS的真實負載情況,並動態的調整權

LVS調度算法生產環境選型

一般的網絡服務,如:http、mail、MySQL等,常用的調度算法為:

  • 基本輪詢調度rr算法
  • 加權輪詢調度wrr算法
  • 加權最小連接調度wlc算法

LVS轉發模式

  • NAT(Network Address Translation)
  • DR(Direct Routing)
  • TUN

LVS-DR模式

轉發流程

將所有入站請求轉發給后端realserver,后端realserver處理完直接將結果發給客戶端

 

原理

當用戶請求到達Direct Server,此時報文的源IP為CIP、MAC為CIP-MAC,目標IP為VIP、MAC為VIP-MAC
Direct Server根據調度算法確定一台處理請求的realserver,將請求轉發給對應的realserver,此時源IP和目標IP均未改變,僅修改了源MAC為DIP-MAC,目標MAC為RIP-MAC
對應的realserver處理完請求,直接將結果發給客戶端,此時源IP為VIP、MAC為VIP-MAC,目標IP為CIP、MAC為CIP-MAC

特性

  • 通過在調度器上修改數據包的目的MAC地址實現轉發
  • Real-Server和Direct-Server必須在同一網段 
  • Real-Server的lo接口必須綁定VIP 

為什么要抑制ARP請求

  • 由於后端Real-Server要將VIP綁定到lo網卡上,這就出現了一個問題,客戶端請求到達LVS前端路由器的時候,前端路由器會發送一個{*目標地址為VIP*}的請求報文,所以需要抑制Real-Server的ARP,保證讓Direct-Server收到這個報文,而不是realserver收到這個報文
  • 一句話說明抑制Real-Server原因:保證前端路由將目標地址為VIP的報文發給Direct-Server,而不是Real-Server

優勢

只有請求報文經過調度器,而Real-Server響應處理后無需經過調度器,因此並發量大的時候效率很高

LVS-NAT模式

轉發流程

將所有入站請求轉發給后端Real-Server,后端Real-Server處理完再發給Direct-Server,Direct-Server再發給客戶端 

特性

  • 既有RIP也有VIP
  • Real-Server必須得跟Direct-Server在同一網段
  • Real-Server必須將網關指向Direct-Server

優勢

只需要一個公網IP給Direct-Server,Direct-Server始終跟外接打交道

劣勢

需要依賴Direct-Server把請求轉發給Real-Server,Real-Server處理完把結果發給Direct-Server,Direct-Server再把結果轉發出去,並發高的時候會成為瓶頸 

LVS三種模式對比

ipvsadm介紹

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:保存規則

ipvsadm配置LVS負載均衡

需求

用LVS實現后端兩台httpd的負載均衡

環境說明 

lb01   192.168.0.91 lvs
realserver-1 192.168.0.92 httpd
realserver-2 192.168.0.93   httpd
test 192.168.0.94   用來測試負載均衡

 

 

 

 

 

 

負載均衡器端

安裝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
    [root@lb01 ~]#ipvsadm -a -t 192.168.0.89:80 -r 192.168.0.93 -g 
    [root@lb01 ~]#ipvsadm -a -t 192.168.0.89:80 -r 192.168.0.94 -g

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

配置LVS+keepalived

需求

  • LVS給兩台httpd做負載均衡
  • keepalived做lvs高可用,同時做Real-Server健康檢查,如果發現Real-Server80端口沒開,就認為故障,從集群中剔除
  • 在keepalived配置文件內就能配置LVS  

環境說明

lb01   192.168.0.91 lvs keepalived-master

lb02

192.168.0.92 lvs keepalived-backup
realserver-1 192.168.0.93 httpd
realserver-2 192.168.0.94 httpd

 

 

 

 

 

在負載均衡器端配置lvs+keepalived

lb01節點

[root@lb01 ~]# vim /etc/keepalived/keepalived.conf
! Configuration File for keepalived
##################全局配置##########################
global_defs {
    #如有故障,發郵件地址
    notification_email {      
    9618154@qq.com              #收件人
    }
    notification_email_from Alexandre.Cassen@firewall.loc  #keepalived報警郵件,發件人
     smtp_server 192.168.200.1  #郵件服務器地址
    smtp_connect_timeout 30     #郵件服務器超時時間
    router_id LVS_01             #類似於MySQL的server-id,每個keepalived節點不能相同
}
#################keepalived配置#####################
vrrp_instance VI_1 {
    state MASTER              #keepalived角色,MASTER和BACKUP
    interface eth0            #通信接口,下面的virtual_ipaddress(VIP)綁定到這個網卡
    virtual_router_id 51      #vrrp_instance的唯一標識
    priority 150              #keepalived權重,數值越大權重越大,MASTER應大於BACKUP
    advert_int 1              #發送心跳間隔,如果backup1秒收不到心跳就接管,單位是秒
    authentication {          #每個keepalived節點通過這里設置的驗證通信,必須得設置成一樣
        auth_type PASS
        auth_pass 1111
    }
    virtual_ipaddress {
        192.168.0.89/24       #VIP
    }
}
##################LVS配置##############            
#添加虛擬服務器
#相當於 ipvsadm -A -t 192.168.0.89:80 -s wrr 
virtual_server 192.168.0.89 80 {
    delay_loop 6             #服務健康檢查周期,單位是秒
    lb_algo wrr                 #調度算法
    lb_kind DR                 #模式
    nat_mask 255.255.255.0   
    persistence_timeout 50   #回話保持時間,單位是秒
    protocol TCP             #TCP協議轉發
#添加后端realserver
#相當於 ipvsadm -a -t 192.168.0.89:80 -r 192.168.0.93:80 -w 1
    real_server 192.168.0.93 80  {    #realserver的真實IP
        weight 1                      #權重
        #健康檢查
        TCP_CHECK {
            connect_timeout 8         #超時時間
            nb_get_retry 3            #重試次數
            delay_before_retry 3      #重試間隔
            connect_port 80           #檢查realserver的80端口,如果80端口沒監聽,就會從集群中剔除
        }
    }
    real_server 192.168.0.94 80  {
        weight 1
        TCP_CHECK {
           connect_timeout 8
           nb_get_retry 3
           delay_before_retry 3
           connect_port 80
        }
    }

}

lb02節點

[root@lb01 ~]# vim /etc/keepalived/keepalived.conf
! Configuration File for keepalived
################全局配置###########################
global_defs {
    notification_email {      
    }
    notification_email_from Alexandre.Cassen@firewall.loc  
    smtp_server 192.168.200.1
    smtp_connect_timeout 30
        router_id LVS_02        
}
################keepalived配置#####################
vrrp_instance VI_1 {
    state BACKUP             
    interface eth0         
    virtual_router_id 51      
    priority 100             
    advert_int 1             
    authentication {         
        auth_type PASS
        auth_pass 1111
    }
    virtual_ipaddress {
        192.168.0.89/24
    }
}
################lvs配置##########################
virtual_server 192.168.0.89 80 {
    delay_loop 6
    lb_algo wrr             
    lb_kind DR                 
    nat_mask 255.255.255.0
    persistence_timeout 50    
    protocol TCP              
    real_server 192.168.0.93 80  {
        weight 1             
        TCP_CHECK {            
            connect_timeout 8   
            nb_get_retry 3        
            delay_before_retry 3  
             connect_port 80      
        }
    }
    real_server 192.168.0.94 80  {
        weight 1
        TCP_CHECK {
         connect_timeout 8
         nb_get_retry 3
         delay_before_retry 3
         connect_port 80
        }
    }

                }

配置后端Real-Server

確保網站服務是正常的
    curl 192.168.0.93
    192.168.0.93
    curl 192.168.0.94
    192.168.0.94 綁定VIP到lo網卡
    ip addr add 192.168.0.89/32 dev lo label lo:0
抑制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  

客戶端測試

  • 負載均衡是否正常
  • 后端Real-Server出問題是否自動剔除
  • lvs高可用是否正常,提供服務的LVS宕機,vip漂移到另一台LVS繼續提供服務

 


免責聲明!

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



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