欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页  >  科技

IP负载均衡

程序员文章站 2022-05-18 07:53:47
推荐一篇关于LVS的好文: https://www.cnblogs.com/gaoxu387/p/7941381.html 一、原博主要内容: 1、概述 IP负载均衡:四层负载,是基于IP+端口的负载均衡,主要代表是LVS(Linux Virtual Server) LVS工作原理:LVS的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
    virtual_router_id 64
    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 {
        weight 1
        tcp_check {
                connect_timeout 3
                nb_get_retry 3
                delay_before_retry 3
        }
    }
real_server 111.11.11.22 6600 {
        weight 1
        tcp_check {
                connect_timeout 3
                nb_get_retry 3
                delay_before_retry 3
        }
    }

real_server 111.11.11.23 6600 {
        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