IP负载均衡

推荐一篇关于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

原文地址:https://www.cnblogs.com/wenquanli/p/9712819.html