• LVS负载均衡DR模式


    什么是集群?

    一组相互独立的计算机,利用高速通信网络组成的一个计算机系统,对于客户机来说像是一个单一服务器,实际上是一组服务器。简而言之,一堆机器协同工作就是集群。集群的基本特点:高性能、高并发、高吞吐、经济实惠成本低、可伸缩性、可扩展性、高可用性、7*24提供服务、透明性、松耦合、可管理性、可编程性等。集群分为负载均衡集群 LB、高可用集群 HAC、高性能计算集群 HPC等,常见的集群软件有lvs、haproxy、nginx、keepalived、heartbeat,硬件有硬件:F5、Netscaler、Radware、A10,工作模式类似haproxy,内部还是安装软件然后进行优化。

    LVS负载均衡技术

    LVS属于四层负载均衡,主要采用IP负载均衡技术,实现LVS功能的是IPVS,IPVS工作在内核层,ipvsadm管理ipvs,工作在用户层;LVS真正实现调度的工具是IPVS,管理工具ipvsadm,keepalived也可以管理。LVS模式分为NAT网络地址转换模式、TUN隧道模式、DR直接路由模式、FULLNAT模式等。

    LVS负载均衡DR模式

    DR模式通过改写请求报文的目标MAC地址,将请求发给真实服务器,而真实服务器将响应后的处理结果直接返回给客户端,不经过负载均衡器。通常来说返回的数据比请求数据要大得多,所以DR的效率高。
     
    NAT模式由于将VIP修改为RIP,所以响应报文也必须经过LVS发回客户端,故LVS可能成为性能瓶颈。
    所以,为了达到直接返回客户端的目的,VIP就不能变化,于是衍生出TUN模式和DR模式。
    TUN模式不改变VIP,而是采用在VIP报文基础上直接封装一层RIP包头的方式,达到向后转发的目的。
    但TUN模式需要LVS和RS都支持IP隧道,比较麻烦,于是想到向后转发除了使用RIP地址之外,还可以直接修改数据帧MAC地址,于是衍生出DR模式。
    DR模式和TUN模式功能上相同,区别在于转发机制,在于如何区分定位RS,前者通过二层MAC,后者通过三层IP。
     
    DR模式核心点在于不修改VIP,所以配置的关键点在于
    1. RS要绑定VIP才能接收数据包,同时VIP又不能出现在同一子网,于是绑定在lo或任一其它子网的网卡。
    2. 局域网有了相同的VIP就要抑制RS的ARP响应。

    CIP:client ip VIP:virtual ip RS:realserver

    安装LVS

    LVS核心是ipvs模块,该模块已经整合进linux内核,我们安装的其实是ipvsadm管理工具
    cd /server/tools
    wget http://www.linuxvirtualserver.org/software/kernel-2.6/ipvsadm-1.26.tar.gz
    yum install libnl* popt* -y
    tar xf ipvsadm-1.26.tar.gz
    cd ipvsadm-1.26
    make
    make install
    lsmod | grep ip_vs
    modprobe ip_vs 或者 /sbin/ipvsadm
    

    手动配置LVS

    1. 绑定VIP
    ifconfig eth0:0 10.0.0.10/24 up
    ping 10.0.0.10
    2. 配置lvs
    ipvsadm --help
    ipvsadm -C //清空
    ipvsadm --set 30 5 60 //设定超时
    ipvsadm -A -t 10.0.0.10:80 -s rr -p 20 //添加实例
    ipvsadm -a -t 10.0.0.10:80 -r 10.0.0.13 -g -w 1 //添加节点
    ipvsadm -a -t 10.0.0.10:80 -r 10.0.0.14 -g -w 1 //添加节点
    ipvsadm -L -n //查看
    ipvsadm -D -t 10.0.0.10:80 //删除实例
    ipvsadm -d -t 10.0.0.10:80 -r 10.0.0.13 //删除节点
    3. RS节点绑定VIP到lo网卡
    ifconfig lo:10 10.0.0.10 netmask 255.255.255.255 up
    route add -host 10.0.0.10 dev lo
    ifconfig
    lo网卡子网掩码255.255.255.255只是一个推荐值,lo的IP通常只用于本机测试,不对外通信,所以网段内只有自己一台主机,故将子网掩码设为/32。
    4. 抑制RS端ARP响应
    echo "1" > /proc/sys/net/ipv4/conf/lo/arp_ignore
    echo "2" > /proc/sys/net/ipv4/conf/lo/arp_announce
    echo "1" > /proc/sys/net/ipv4/conf/all/arp_ignore
    echo "2" > /proc/sys/net/ipv4/conf/all/arp_announce
    我们可以看到,LVS的配置很简单,工作中通常需要用脚本来批量添加。
    

    脚本配置LVS

    #!/bin/bash
    . /etc/init.d/functions
    VIP=10.0.0.10
    PORT=80
    RIP=(
    10.0.0.13
    10.0.0.14
    )
    start(){
    ifconfig eth0:0 $VIP/24 up
    route add -host $VIP dev eth0
    ipvsadm -C
    ipvsadm --set 30 5 60
    ipvsadm -A -t $VIP:$PORT -s rr -p 20
    for ((i=0;i<${#RIP[*]};i++))
    do
    ipvsadm -a -t $VIP:$PORT -r ${RIP[$i]} -g -w 1
    done
    }
    stop(){
    ifconfig eth0:0 down
    route del -host $VIP dev eth0
    ipvsadm -C
    }
    case "$1" in
    start)
    start
    echo "ipvs is started"
    ;;
    stop)
    stop
    echo "ipvs is stopped"
    ;;
    restart)
    stop
    echo "ipvs is stopped"
    start
    echo "ipvs is started"
    ;;
    *)
    echo "Usage:$0 {start|stop|restart}"
    esac
    

    RS脚本绑定VIP并抑制ARP

    #!/bin/bash
    VIP=(
    10.0.0.10
    )
    . /etc/init.d/functions
    start(){
    echo "start LVS of RIP"
    for ((i=0;i<`echo ${#VIP[*]}`;i++))
    do
    interface="lo:`echo ${VIP[$i]}|awk -F "." '{print $4}'`"
    /sbin/ifconfig $interface ${VIP[$i]}/32 up
    route add -host ${VIP[$i]} dev $interface
    done
    echo "1" > /proc/sys/net/ipv4/conf/lo/arp_ignore
    echo "2" > /proc/sys/net/ipv4/conf/lo/arp_announce
    echo "1" > /proc/sys/net/ipv4/conf/all/arp_ignore
    echo "2" > /proc/sys/net/ipv4/conf/all/arp_announce
    }
    stop(){
    for ((i=0;i<`echo ${#VIP[*]}`;i++))
    do
    interface="lo:`echo ${VIP[$i]}|awk -F "." '{print $4}'`"
    /sbin/ifconfig $interface ${VIP[$i]}/32 down
    route del -host ${VIP[$i]} dev $interface
    done
    echo "stop LVS of RIP"
    }
    case "$1" in
    start)
    start
    ;;
    stop)
    stop
    ;;
    restart)
    stop
    start
    ;;
    *)
    echo "Usage:$0 {start|stop|restart}"
    ;;
    esac
    
  • 相关阅读:
    IDEA运行测试错误Failed to resolve org.junit.platform:junit-platform-launcher
    mysql索引基本原理
    as3.0声音波形系列03_十组合
    as3.0声音波形系列02_六组合
    as3.0声音波形系列01_八组合
    FiltersEffect(效果)
    AS3 TransitionManager 自带特效类
    as3 判断鼠标移动方向
    AS3代码生成xml方法
    求线段的交点
  • 原文地址:https://www.cnblogs.com/Peter2014/p/7513946.html
Copyright © 2020-2023  润新知