LVSとKeepalivedを組み合わせてLVS+Keepalived+Nginxを実現


LVSの負荷等化アルゴリズム
スタティツクアルゴリズム
静的:LVS自体の自由な固定アルゴリズムに基づいてユーザ要求を配布する.
  • ポーリング(Round Robin略記'rr’):ポーリングアルゴリズムは、すべてのサーバが要求を処理する能力が同じであると仮定し、スケジューラはすべての要求を実際のサーバごとに平均的に割り当てる.(Nginxとのポーリング)
  • 重み付けポーリング(Weight Round Robin略記'wrr’):重み付け比率割当ユーザ要求をインストールします.重みが高いほど、処理に割り当てられるリクエストが多くなります.(Nginxとの重み)
  • ソースアドレスハッシュ(Source Hash略記'sh’):同じユーザipの要求は、同じRSによって処理される.(同Nginxのip_hash)
  • ターゲットアドレスハッシュ(Destination Hash略記'dh’):urlによって異なるRSが要求される.(同じNginxのurl_hash)
  • ダイナミックアルゴリズム
    ≪動的|Dynamic|emdw≫:トラフィックやサーバの圧力に応じてユーザー・リクエストが割り当てられます.これは動的に計算されます.
  • 最小接続数(Least Connections略記'lc’):現在の接続数が最小のサーバに新しい接続要求を割り当てます.
  • 重み付け最小接続数(Weight Least Connections略記'wlc’):サーバの処理性能は数値で表され、重み付けが大きいほど処理の要求が多くなる.Real Serverでは、パフォーマンスの違いがある可能性があります.wlcは、異なるサーバの負荷状況を動的に取得し、パフォーマンスがよく、比較的空いているサーバにリクエストを配布します.
  • 最短期待遅延(Shortest Expected Delay略記'sed’):特殊なwlcアルゴリズム.たとえば,ABCの3台のサーバがあると仮定し,重みはそれぞれ1,2,3である.wlcアルゴリズムを使用すると、リクエストが入ってくると、ABCのいずれかに分けられる可能性があります.sedアルゴリズムを使用すると、次の演算が行われます.
  • A:(1+1)/1=2
  • B:(1+2)/2=3/2
  • C:(1+3)/3=4/3最終結果は、演算結果が最も小さいサーバにこの要求が渡されます.

  • 最小キュースケジューリング(Never Queue略記'nq’):キューは使用されません.Real Serverの接続数が0に等しい場合は、この要求をそのまま割り当てる、キューで演算を待つ必要はない(sed演算).

  • LVSは実際の使用過程において,負荷等化アルゴリズムで用いられるものが多く,それぞれwlcまたはwrrであり,簡単で使いやすい.
    直接配置
    global_defs { 
        #   id:    keepalived        ,       
        #        
        router_id LVS_xxx
    }
    vrrp_instance VI_1 { 
        #      MASTER       BACKUP 
        #       BACKUP
        state MASTER 
        #          
        interface ens33 
        
        #            
        virtual_router_id 51 
        
        #   ,master      backup,     ,     ,     ,     
        #           50
        priority 100 
        
        #             ,    
        advert_int 2 
        
        #       ,         
        authentication { 
            auth_type PASS 
            auth_pass 1111 
        }
        
        #      ip,     (vip) 
        virtual_ipaddress { 
            192.168.31.150
        } 
        
    }
    
    
    #          IP+  ,   nginx    ,  80,
    #        (  IP)
    virtual_server 192.168.31.150 80 {
        #        ,  : 
        delay_loop 6
        
        #         ,     
        lb_algo rr
        
        #   LVS    NAT|TUN|DR
        lb_kind DR
        
        #                             
        persistence_timeout 5
        
        #    
        protocol TCP
        
        #      Nginx  
        real_server 192.168.31.235 80 {
            #          
            weight 1
            
            
            #       
            TCP_CHECK {
                #    80   
                connect_port 80
                
                #        (2 )
                connect_timeout  2
                
                #      2 
                nb_get_retry 2
                
                #        3 
                delay_before_retry 3
                
            }
        }
        
         real_server 192.168.31.236 80 {
            #          
            weight 1
            
            
            #       
            TCP_CHECK{
                #    80   
                connect_port 80
                
                #        (2 )
                connect_timeout  2
                
                #      2 
                nb_get_retry 2
                
                #        3 
                delay_before_retry 3
                
            }
        }
        
    }
    

    最も重要なファイアウォール構成
    # 224.0.0.18    
    # ens33        
    firewall-cmd --direct --permanent --add-rule ipv4 filter INPUT 0 --in-interface ens33 --destination 224.0.0.18 --protocol vrrp -j ACCEPT
    
    firewall-cmd --direct --permanent --add-rule ipv4 filter OUTPUT 0 --out-interface ens33 --destination 224.0.0.18 --protocol vrrp -j ACCEPT
    
    firewall-cmd --reload
    

    Nginxマシン構成
    仮想ネットワークサブインタフェースの構成(ループバックインタフェース)
    #          ,  lo(      ,           ),            :
    cd /etc/sysconfig/network-scripts
    
    ls
    ifcfg-ens33  ifdown-ipv6    ifdown-Team      ifup-eth    ifup-post      ifup-tunnel
    ifcfg-lo     ifdown-isdn    ifdown-TeamPort  ifup-ippp   ifup-ppp       ifup-wireless
    ifdown       ifdown-post    ifdown-tunnel    ifup-ipv6   ifup-routes    init.ipv6-global
    ifdown-bnep  ifdown-ppp     ifup             ifup-isdn   ifup-sit       network-functions
    ifdown-eth   ifdown-routes  ifup-aliases     ifup-plip   ifup-Team      network-functions-ipv6
    ifdown-ippp  ifdown-sit     ifup-bnep        ifup-plusb  ifup-TeamPort
    
    
    cp ifcfg-lo ifcfg-lo:1
    
    vim ifcfg-lo:1
    
    #     
    DEVICE=lo:1
    IPADDR=192.168.31.150
    NETMASK=255.255.255.255
    NETWORK=127.0.0.0
    # If you're having problems with gated making 127.0.0.0/8 a martian,
    # you can change this to something else (255.255.255.255, for example)
    BROADCAST=127.255.255.255
    ONBOOT=yes
    NAME=loopback
    

    ネットワークサービスの再起動
    service network restart
    

    ARP応答レベルと通知動作の概念
  • arp-ignore:ARP応答レベル(処理要求)
  • 0:自機がipを構成する限り、要求
  • に応答できる.
  • 1:要求されたターゲットアドレスが対応するネットワークインタフェースに到達してから、要求
  • に応答する.
  • arp-announce:ARP通知動作(応答を返す)
  • 0:本機の任意のネットワークインタフェースは外部に通知され、すべてのネットワークカードは通知
  • を受け入れることができる.
  • 1:本NICが一致しないターゲットとの通知をできるだけ避ける
  • .
  • 2:このNICでのみ通知

  • sysctlを開きます.conf:
    vim /etc/sysctl.conf
    
    #     :
    # configration for lvs 
    net.ipv4.conf.all.arp_ignore = 1
    net.ipv4.conf.default.arp_ignore = 1
    net.ipv4.conf.lo.arp_ignore = 1
    net.ipv4.conf.all.arp_announce = 2
    net.ipv4.conf.default.arp_announce = 2
    net.ipv4.conf.lo.arp_announce = 2
    

    プロファイルの更新:
    sysctl -p
    

    データメッセージを受信するためのゲートウェイを追加し、ホストに要求がある場合はloに渡して処理します.
    route add -host 192.168.31.150 dev lo:1
    
    #  
    route -n
    Kernel IP routing table
    
    Destination     Gateway         Genmask         Flags Metric Ref    Use Iface
    0.0.0.0         192.168.31.1    0.0.0.0         UG    100    0        0 ens33
    192.168.31.0    0.0.0.0         255.255.255.0   U     100    0        0 ens33
    192.168.31.150  0.0.0.0         255.255.255.255 UH    0      0        0 lo
    

    再起動の無効化を防止し、POSTを開始します.
    echo "route add -host 192.168.31.150 dev lo:1" >> /etc/rc.local