zoukankan      html  css  js  c++  java
  • LVS负载均衡实战配置

           LVS负载均衡技术实现是基于Linux内核模块IPVS,与iptables一样是直接工作在内核中,互联网主流的Linux发行版默认都已经集成了ipvs模块,因此只需安装管理工具ipvsadm,所需软件ipvsadm-1.2.4.tar.gz软件,安装配置步骤如下:

    1、下载安装Ipvsadm

    1)基于源码安装:

    wget  -c  http://www.linuxvirtualserver.org/software/kernel-2.6/ipvsadm-1.24.tar.gz 
    ln -s /usr/src/kernels/2.6.* /usr/src/linux tar -xzf ipvsadm-1.24.tar.gz cd ipvsadm-1.24 make make install

    2)基于yum安装:

    yum -y install ipvsadm

    2、Ipvsadm软件安装完毕后,需要进行配置,主要配置方法有三步:添加虚拟服务器IP,添加realserver后端服务及启动LVS服务器VIP地址,配置代码如下:

    ipvsadm  -A  -t  192.168.33.188:80  -s  rr
    ipvsadm  -a  -t  192.168.33.188:80  -r  192.168.33.12  -g  -w 2
    ipvsadm  -a  -t  192.168.33.188:80  -r  192.168.33.13  -g  -w 2
    其中 -A表示添加一个VIP,-s表示LVS均衡算法为rr(轮训模式),-t为tcp
    其中-a表示添加一个真实后端机器,-r指定后端真实机器的ip,-w表示权重为2(在每次重启keepalive时优先级会加2),-g表示指定LVS负载均衡转发方式为DR
    LVS ipvsadm配置参数说明:

        -A         增加一台虚拟服务器VIP地址;

        -t         虚拟服务器提供的是tcp服务;

        -s         使用的调度算法;

        -a         在虚拟服务器中增加一台后端真实服务器;

        -r         指定真实服务器地址;

        -w         后端真实服务器的权重;

      -m         设置当前转发方式为NAT模式;-g为直接路由模式;-i  模式为隧道模式
      ipvsadm    -L  -n    查看当前的均衡状态

    3、可以使用Shell脚本自动部署LVS相关软件及配置:

    #!/bin/bash
    SNS_VIP=$2
    SNS_RIP1=$3
    SNS_RIP2=$4
    if [ "$1" == "stop" -a -z "$2" ];then
        echo "------------------------------------------"
        echo -e "33[32mPlease Enter $0 stop LVS_VIP
    
    EXample:$0 stop 192.168.1.11133[0m" 
        echo
        exit
    else
        if [ -z "$2" -a -z "$3" -a -z "$4" ];then
            echo "----------------------------------------"
            echo -e "33[32mPlease Enter Input $0 start VIP REALSERVER1  REALSERVER2
    
    EXample:$0 start/stop 192.168.1.111 192.168.1.2 192.168.1.333[0m"
            echo
            exit 0
        fi
    fi
    . /etc/rc.d/init.d/functions
    logger $0 called with $1
    function IPVSADM(){
    /sbin/ipvsadm --set  30 5 60
    /sbin/ifconfig eth0:0 $SNS_VIP broadcast $SNS_VIP netmask 255.255.255.255 broadcast $SNS_VIP up
    /sbin/route add -host $SNS_VIP dev eth0:0
    /sbin/ipvsadm -A -t $SNS_VIP:80 -s wlc -p 120
    /sbin/ipvsadm -a -t $SNS_VIP:80 -r $SNS_RIP1:80 -g -w 1
    /sbin/ipvsadm -a -t $SNS_VIP:80 -r $SNS_RIP2:80 -g -w 1
    }
    case "$1" in
    start)
    IPVSADM
    echo "-----------------------------------------------------"
    /sbin/ipvsadm -Ln
    touch /var/lock/subsys/ipvsadm > /dev/null 2>&1
    ;;
    stop)
    /sbin/ipvsadm -C
    /sbin/ipvsadm -Z
    ifconfig eth0:0 down >>/dev/null 2>&1
    route del $SNS_VIP >>/dev/null 2>&1
    rm -rf /var/lock/subsys/ipvsadm > /dev/null 2>&1
    echo "ipvsadm stopped!"
    ;;
    status)
    if [ ! -e /var/lock/subsys/ipvsadm ]
    then
    echo "ipvsadm stopped!"
    exit 1
    else
    echo "ipvsadm started!"
    fi
    ;;
    *)
    echo "Usage: $0 {start | stop | status}"
    exit 1
    esac
    exit 0

    4、 Nginx客户端realserver配置VIP脚本:

    #!/bin/sh
    #LVS Client Server
    VIP=192.168.33.188
    case  $1  in                                                                                                                                                                                                                                                    
    start)                                                                                                                                                                                                                                            
        ifconfig lo:0 $VIP netmask 255.255.255.255 broadcast $VIP
        /sbin/route add -host $VIP dev lo:0
        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
        sysctl -p >/dev/null 2>&1
        echo "RealServer Start OK"
        exit 0
    ;;                                                                                                                                                                                                                                         
    stop)
        ifconfig lo:0 down
        route del $VIP >/dev/null 2>&1
        echo "0" >/proc/sys/net/ipv4/conf/lo/arp_ignore
        echo "0" >/proc/sys/net/ipv4/conf/lo/arp_announce
        echo "0" >/proc/sys/net/ipv4/conf/all/arp_ignore
        echo "0" >/proc/sys/net/ipv4/conf/all/arp_announce
        echo "RealServer Stoped OK"
        exit 1
    ;;
    *)
        echo "Usage: $0 {start|stop}"
    ;;
    esac

     LVS+后端Realserver服务器配置同一个VIP地址,而且后端机器配置在lo网卡;

    只有LVS服务器的VIP能够响应路由器发起ARP广播响应,后端Realserver禁止ARP广播响应;

    arp_ignore=1 #抑制lo网卡回应ARP请求,只回应目标IP(VIP)是本地物理网卡配置上的IP;

    arp_announce=2 #当Realserver接收到请求之后,此时的源IP(VIP),网卡不能出去的,请求回应时,可以通过本机其他的网卡将数据发出,可以忽略源IP地址,尽量匹配跟目标机器能够联通的网卡IP;

             如果单台LVS发生突发情况,例如宕机、发生不可恢复现象,会导致用户无法访问后端所有的应用程序。避免这种问题可以使用HA故障切换,也就是有一台备用的LVS,主LVS 宕机,LVS VIP自动切换到从,可以基于LVS+Keepalived实现负载均衡及高可用功能,满足网站7x24小时稳定高效的运行。

           Keepalived基于三层检测(IP层,TCP传输层,及应用层),主要用于检测WEB服务器的状态,如果有一台WEB服务器死机,或工作出现故障,Keepalived检测到并将有故障的WEB服务器从系统中剔除;

           当后端一台WEB服务器工作正常后Keepalived自动将WEB服务器加入到服务器群中,这些工作全部自动完成,不需要人工干涉,需要人工做的只是修复故障的WEB服务器。

    需要注意,如果使用了keepalived.conf配置,就不需要再执行ipvsadm  -A命令去添加均衡的realserver命令了,所有的配置都在keepalived.conf里面设置即可。

  • 相关阅读:
    项目开发中需要注意的
    数据库函数
    C#中 ?. 运算符
    字符串格式化String.Format
    day37 进程理论 多进程
    36 网络编程---操作系统 并发
    day35 socket的常用方法,
    day34
    day33天 网络编程udp pycharm控制台输出带颜色
    day32 网络编程初识
  • 原文地址:https://www.cnblogs.com/deny/p/9991121.html
Copyright © 2011-2022 走看看