IP負載均衡

小Q童鞋發表於2018-09-29

推薦一篇關於LVS的好文:

https://www.cnblogs.com/gaoxu387/p/7941381.html

一、原博主要內容:

1、概述

IP負載均衡:四層負載,是基於IP+埠的負載均衡,主要代表是LVS(Linux Virtual Server

LVS工作原理:LVS的IP負載均衡技術是通過IPVS模組實現的,IPVS模組工作在核心空間。

2、LVS的工作模式

A、DR模式
通過 MAC 地址改寫機制實現轉發,叢集侷限於區域網內,需要設定lo介面的VIP不能響應本地網路內的arp請求。
B、TUN模式
通過再封裝一層IP報文轉發,叢集可在公網上。
C、NAT模式
通過修改IP報文轉發,叢集侷限在區域網內。

3、LVS的排程演算法

  • 輪叫排程(Round-Robin Scheduling)
  • 加權輪叫排程(Weighted Round-Robin Scheduling)
  • 最小連線排程(Least-Connection Scheduling)
  • 加權最小連線排程(Weighted Least-Connection Scheduling)
  • 基於區域性性的最少連結(Locality-Based Least Connections Scheduling)
  • 帶複製的基於區域性性最少連結(Locality-Based Least Connections with Replication Scheduling)
  • 目標地址雜湊排程(Destination Hashing Scheduling)
  • 源地址雜湊排程(Source Hashing Scheduling)

 固定排程演算法:rr,wrr,dh,sh

 動態排程演算法:wlc,lc,lblc,lblcr

 

二、DR模式的配置

 這裡介紹一下DR模式的配置。
1、負載均衡伺服器:一般對外的負載均衡器須具有災備能力,在負載均衡伺服器上安裝keepalived,並完成keepalived的配置,配置如下:
! Configuration File for keepalived

global_defs {
   notification_email {
     acassen@firewall.loc
     failover@firewall.loc
     sysadmin@firewall.loc
   }
   notification_email_from Alexandre.Cassen@firewall.loc
   smtp_server 192.168.200.1
   smtp_connect_timeout 30
   router_id LVS_DEVEL
}

vrrp_instance VI_EPG {
    state MASTER   //主用設定為MASTER,備用設定為BACKUP
    interface bond0   //VIP設定所在網路卡
    virtual_router_id 64   //路由ID主備需一致
    priority 100  //主用優先順序要比備用優先順序高
    advert_int 1
    authentication {
        auth_type PASS
        auth_pass 1111
    }
    virtual_ipaddress {
        111.11.11.10  //對外VIP
    }
}
virtual_server 111.11.11.10 6600 {
    delay_loop 6
    lb_algo rr   //排程演算法RR,也可以設定其他演算法
    lb_kind DR   //負載均衡模式為DR
    persistence_timeout 20
    protocol TCP

real_server 111.11.11.21 6600 {   //RS節點伺服器IP
        weight 1
        TCP_CHECK {
                connect_timeout 3
                nb_get_retry 3
                delay_before_retry 3
        }
    }
real_server 111.11.11.22 6600 {     //RS節點伺服器IP
        weight 1
        TCP_CHECK {
                connect_timeout 3
                nb_get_retry 3
                delay_before_retry 3
        }
    }

real_server 111.11.11.23 6600 {   //RS節點伺服器IP
        weight 1
        TCP_CHECK {
                connect_timeout 3
                nb_get_retry 3
                delay_before_retry 3
        }
    }   
}
2、RS節點伺服器:需要設定lo介面的VIP,且設定其不能響應本地網路內的arp請求,可執行指令碼:
 1 #!/bin/bash
 2 # description: Config realserver lo and apply noarp
 3 VIP=111.11.11.10
 4 
 5 . /etc/rc.d/init.d/functions
 6 
 7 case "$1" in
 8 start)
 9        echo "1" >/proc/sys/net/ipv4/conf/bond0/arp_ignore
10        echo "2" >/proc/sys/net/ipv4/conf/bond0/arp_announce
11        echo "1" >/proc/sys/net/ipv4/conf/all/arp_ignore
12        echo "2" >/proc/sys/net/ipv4/conf/all/arp_announce
13        sysctl -p >/dev/null 2>&1
14       ifconfig lo:0 $VIP netmask 255.255.255.255 broadcast $VIP
15        /sbin/route add -host $VIP dev lo:0
16        echo "RealServer Start OK"
17        ;;
18 stop)
19        ifconfig lo:0 down
20        route del $VIP >/dev/null 2>&1
21        echo "0" >/proc/sys/net/ipv4/conf/bond0/arp_ignore
22        echo "0" >/proc/sys/net/ipv4/conf/bond0/arp_announce
23        echo "0" >/proc/sys/net/ipv4/conf/all/arp_ignore
24        echo "0" >/proc/sys/net/ipv4/conf/all/arp_announce
25        echo "RealServer Stoped"
26        ;;
27 status)
28         # Status of LVS-DR real server.
29         islothere=`/sbin/ifconfig lo:0 | grep $VIP`
30         isrothere=`netstat -rn | grep "lo:0" | grep $VIP`
31         if [ ! "$islothere" -o ! "isrothere" ];then
32             # Either the route or the lo:0 device
33             # not found.
34             echo "LVS-DR real server Stopped."
35         else
36             echo "LVS-DR Running."
37           fi
38 ;;
39 *)
40         # Invalid entry.
41         echo "$0: Usage: $0 {start|status|stop}"
42         exit 1
43 ;;
44 esac
45 exit 0

注意:此指令碼最好設定成開機執行,如指令碼名稱為realserver.sh,放置在/usr/bin/路徑下,賦可執行許可權,在/etc/rc.local的末尾新增一行:/usr/bin/realserver.sh start

 

相關文章