美文网首页
负载均衡-LVS

负载均衡-LVS

作者: 麦大大吃不胖 | 来源:发表于2020-12-07 14:13 被阅读0次

    by shihang.mai

    1. LVS负载均衡拓扑

    负载均衡拓扑

    2. NAT模式

    负载均衡拓扑-DNAT
    1. Client发出(CIP->VIP)的包到负载均衡服务器,但是如果继续将(CIP-VIP)包向后面的RIP发送,显然RIP服务器会丢掉这个包。
    2. 只需在负载均衡服务器中将(CIP->VIP)改为(CIP->RIP),就能解决。
    3. 当server处理完返回时同样道理,server发出(RIP->CIP),在负载均衡服务器中将(RIP->CIP)改为(VIP->CIP),发送回Client

    缺点:

    1. 一般地,发送都是少量的数据,返回的数据都会比发送的大,发送和返回都需要经过负载均衡服务器,带宽就是瓶颈。
    2. 因为每次的发送和返回都要经过地址转换,会消耗负载均衡服务器的计算能力。

    3. DR模式

    负载均衡-DR
    1. 为解决NAT模式带宽瓶颈,那么我们只需要发送和返回分开就可以
    2. 那么server端必须能产生(VIP->CIP),即server端必须有VIP,而且这个VIP应该是隐藏的,在server内部可见,但是对外不可见
    3. 当Client发出(CIP->VIP),在负载均服务器中,直接利用链路层ARP协议,发出的时候拼上RIP的mac地址,直接发送到server
    4. server收到后,拆掉RIP@MAC,处理完,用隐藏的VIP就可以生成(VIP->CIP),这样就把发送和返回分开了

    优点:利用arp速度快,也不太消耗算力,成本低

    缺点:因为利用了arp,而arp是节点与节点间的,所以负载均衡服务器要与server同一个局域网,有限制。

    4. TUN模式

    负载均衡拓扑-TUN
    1. 解决统一局域网限制,我们直接用数据包(DIP->RIP)包裹吗(CIP->VIP)即可.
    2. Client发送(CIP->VIP),在负载均衡服务器中用(DIP->RIP)发送,但是这个包里面含有(CIP->VIP),那么在server端接收到包后,拆掉外层(DIP->RIP),处理完后用隐藏的vip就可以生成(VIP->CIP)

    优点:没统一局域网限制,速度也可以。

    隐藏vip方法(在本地网卡LO上配置)

    路径: /proc/sys/net/ipv4/conf/\*IF\*/arp_ignore
    arp_ignore: 定义接收到ARP请求时的响应级别;
      0:只要本地配置的有相应地址,就给予响应;
      1:仅在请求的目标(MAC)地址配置请求,到达的接口上的时候,才给予响应;
    ====================================================
    路径: /proc/sys/net/ipv4/conf/\*IF\*/arp_announce
    arp_announce:定义将自己地址向外通告时的通告级别;
      0:将本地任何接口上的任何地址向外通告;
      1:试图仅向目标网络通告与其网络匹配的地址;
      2:仅向与本地接口上地址匹配的网络进行通告;
    

    5. DR模式例子

    实验手册
    LVS:
    
    node01:
        ifconfig  eth0:8 192.168.150.100/24
    node02~node03:
        1)修改内核:
            echo 1  >  /proc/sys/net/ipv4/conf/eth0/arp_ignore 
            echo 1  >  /proc/sys/net/ipv4/conf/all/arp_ignore 
            echo 2 > /proc/sys/net/ipv4/conf/eth0/arp_announce 
            echo 2 > /proc/sys/net/ipv4/conf/all/arp_announce 
        2)设置隐藏的vip:
            ifconfig  lo:3  192.168.150.100  netmask 255.255.255.255
            
    RS中的服务:
    node02~node03:
        yum install httpd -y
        service httpd start
        vi   /var/www/html/index.html
            from 192.168.150.1x
    
    LVS服务配置
    node01:
            yum install ipvsadm 
        ipvsadm -A  -t  192.168.150.100:80  -s rr
        ipvsadm -a  -t 192.168.150.100:80  -r  192.168.150.12 -g -w 1
        ipvsadm -a  -t 192.168.150.100:80  -r  192.168.150.13 -g -w 1
        ipvsadm -ln
    
    验证:
        浏览器访问  192.168.150.100   看到负载  疯狂F5
        node01:
            netstat -natp   结论看不到socket连接
        node02~node03:
            netstat -natp   结论看到很多的socket连接
        node01:
            ipvsadm -lnc    查看偷窥记录本
            TCP 00:57  FIN_WAIT    192.168.150.1:51587 192.168.150.100:80 192.168.150.12:80
            FIN_WAIT: 连接过,偷窥了所有的包
            SYN_RECV: 基本上lvs都记录了,证明lvs没事,一定是后边网络层出问题
    

    以上模型存在的问题:

    1. LVS单点故障,整个业务异常
    2. RS会挂,LVS还存在这个RS的负载记录,导致一部分业务异常
    

    解决方法:

    1. 主备解决LVS单点
    
       方向:主向备发送心跳
    
       效率:主挂了,每个备拿出自己的权重,最大的当选。推让制。
    
    2. 验证RS挂。http请求,判断是否返回200
    

    6. Keepalived

    这是一个第三方的软件,作用如下:

    1. 监控自己服务
    2. Matser通告自己还活着,backup监听Master状态,Master挂了,一堆backup推举出一个Master
    3. 配置vip,添加itvs
    4. 对RS做健康检查
    
    实验手册-keepalive
    keepalived实验:
    主机: node01~node04
    
    node01:
        ipvsadm -C
        ifconfig eth0:8 down
    
    ----------------------------
    node01,node04:
        yum install keepalived ipvsadm -y
        配置:
            cd  /etc/keepalived/
            cp keepalived.conf keepalived.conf.bak
            vi keepalived.conf
                node01:
                vrrp:虚拟路由冗余协议!
                    vrrp_instance VI_1 {
                        state MASTER         //  node04  BACKUP
                        interface eth0
                        virtual_router_id 51
                        priority 100         //  node04  50
                        advert_int 1
                        authentication {
                            auth_type PASS
                            auth_pass 1111
                        }
                        virtual_ipaddress {
                            192.168.150.100/24 dev eth0 label  eth0:3
                        }
                    }
                virtual_server 192.168.150.100 80 {
                    delay_loop 6
                    lb_algo rr
                    lb_kind DR
                    nat_mask 255.255.255.0
                    persistence_timeout 0
                    protocol TCP
    
                    real_server 192.168.150.12 80 {
                        weight 1
                        HTTP_GET {
                            url {
                              path /
                              status_code 200
                            }
                            connect_timeout 3
                            nb_get_retry 3
                            delay_before_retry 3
                        }   
                    }       
                    real_server 192.168.150.13 80 {
                        weight 1
                        HTTP_GET {
                            url {
                              path /
                              status_code 200
                            }
                            connect_timeout 3
                            nb_get_retry 3
                            delay_before_retry 3
                        }
                    }
                scp  ./keepalived.conf  root@node04:`pwd`
    

    虽然有keepalive,但是keepalive是单点。而且当主机的keepalive异常挂了(主机还运行着),那么备机也会创建vip,那就会有两个相同的vip(即:192.168.150.100)。

    相关文章

      网友评论

          本文标题:负载均衡-LVS

          本文链接:https://www.haomeiwen.com/subject/qkrziktx.html