zoukankan      html  css  js  c++  java
  • OSPF + LVS ,突破LVS瓶颈 (转)

    突破LVS瓶颈,LVS Cluster部署(OSPF + LVS

    • 前言
    • 架构简图
    • 架构优势
    • 部署方法
    • 1.硬件资源准备
    • 2.三层设备OSPF配置
    • 3.LVS调度机的OSPF配置
    • a.安装软路由软件quagga
    • b.配置zerba.conf
    • c.配置ospfd.conf
    • d.开启IP转发
    • e.开启服务
    • 4.LVS keepalived配置
    • a.修改配置文件 keepalived.conf ,在Cluster架构中,所有调度机用相同的配置文件
    • b.启动keepalived
    • 5.realserver配置
    • a.添加启动服务脚本/etc/init.d/lvs_realserver
    • b.启动服务
    • 总结

    前言

    LVS大家应该很熟悉,这款优秀的开源软件基本成为了IP负载均衡的代言词。但在实际的生产环境中会发现,LVS调度在大压力下很容易就产生瓶颈,其中瓶颈包括ipvs内核模块的限制,CPU软中断,网卡性能等,当然这些都是可以调优的,关于LVS的调优,会在这里详细讲 LVS调优攻略 。回到主题,那当无法避免的单台LVS调度机出现了性能瓶颈,有什么办法呢?在本文就来介绍如何横向扩展LVS调度机

    架构简图

    Lvs_Cluster_new1

    如上图三层设备的路由表,VIP地址1.1.1.1对应nexthop有三个地址,这三个地址是三台lvs调度机的地址。这样便可达到效果:用户访问------>VIP------>三台LVS调度机------>分发到多台RealServe

    架构优势

    1.LVS调度机自由伸缩,横向扩展(最大8台,受限于三层设备允许的等价路由数目)

    2.LVS调度资源全利用,All Active。不存在备份机

    部署方法

    1.硬件资源准备

    三层设备:本文用的是h3c 5800三层交换机

    LVS调度机三台: 192.168.0.2 192.168.2.2 192.168.3.2

    Realserver三台:  1.1.1.100 1.1.1.101 1.1.1.102

    2.三层设备OSPF配置

    #查找与三层交换与lvs调度相连的端口,在本文端口分别为 g1/0/2 g1/0/3 g1/0/6

     

    #g1/0/2改为三层端口,并配上IP

     

    interfaceGigabitEthernet1/0/2

    port link-mode route

    ip address 192.168.0.1255.255.255.0

     

    #配置ospf的参数, timer hello是发送hello包的间隔,timer dead是存活的死亡时间。默认是1040

     

    #hello包是ospf里面维持邻居关系的报文,这里配置是每秒发送一个,当到4秒还没有收到这个报文,就会认为这个邻居已经丢失,需要修改路由

    ospf timer hello 1

    ospf timer dead 4

    ospf dr-priority 100

     

    #如此类推,把g1/0/3 g1/0/6都配置上

     

    interfaceGigabitEthernet1/0/3

    port link-mode route

    ip address 192.168.3.1255.255.255.0

     

    ospf timer hello 1

    ospf timer dead 4

    ospf dr-priority 99

     

     

     

    interfaceGigabitEthernet1/0/6

    port link-mode route

    ip address 192.168.2.1255.255.255.0

     

    ospf timer hello 1

    ospf timer dead 4

    ospf dr-priority 98

     

     

     

    #配置ospf

    ospf 1

    area 0.0.0.0

    network 192.168.0.00.0.0.255

    network 192.168.3.00.0.0.255

    network 192.168.2.00.0.0.255

    3.LVS调度机的OSPF配置

    a.安装软路由软件quagga

    yum –y install quagga

    b.配置zerba.conf

    vim /etc/quagga/zebra.conf

    hostname lvs-route-1

    password xxxxxx

    enable password xxxxxx

     

    log file /var/log/zebra.log

    service password-encryption

    c.配置ospfd.conf

    vim /etc/quagga/ospfd.conf

    #ospf的配置类似于上面三层设备,注意需要把vip声明出去(1.1.1.1)

     

    log file /var/log/ospf.log

    log stdout

    log syslog

    interface eth0

    ip ospf hello-interval 1

    ip ospf dead-interval 4

    router ospf

    ospf router-id 192.168.0.1

    log-adjacency-changes

    auto-cost reference-bandwidth 1000

    network 1.1.1.1/32 area 0.0.0.0

    network 192.168.0.0/24 area 0.0.0.0

    d.开启IP转发

    sed –i ‘/net.ipv4.ip_forward/d’ /etc/sysctl.conf

     

    echo "net.ipv4.ip_forward = 1" >> /etc/sysctl.confsysctl –p

    e.开启服务

    /etc/init.d/zebra start

     

    /etc/init.d/ospfd start

     

    chkconfig zebra on

     

    chkconfig ospfd on

    4.LVS keepalived配置

    在此架构下,LVS只能配置成DR模式。如果要配置成NAT模式,我的想法是,需要参照上面的方式让LVS调度机与内网三层设备配置ospf,此方法未验证,有其他方案请告知。

    a.修改配置文件 keepalived.conf ,在Cluster架构中,所有调度机用相同的配置文件

    vim /etc/keepalived/keepalived.conf

    #keepalived的全局配置global_defs { 

       notification_email {

     

       lxcong@gmail.com

       }

       notification_email_from lvs_notice@gmail.com

       smtp_server 127.0.0.1

       smtp_connect_timeout 30

       router_id Ospf_LVS_1

    }

     

    #VRRP实例,在这个架构下所有的LVS调度机都配置成MASTER

     

    vrrp_instance LVS_Cluster{  ##创建实例 实例名为LVS_Cluster

     

        state MASTER #备份服务器上将MASTER改为BACKUP  

        interface eth0    ##VIP 捆绑网卡

        virtual_router_id 100##LVS_ID  在同一个网络中,LVS_ID是唯一的

        priority 100#选举的优先级,优先级大的为MASTER  备份服务上将100改为99

        advert_int 1#发送vrrp的检查报文的间隔,单位秒

        authentication {  ##认证信息。可以是PASS或者AH

            auth_type PASS 

            auth_pass 08856CD8

        }

        virtual_ipaddress {

            1.1.1.1

        }

    }

     

    #LVS实例,在本文采用的是DR模式,WRR调度方式。其实在这种架构下也只能使用DR模式

     

    virtual_server 1.1.1.180 {

        delay_loop 6

        lb_algo wrr

        lb_kind DR

        persistence_timeout 60

        protocol TCP

     

    real_server 1.1.1.10080 {

        weight 1                                           # 权重

        inhibit_on_failure                               # 若此节点故障,则将权重设为零(默认是从列表中移除)

        TCP_CHECK {

            connect_timeout 3

            nb_get_retry 3

            delay_before_retry 3

            connect_port 80

        }

     

    }

     

    real_server 1.1.1.10180 {

        weight 1                                   # 权重

        inhibit_on_failure                               # 若此节点故障,则将权重设为零(默认是从列表中移除)

        TCP_CHECK {

            connect_timeout 3

            nb_get_retry 3

            delay_before_retry 3

            connect_port 80

        }

     

    }

     

    real_server 1.1.1.10280 {

        weight 1                                           # 权重

        inhibit_on_failure                               # 若此节点故障,则将权重设为零(默认是从列表中移除)

        TCP_CHECK {

            connect_timeout 3

            nb_get_retry 3

            delay_before_retry 3

            connect_port 80

        }

     

    }

     

    }

     

    b.启动keepalived

    /etc/init.d/keepalived start

     

    chkconfig keepalived on

    5.realserver配置

    a.添加启动服务脚本/etc/init.d/lvs_realserver

    请自行按需要修改脚本中SNS_VIP变量

    #!/bin/sh

    ### BEGIN INIT INFO

    # Provides: lvs_realserver

    # Default-Start:  3 4 5

    # Default-Stop: 0 1 6

    # Short-Description: LVS real_server service scripts

    # Description: LVS real_server start and stop controller

    ### END INIT INFO

    #  Copyright 2013 lxcong

    #

    #  chkconfig: - 20 80

    #

    #  Author:xxxx@xxxx

     

    #有多个虚拟IP,以空格分隔

    SNS_VIP="1.1.1.1"

    . /etc/rc.d/init.d/functions

    if [[ -z "$SNS_VIP"  ]];then

        echo 'Please set vips in '$0' with SNS_VIP!'

    fi

     

    start(){

    num=0

    for loop in $SNS_VIP

    do

        /sbin/ifconfig lo:$num $loop netmask 255.255.255.255 broadcast $loop

        /sbin/route add -host $loop dev lo:$num

        ((num++))

    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

    sysctl -e -p >/dev/null 2>&1

    }

     

    stop(){

    num=0

    for loop in $WEB_VIP

    do

        /sbin/ifconfig lo:$num down

        /sbin/route del -host $loop >/dev/null 2>&1

        ((num++))

    done

    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

    sysctl -e -p >/dev/null 2>&1

    }

     

    case"$1"in

        start)

            start

            echo "RealServer Start OK"

            ;;

        stop)

            stop

            echo "RealServer Stoped"

            ;;

        restart)

            stop

            start

            ;;

        *)

             echo "Usage: $0 {start|stop|restart}"

             exit 1

    esac

    exit 0

    b.启动服务

    service lvs_realserver start

    chkconfig lvs_realserver on

    总结

    到这里,LVS Cluster架构已部署完了,如果各位有其他更好的LVS扩展方式请留意或者联系我,互相交流 QQ:83766787。另外以前做了一个LVS的管理平台,但是一直都做得不好,也希望有相关平台开发经验的能联系我,交流交流、

    QQ截图20130710233858

     





  • 相关阅读:
    NodeJS 难点(网络,文件)的 核心 stream 二:stream是什么
    NodeJS 难点(网络,文件)的 核心 stream 一:Buffer
    了解了这些才能开始发挥jQuery的威力
    一般公司的大体要求
    js 的垃圾回收器 原理 坑 优化-- 待续
    iframe 问题集合
    图片预加载 js css预加载
    各种插件
    Django REST framework快速入门指南
    Vue.js devtool插件安装后无法使用的解决办法
  • 原文地址:https://www.cnblogs.com/yangliheng/p/5692083.html
Copyright © 2011-2022 走看看