zoukankan      html  css  js  c++  java
  • 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

  • 相关阅读:
    #负分小组WEEK1#本周工作小结+下周计划
    #负分小组WEEK1#软件开发之路——需求获取与相关建模
    #负分小组WEEK1#第一次会议纪要
    #负分小组WEEK1#软件开发之路——准备阶段
    #负分小组WEEK1#确定项目——“宝宝睡吧!”儿童睡前服务服务软件+计划分工
    p6spy sql 执行记录
    apache common-lang3 工具类
    根据 ip 定位
    springcloud 与 spring boot 版本对应关系
    PowerDesign 基于mysql 数据库建模
  • 原文地址:https://www.cnblogs.com/wenquanli/p/9712819.html
Copyright © 2011-2022 走看看