LVS-DR模式以及工作原理

  • LVS有LVS-DR,LVS-NAT,LVS-TUN三种模式,其中DR模式意为Direct Routing(直接路由),是调度器与实际服务器都有一块网卡连在同一物理网段上的情况
  • Director接收用户的请求,然后根据负载均衡算法选取一台realserver,将包转发过去,最后由realserver直接回复给用户
  • 详细工作原理以及相关问题

ipvsadm 的安装以及调度算法

安装

yum install ipvsadm -y

调度算法

ipvsadm -A -t 192.168.1.50:80 -s rr,其中rr为调度算法的一种 - 静态方法:仅根据调度算法本身进行调度 - rr: 轮询调度,轮叫调度 - wrr:加权轮询 - sh: 源地址hash - dh: 目标地址hash - 动态方法:根据算法及各RS当前的负载情况进行调度 - lc: 最少连接 - wlc:加权最少连接 - sed: 最短期望延迟 - nq: 永不排队连接 - lblc:基于局部性的最少连接 - lblcr: 带复制的基于局部性的最少连接

十种调度算法的具体介绍

基本配置

Load Balance 节点

  • 主机节点已将物理网卡改名为eth0 ``` conf

    ifconfig eth0:0 192.168.1.8824 up

    ifconfig eth0:0

eth0:0: flags=4163 mtu 1500 inet 192.168.1.88 netmask 255.255.255.0 broadcast 192.168.1.255 ether 00:0c:29:f0:fb:5f txqueuelen 1000 (Ethernet)

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
### Web节点1
- arp_ignore: 如何响应接收ARP地址请求,默认0,1表示仅在请求的地址配置在请求报文的接口进行响应。
- arp_announce: 如何通告本地地址,默认0,2表示仅通过网络直连的接口的地址。
- 配置是由于使用的CentOS7 所以网卡为eno16777736,其他系统一般为eth0,可以使用ls /sys/class/net查看
``` conf
# echo 1 >/proc/sys/net/ipv4/conf/eno16777736/arp_ignore 
# echo 1 >/proc/sys/net/ipv4/conf/all/arp_ignore 
# echo 2 >/proc/sys/net/ipv4/conf/eno16777736/arp_announce 
# echo 2 >/proc/sys/net/ipv4/conf/all/arp_announce
# ifconfig lo:0 192.168.1.88/24 up
# ifconfig lo:0 192.168.1.88 netmask 255.255.255.255 broadcast 192.168.1.88 up
# route add -host 192.168.1.88 dev lo:0

Web节点2

  • 同上

    1
    2
    3
    4
    5
    6
    7
    
    # echo 1 >/proc/sys/net/ipv4/conf/eno16777736/arp_ignore 
    # echo 1 >/proc/sys/net/ipv4/conf/all/arp_ignore 
    # echo 2 >/proc/sys/net/ipv4/conf/eno16777736/arp_announce 
    # echo 2 >/proc/sys/net/ipv4/conf/all/arp_announce
    # ifconfig lo:0 192.168.1.88/24 up
    # ifconfig lo:0 192.168.1.88 netmask 255.255.255.255 broadcast 192.168.1.88 up
    # route add -host 192.168.1.88 dev lo:0

    Load Balance 节点

     1
     2
     3
     4
     5
     6
     7
     8
     9
    10
    11
    
    # ipvsadm -A -t 192.168.1.88:80 -s rr
    # ipvsadm -a -t 192.168.1.88:80 -r 192.168.1.51 -g -w 1
    # ipvsadm -a -t 192.168.1.88:80 -r 192.168.1.52 -g -w 1
    # ipvsadm -L -n
    
    IP Virtual Server version 1.2.1 (size=4096)
    Prot LocalAddress:Port Scheduler Flags
    -> RemoteAddress:Port           Forward Weight ActiveConn InActConn
    TCP  192.168.1.88:80 rr
    -> 192.168.1.51:80              Route   1      0          0         
    -> 192.168.1.52:80              Route   1      0          0   

配置脚本

Web 节点配置脚本

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
# vim /etc/init.d/lvsdr-node
#! /bin/sh
VIP=192.168.1.88
IFS=' ' read -r -a device <<< `ls /sys/class/net`
case "$1" in
start)
        echo 1 >/proc/sys/net/ipv4/conf/${device[0]}/arp_ignore 
        echo 1 >/proc/sys/net/ipv4/conf/all/arp_ignore 
        echo 2 >/proc/sys/net/ipv4/conf/${device[0]}/arp_announce 
        echo 2 >/proc/sys/net/ipv4/conf/all/arp_announce
        /sbin/ifconfig lo:0 $VIP/24 up
        /sbin/ifconfig lo:0 $VIP netmask 255.255.255.255 broadcast $VIP up
        /sbin/route add -host $VIP dev lo:0
        echo "start lvs server node"
        ;;
stop)
        echo 0 >/proc/sys/net/ipv4/conf/${device[0]}/arp_ignore 
        echo 0 >/proc/sys/net/ipv4/conf/all/arp_ignore 
        echo 0 >/proc/sys/net/ipv4/conf/${device[0]}/arp_announce 
        echo 0 >/proc/sys/net/ipv4/conf/all/arp_announce
        /sbin/ifconfig lo:0 down
        /sbin/route delete -host $VIP
        echo "stop lvs server node"
        ;;
*)
        echo "Usage :$0 {start|stop}"
        exit 1
esac

chmod +x /etc/init.d/lvsdr-node service lvsdr-node start 启动 service lvsdr-node stop 停止

Load Balance服务开启脚本

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
# vim /etc/init.d/lvsdr-lb
#!/bin/bash
VIP=192.168.1.88
RIP1=192.168.1.51
RIP2=192.168.1.52
case "$1" in
start)
        /sbin/ifconfig eth0:0 $VIP/24 up
        /sbin/ipvsadm -A -t $VIP:80 -s rr
        /sbin/ipvsadm -a -t $VIP:80 -r $RIP1 -g -w 1
        /sbin/ipvsadm -a -t $VIP:80 -r $RIP2 -g -w 1
        /sbin/ipvsadm -L -n
        echo "start lvs server lb"
        ;;
stop)
        /sbin/ipvsadm -C
        /sbin/ifconfig eth0:0 down
        echo "stop lvs server lb"
        ;;
*)
        echo "Usage :$0 {start|stop}"
        exit 1
esac

sudo chmod +x /etc/init.d/lvsdr-lb service lvsdr-lb start 启动 service lvsdr-lb stop 停止

检测

curl 检测

Image1

浏览器查看

Image2

Image3