• LVS(注意iptables和selinux的问题)


    1.LVS(高负载)
      LVS(Linux虚拟服务器)
      Linux Virtual Server
      LVS集群采用IP负载均和技术和基于内容请求分发技术。调取器具有很好的吞吐率,将请求均衡的转移到不同的服务器执行,且调度器自动屏蔽掉服务器的故障,从而将一组服务器构成一个高性能,高可用的虚拟服务器
      原理详解
        http://junwang.blog.51cto.com/5050337/1439428/
      1.查看内核是否支持ipvs

        grep -i 'vs' /boot/config-3.17.4-301.fc21.i686+PAE
        grep -i 'vs' /boot/config-3.17.4-301.fc21.i686


      2.安装ipvsadm
        yum install ipvsadm
      3.ipvsadm命令
        1、管理集群服务
          1.添加:-Aipvsadm -A|E -t|u|f service-address
              -t:tcp协议集群 -u:udp协议集群 -f:防火墙标记集群
          2.修改:-E
          3.删除:-D ipvsadm -D -t|u|f service-address
        2、管理集群服务中的RealServer
          1.添加:-aipvsadm -a|e -t|u|f service-address -r server-address [-g|i|m] [-w weight]
              -r:RS的地址,NAT模型中,可用IP:PORT实现端口映射
              -g:DR模型 -i:TUN模型 -m:NAT模型 -w:权重
          2.修改:-e
          3.删除:-d ipvsadm -d -t|u|f service-address -r server-address
        3.管理集群服务的查看
          1.ipvsadm -L|l [options]
                options:-n:数字格式显示
                    --stats 统计信息
                    --rate:统计速率
                    --timeout:显示tcp、tcpinfo、udp的会话超时时长
                    -c:连接客户端数量
        4.情况计数器:ipvsadm -Z [-t|u|f service-address]

        5.情况规则:ipvsadm –C

        6.保存规则:
            1.ipvsadm -S > /path/to/somefile
            2.ipvsadm-save > /path/to/somefile
            3.ipvsadm-restore < /path/to/somefile
        4.lvs调度算法:

            1. 固定调度
              i. rr:轮询
              ii. wrr:加权轮询
              iii. sh:source hash,源地址hash(一定时间内,相同的源地址发往相同的主机)session affinity、 session sharing
              iv. dh:对于同一个请求,发往同一个服务器(缓存服务器)

            2. 动态调度(默认为wlc)
                i. lc(least-connection)最少连接
                    1) active*256+inactive 谁的小,挑选谁
                ii. wlc:加权最少连接
                    1) (active*256+inactive)/weight 谁的小,挑选谁
                iii. sed:最短期望延迟
                    1) (active+1)*256/weight 谁的小,挑选谁
                iv. nq:never queue(基于sed,不考虑incative)
                v. lblc(locality-based least-connection)基于本地的最少连接
                vi. lblcr:基于本地的带复制功能的最少连接(缓存共享对象,兄弟服务器)
                  尽可能调度到相同的服务器,只有新请求发送到最少的服务器,没有的话会去查询兄弟服务器



        5.LVS之 DR模型
          DR模型原理

          当客户端访问集群中的服务(例如web),源IP(定义为A)和目标IP(定义为B)如上图所示,发送数据报文到调度器上

      <1>客户端发送报文必须到调度器上,不能到Rearserver上,不然无法实现调度
        实现原理:虽然RS上的lo口也配置VIP,但是却无法响应,通过如下配置在RS上实现

        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



        arp_ignore(接受到arp请求时的响应级别,默认0)
          1) 0:只要本地配置有相应的地址,给予响应
          2) 1:仅在请求的目标地址配置请求到达的接口上的时候,才给于响应
        arp_announce(将自己地址向外通告时的通告级别,默认0)
          1) 0:将本地任何接口上的任何地址向外通告
          2) 1:试图仅向目标网络通告语气网络匹配的地址
          3) 2:仅向与本地接口上地址匹配的网络进行通告

       2.调度器收到报文后查询ipvsadm规则,符合集群服务后发送报文到RS上,源目IP地址不变,是通过修改MAC地址发送到RS上的,
        <1>调度器规则

        ipvsadm -A -t 192.168.11.100:80 -s wrr
        ipvsadm -a -t 192.168.11.100:80 -r 192.168.11.12 -g -w 2
        ipvsadm -a -t 192.168.11.100:80 -r 192.168.11.13 -g -w 4



          RS收到报文后,发现目标IP为自己的VIP(lo:0上配置,不对外响应,只做回报的源IP),用自己的VIP作为源地址发送报文

        <1>如何实现发送报文时,源IP为自己的lo:0上的VIP,默认linux报文从哪个接口出源IP为那个接口
          实现原理:

          ifconfig lo:1 192.168.11.100 netmask 255.255.255.255 up (配置RS的VIP,不对外响应)
    
          route add -h 192.168.11.100 dev lo:0 (增加路由,报文目标IP为192.168.11.100的接口为lo:0,这样回报也是通过lo:0回报,确保报文源IP为VIP)



        <2>确保调度器上的发包正确,增加如下配置

        ifconfig eth:0 192.168.11.100 netmask 255.255.255.255 up (添加VIP地址)
        route add -h 192.168.11.100 dev eth:0 



        客户端收到后源IP为VIP,目的IP为客户端的IP,报文的封装为:RS通过自己的lo:0回应报文,源IP则为VIP,目标IP则为客户端IP

    DR模型实现脚本
    DR类型中,Director和RealServer的配置脚本示例:



    Director脚本:

    #!/bin/bash
    #
    # LVS script for VS/DR
    # chkconfig: - 90 10
    #
    . /etc/rc.d/init.d/functions
    #
    VIP=192.168.11.100
    DIP=192.168.11.11
    RIP1=192.168.11.12
    RIP2=192.168.11.13
    PORT=80
    RSWEIGHT1=2
    RSWEIGHT2=4
    #
    case "$1" in
    start) 
    /sbin/ifconfig eth0:1 $VIP broadcast $VIP netmask 255.255.255.255 up
    /sbin/route add -host $VIP dev eth0:1
    # Since this is the Director we must be able to forward packets
    echo 1 > /proc/sys/net/ipv4/ip_forward
    # Clear all iptables rules.
    /sbin/iptables -F
    # Reset iptables counters.
    /sbin/iptables -Z
    # Clear all ipvsadm rules/services.
    /sbin/ipvsadm -C
    # Add an IP virtual service for VIP 192.168.0.219 port 80
    # In this recipe, we will use the round-robin scheduling method. 
    # In production, however, you should use a weighted, dynamic scheduling method. 
    /sbin/ipvsadm -A -t $VIP:80 -s wrr
    # Now direct packets for this VIP to
    # the real server IP (RIP) inside the cluster
    /sbin/ipvsadm -a -t $VIP:80 -r $RIP1 -g -w $RSWEIGHT1
    /sbin/ipvsadm -a -t $VIP:80 -r $RIP2 -g -w $RSWEIGHT2
    /bin/touch /var/lock/subsys/ipvsadm &> /dev/null
    ;; 
    stop)
    # Stop forwarding packets
    echo 0 > /proc/sys/net/ipv4/ip_forward
    # Reset ipvsadm
    /sbin/ipvsadm -C
    # Bring down the VIP interface
    /sbin/ifconfig eth0:0 down
    /sbin/route del $VIP
    
    /bin/rm -f /var/lock/subsys/ipvsadm
    
    echo "ipvs is stopped..."
    ;;
    status)
    if [ ! -e /var/lock/subsys/ipvsadm ]; then
    echo "ipvsadm is stopped ..."
    else
    echo "ipvs is running ..."
    ipvsadm -L -n
    fi
    ;;
    *)
    echo "Usage: $0 {start|stop|status}"
    ;;
    esac



    RealServer脚本:

    #!/bin/bash
    #
    # Script to start LVS DR real server.
    # chkconfig: - 90 10
    # description: LVS DR real server
    #
    . /etc/rc.d/init.d/functions
    VIP=192.168.11.100
    host=`/bin/hostname`
    case "$1" in
    start)
    # Start LVS-DR real server on this machine.
    /sbin/ifconfig lo down
    /sbin/ifconfig lo up
    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
    /sbin/route add -host $VIP dev lo:0
    ;;
    stop)
    # Stop LVS-DR real server loopback device(s).
    /sbin/ifconfig lo:0 down
    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
    ;;
    status)
    # Status of LVS-DR real server.
    islothere=`/sbin/ifconfig lo:0 | grep $VIP`
    isrothere=`netstat -rn | grep "lo:0" | grep $VIP`
    if [ ! "$islothere" -o ! "isrothere" ];then
    # Either the route or the lo:0 device
    # not found.
    echo "LVS-DR real server Stopped."
    else
    echo "LVS-DR real server Running."
    fi
    ;;
    *)
    # Invalid entry.
    echo "$0: Usage: $0 {start|status|stop}"
    exit 1
    ;;
    esac 



  • 相关阅读:
    linux top详解
    软件人才必须具备的素质
    合格程序员每天每周每月每年应该做的事
    正则匹配任意字符(包括换行)
    软件测试方案
    LInux进程间的通信方式有哪儿些?
    三网融合
    php路径问题
    xp 安装SATA AHCI驱动
    进程与线程的区别
  • 原文地址:https://www.cnblogs.com/djoker/p/6396800.html
Copyright © 2020-2023  润新知