zoukankan      html  css  js  c++  java
  • 8-lvs-负载均衡

    注意: linux集群的时间需要一致

    并发量在千万以上, 一般才会使用此种方式, 基于第四层进行ip欺骗, 使得nginx只接受上行流量, 下行流量通过具体执行的服务器直接返回

    由章文嵩博士(淘宝) 1998年成立的项目

    3种模式: 

    NAT    上下行走前段服务器
    TUN    前端服务器通过ip隧道的方式到real server, 通过ip隧道可以国际访问, 超大型网络使用
    DR     前端服务器通过内部网络到realserver, realserver处理后直接返回

    Virtual Server via Network Address Translation(VS/NAT)

      1. 通过网络地址转换,调度器重写请求报文的目标地址,根据预设的调度算法,将请求分派给后端的真实服务器;真实服务器的响应报文通过调度器时,报文的源地址被重写,再返回给客户,完成整个负载调度过程。

      2. 集群节点跟director必须在同一个IP网络中;

        RIP通常是私有地址,仅用于各集群节点间的通信;

        director位于client和real server之间,并负责处理进出的所有通信;

        realserver必须将网关指向DIP;

        支持端口映射;

    Virtual Server via IP Tunneling(VS/TUN)

      1. 采用NAT技术时,由于请求和响应报文都必须经过调度器地址重写,当客户请求越来越多时,调度器的处理能力将成为瓶颈。为了解决这个问题,调度器把请求报 文通过IP隧道转发至真实服务器,而真实服务器将响应直接返回给客户,所以调度器只处理请求报文。由于一般网络服务应答比请求报文大许多,采用 VS/TUN技术后,集群系统的最大吞吐量可以提高10倍。

      2. 集群节点可以跨越Internet;

        RIP必须是公网地址;

        director仅负责处理入站请求,响应报文则由realserver直接发往客户端;

        realserver网关不能指向director;

        只有支持隧道功能的OS才能用于realserver;

        不支持端口映射;

    Virtual Server via Direct Routing(VS/DR)

      1. VS/DR通过改写请求报文的MAC地址,将请求发送到真实服务器,而真实服务器将响应直接返回给客户。同VS/TUN技术一样,VS/DR技术可极大地 提高集群系统的伸缩性。这种方法没有IP隧道的开销,对集群中的真实服务器也没有必须支持IP隧道协议的要求,但是要求调度器与真实服务器都有一块网卡连 在同一物理网段上。

     DR模式的详解: 

     

     8种不同的负载均衡算法

      1. 轮叫(Round Robin)
        调度器通过"轮叫"调度算法将外部请求按顺序轮流分配到集群中的真实服务器上,它均等地对待每一台服务器,而不管服务器上实际的连接数和系统负载。

      2. 加权轮叫(Weighted Round Robin)
        调度器通过"加权轮叫"调度算法根据真实服务器的不同处理能力来调度访问请求。这样可以保证处理能力强的服务器处理更多的访问流量。调度器可以自动问询真实服务器的负载情况,并动态地调整其权值。

      3. 最少链接(Least Connections)
        调度器通过"最少连接"调度算法动态地将网络请求调度到已建立的链接数最少的服务器上。如果集群系统的真实服务器具有相近的系统性能,采用"最小连接"调度算法可以较好地均衡负载。

      4. 加权最少链接(Weighted Least Connections)
        在集群系统中的服务器性能差异较大的情况下,调度器采用"加权最少链接"调度算法优化负载均衡性能,具有较高权值的服务器将承受较大比例的活动连接负载。调度器可以自动问询真实服务器的负载情况,并动态地调整其权值。

      5. 基于局部性的最少链接(Locality-Based Least Connections)
        "基于局部性的最少链接" 调度算法是针对目标IP地址的负载均衡,目前主要用于Cache集群系统。该算法根据请求的目标IP地址找出该目标IP地址最近使用的服务器,若该服务器 是可用的且没有超载,将请求发送到该服务器;若服务器不存在,或者该服务器超载且有服务器处于一半的工作负载,则用"最少链接"的原则选出一个可用的服务 器,将请求发送到该服务器。

      6. 带复制的基于局部性最少链接(Locality-Based Least Connections with Replication)
        "带复制的基于局部性最少链接"调度算法也是针对目标IP地址的负载均衡,目前主要用于Cache集群系统。它与LBLC算法的不同之处是它要维护从一个 目标IP地址到一组服务器的映射,而LBLC算法维护从一个目标IP地址到一台服务器的映射。该算法根据请求的目标IP地址找出该目标IP地址对应的服务 器组,按"最小连接"原则从服务器组中选出一台服务器,若服务器没有超载,将请求发送到该服务器,若服务器超载;则按"最小连接"原则从这个集群中选出一 台服务器,将该服务器加入到服务器组中,将请求发送到该服务器。同时,当该服务器组有一段时间没有被修改,将最忙的服务器从服务器组中删除,以降低复制的 程度。

      7. 目标地址散列(Destination Hashing)
        "目标地址散列"调度算法根据请求的目标IP地址,作为散列键(Hash Key)从静态分配的散列表找出对应的服务器,若该服务器是可用的且未超载,将请求发送到该服务器,否则返回空。

      8. 源地址散列(Source Hashing)
        "源地址散列"调度算法根据请求的源IP地址,作为散列键(Hash Key)从静态分配的散列表找出对应的服务器,若该服务器是可用的且未超载,将请求发送到该服务器,否则返回空。

    主机配置: 

    1, 配置虚拟ip

    ifconfig eth0:1 192.168.208.126/24

    使用命令修改 虚拟ip, 重启电脑后就没有了

    从机配置: 

    1, 设置静态ip

    192.168.208.104  #lvs-01
    192.168.208.105  #lvs-02

    2, 修改内核文件, 隐藏vip

    echo 1 >/proc/sys/net/ipv4/conf/eth1/arp_ignore 
    echo 1 >/proc/sys/net/ipv4/conf/all/arp_ignore 
    echo 2 >/proc/sys/net/ipv4/conf/eth1/arp_announce 
    echo 2 >/proc/sys/net/ipv4/conf/all/arp_announce 

    3, 绑定lo网卡, 因为不需要对外通讯, 所以绑定lo, 错误的netmask不对外通讯

    ifconfig lo:1 192.168.208.126 netmask 255.255.255.255 broadcast 192.168.208.126

    4, 添加一个虚拟路由, 用于虚拟ip

    route add -host 192.168.208.126 lo:1

    通过 route 命令可查看

    搭建集群环境

    1, 前端服务器安装ipvsadm: 

    yum -y install ipvsadm

    2, realServer 安装服务器端, 可使用nginx, tomcat, 或者httpServer, 此处使用httpServer

    yum -y install httpd

    配置文件在 /etc/httpd/conf/httpd.conf

    主页文件在 /var/www/html/index.html

    启动: service httpd start

    3, 添加前端服务器集群环境

    ipvsadm -A -t 192.168.208.126:80 -s wlc

    参数解释: 

    命令格式: 
        -A -t|u|f service-address[-s scheduler]
    参数解释; 
        -A 添加, -E 修改, -D 删除
        -t tcp协议的集群, 带端口, realserver的端口
        -u udp协议的集群
        -f 防火墙标记

    4, 将realServer 添加到集群环境中

    # 添加第一台RealServer
    ipvsadm -a -t 192.168.208.126:80 -r 192.168.208.104 -g -w 1
    # 添加第二台RealServer
    ipvsadm -a -t 192.168.208.126:80 -r 192.168.208.105 -g -w 1

     5, 查看

    ipvsadm -Ln

    加入nginx

    如果仍然将nginx作为服务的一个节点, 只需要将lvs将多台nginx服务器的ip加入到lvs集群中, 然后由nginx继续进行请求分发到多台web服务器, 此时realserver为nginx的ip, 响应经由web服务器返回nginx, 在从nginx返回客户端

    (不要忘记更改nginx所在机器的内核 VIP 可见性)

    此时通过页面访问

    www.wenbronk.com 既可以看到轮询的效果了

    访问的是配置的虚拟ip

    附: 从机开启脚本, 需要根据自己的配置进行更改

    #!/bin/bash 
    #description : start realserver 
    VIP=125.38.38.64 
    /etc/rc.d/init.d/functions 
    case "$1" in 
    start) 
    echo " start LVS of REALServer" 
    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
    /sbin/ifconfig lo:0 $VIP broadcast $VIP netmask 255.255.255.255 up
    
    ;; 
    stop) 
    /sbin/ifconfig lo:0 down 
    echo "close LVS Directorserver" 
    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 "Usage: $0 {start|stop}" 
    exit 1 
    esac

    系列来自尚学堂

    http://www.linuxvirtualserver.org/zh/lvs1.html

    https://www.cnblogs.com/liwei0526vip/p/6370103.html

    http://blog.51cto.com/shenmengdong/2090681

  • 相关阅读:
    POJ 3261 Milk Patterns (求可重叠的k次最长重复子串)
    UVaLive 5031 Graph and Queries (Treap)
    Uva 11996 Jewel Magic (Splay)
    HYSBZ
    POJ 3580 SuperMemo (Splay 区间更新、翻转、循环右移,插入,删除,查询)
    HDU 1890 Robotic Sort (Splay 区间翻转)
    【转】ACM中java的使用
    HDU 4267 A Simple Problem with Integers (树状数组)
    POJ 1195 Mobile phones (二维树状数组)
    HDU 4417 Super Mario (树状数组/线段树)
  • 原文地址:https://www.cnblogs.com/wenbronk/p/6618230.html
Copyright © 2011-2022 走看看