• lvs基础


    lvs基础

    lvs基础原理及实现

    Linux Cluster:

    1. Cluster:计算机集合,为解决某个特定问题组合起来形成的单个系统

      • LB:Load Balancing,负载均衡

      • HA: High Availiablity,高可用

      • HP:High Performance,高性能

    2. lvs集群的类型:

      • lvs-nat(network address translation)

        多目标IP的DNAT,通过将请求报文中的目标地址和目标端口修改为某挑出的RS的RIP和port实现转发

        1. RIP和DIP必须在同一个IP网络,且应该使用私网地址;
        2. 请求报文和响应报文都必须经过由Director转发,Director易于成为系统瓶颈
        3. 支持端口映射,可修改请求报文的目标port
        4. vs必须是linxu系统,rs可以是任意系统
        5. 发送的包 cip/vip --> vs cip/rip 返回的包 rip/cip --> vs vip/cip 支持端口映射
      • lvs-dr(direcrot routing直接路由)

        Director Routing:直接路由: //后端主机,改IP后不做通告,也不arp请求响应

        通过为请求报文重新封装一个MAC首部进行转发,源MAC是DIP所在的接口的MAC,目标是某挑选出的RS的RIP所在接口的MAC地址;源IP/PORT,以及目标IP/PORT均保持不变

        1. 确保前端路由器将目标IP为VIP的请求报文发往Director
        2. 在RS上修改内核参数以限制arp通告及应答级别
          • arp_announce 限制通告级别
          • arp_ignore 限制应答级别
        3. RS的RIP可以使用私网地址,也可以是公网地址;RIP与DIP在同一IP网络;RIP的网关不能指向DIP,以确保响应报文不会经由Director
        4. RS跟Director要在同一个物理网络
        5. 请求报文要经由Director,但响应报文不能经由Director,而是由RS直接发往Client
        6. 不支持端口映射
      • lvs-tun

        转发方式 :不修改请求报文的IP首部(源IP为CIP,目标IP为VIP),而是在原IP报文之外再封装一个IP首部(源IP是DIP,目标IP是RIP),将报文发往挑选出的目标RS;RS直接响应给客户端(源IP是VIP,目标IP是CIP)

        [CIP/VIP] ---> director ---> [DIP/RIP[CIP/VIP]] ---> RIP ---> [VIP|CIP]

        1. DIP,VIP,RIP都应该是公网地址
        2. RS的网关不能,也不可能指向DIP
        3. 请求报文要经由Director,但响应不能经由Director
        4. 不支持端口映射
        5. RS的OS得支持隧道功能
        6. 有可能会出现世型针,超过MTU1500,同时RIP主机得要支持隧道技术,RIP在接收到请求报文的时候会拆开包看到里面还有一个IP首部(CIP-->VIP),但是一看vip在自己主机上,就接收报文发往用户进程处理,并从vip地址上发送给CIP,也就不用经由Director
    3. lvs-tun

      通过同时修改请求报文的源IP地址和目标IP地址进行转发

      1. VIP是公网地址,RIP和DIP是私网地址,且通常不在同一IP网络,因此,RIP的网关一般不会指向DIP
      2. RS收到的请求报文源地址是DIP,因此,只能响应给DIP,但是Director不宁将其发往Client
      3. 请求和响应报文都经由Director
      4. 支持端口映射

        此类开型默认不支持,需要手动编译安装

    4. LVS的调试算法 Scheduler

          静态方法:仅根据算法本身进行调度,不考虑RS负载状态

        1. rr: Round Robin 轮询,按照顺序依次重复轮询

          缺陷:

          每台服务器工作性能可能有差异,应该能者多劳,轮询没法达到此效。

          session无法保持,用户第一次请求时发往A服务器,第二次请求发往B服务器,这两个不同的会话,客户端第一次请求操作是在购物车添加商品,第二次请求轮询至另一台,则第一次添加的商品会丢失,这是客户不可忍受的(此时需要依赖于session保持机制)

        2. wrr: Weighted RR 按照服务器权重轮询

          通过给RS设定权重,一般性能高的RS权重设置大,按照权重的算法依次轮询转发

        3. sh: Source Hashing 源地址哈希

          客户端的首次请求按照其他算法选择RS,后续请求只要是源地址相同都发往同一台RS,这样一定程度上解决了session保持问题。但是又引出情人眼里出西施下问题:

          缺陷:

          现今多数用户都通过snat方式访问互联网,如一个上百台主机的局域网环境,都指向同一个网关,所以对DR而言,源地址都是同一个,实际上是来自不同的客户端的请求,这些请求都将被 发往同一台RS处理,严重损害了负载均衡的效果

        4. dh: Destination Hashing 目标地址哈希

          此算法一般在有多个防火墙时的场景下应用,在防火墙基于状态追踪的机制下,保证响应报文能够通过同一防火墙发送出去

          动态算法: 根据算法及各RS当前负载状态进行调度

        5. LC:least connect 最少连接 //当计算结果相同时,就按照“自上而下”的轮询方式进行选择
        6. WLC: Weight LC 加权最少连接数(少者胜出)

          当计算结果相同时,自上而下选择,一般首次所有RS都先轮询一遍,每个都处理一个请求,以免权重小的术轻松了。第二轮开始权重才开始发挥效果,但是第一次响应的有可能是性能最差的服务器

        7. SED:shortest Expections Delay (Overhead=(activeconns+1)*256/weight)最短期望延迟

          改进版的WLC,这种算法保证了是有权重最高的RS首先响应服务,而非初始计算值都是相同的造成轮询,但是会造成权重大的RS过多的负载,而权重小的RS过于空闲

        8. NQ: SED 的增强版,避免了,权重过大的服务器过于繁忙,而权重过小的过于空闲,也就是一开始全都轮询一遍,然后在开启SED算法来选择。

        9. LBLC: Locality-based Least Connection

          相当于DH+LC,基于局部性的最少连接算法是针对请求报文的目标IP地址的负载均衡调度,主要用于Cache集群系统,因为Cache集群中客户请求报文的布标IP地址是变化的,这里假设任何后端服务器都可以处理任何请求,算法的设计目标在服务器的负载基本平衡的情况下,将相同的目标IP地址的请求调度到同一个台服务器,来提高个太服务器的访问局部性和主存Cache命中率,从而调整整个集群系统的处理能力。 基于局部性的最少连接调度算法根据请求的目标IP地址找出该目标IP地址最近使用的RealServer,若该Real Server是可用的且没有超载,将请求发送到该服务器;若服务器不存在,或者该服务器超载且有服务器处于一半的工作负载,则用“最少链接”的原则选出一个可用的服务器,将请求发送到该服务器。

        10. LBLCR:Replicated adn Locality-based Connection

          带复制的基于局部性最少链接调度算法也是针对目标IP地址的负载均衡,该算法根据请求的目标IP地址找出该目标IP地址对应的服务器组,按“最小连接”原则从服务器组中选出一台服务器,若服务器没有超载,将请求发送到该服务器;若服务器超载,则按“最小连接”原则从这个集群中选出一台服务器,将该服务器加入到服务器组中,将请求发送到该服务器。同时,当该服务器组有一段时间没有被修改,将最忙的服务器从服务器组中删除,以降低复制的程度

    5. 如今centos6/7的版本上已经自动的编译了ipvs,但是可以确定一下://如果没有显示的话,就要自己重新编译内核

      [root@localhost ~]# grep -i -C 10 'ipvs' /boot/config-3.10.0-327.el7.x86_64
      # IPVS transport protocol load balancing support
      #
      CONFIG_IP_VS_PROTO_TCP=y
      CONFIG_IP_VS_PROTO_UDP=y
      # IPVS scheduler //lvs支持的10种算法
      CONFIG_IP_VS_RR=m
      CONFIG_IP_VS_WRR=m
      CONFIG_IP_VS_LC=m
      CONFIG_IP_VS_WLC=m
      CONFIG_IP_VS_LBLC=m
      CONFIG_IP_VS_LBLCR=m
      CONFIG_IP_VS_DH=m
      CONFIG_IP_VS_SH=m
      CONFIG_IP_VS_SED=m
      CONFIG_IP_VS_NQ=m
      

    6. ipvsadm是一款用于操控内核的应用软件,在base源好像就有:

      管理集群服务

      ipvsadm -A|E -t|u|f service-address [-s scheduler] [-p [timeout]] [-M netmask] [--pe persistence_engine] [-b sched-flags]

      A:添加 E:修改 t:tcp u:udp f:firewall server-address:VIP -s:调试算法 -p:持久连接功能

      ipvsadm -D -t|u|f service-address //删除 ipvsadm -C //清空 ipvsadm -R < /etc/sysconfig/ipvsadm //载入规则 ipvsadm -S [-n] //保存规则

      管理集群服务中的RS

      ipvsadm -a|e -t|u|f service-address -r server-address [options] //添加 ipvsadm -d -t|u|f service-address -r server-address ipvsadm -L|l [options] ipvsadm -Z [-t|u|f service-address]
    7. lvs-nat配置实例:

      Director CR1 CR2
      VIP:172.168.254.35 CIP:192.168.153.143CIP:192.168.153.144
      DIP:192.168.153.139

      Director

      ~]# yum install ipvsadm ~]# ipvsadm -A -t 172.16.254.35:80 -s rr ~]# ipvsadm -a -t 172.16.254.35:80 -r 192.168.153.143 -g ~]# ipvsadm -a -t 172.16.254.35:80 -r 192.168.153.143 -g ~]# sysctl -w net.ipv4.ip_forward=1 ~]# sysctl -p

      CR1

      ~]# yum install httpd ~]# echo 143 > /var/www/html/index.html ~]# systemctl start httpd ~]# ip route add default via 192.168.153.139

      CR2

      ~]# yum install httpd ~]# echo 144 > /var/www/html/index.html ~]# systemctl start httpd ~]# ip route add default via 192.168.153.139

      打开一个客户端,访问一下,试试,可不可以轮询

      [root@localhost ~]# for((i=1;i<=10;i++));do curl 172.16.254.35 ;done
      143
      144
      143
      144
      143
      144
      143
      144
      143
      144
      
    8. lvs-dr配置实例:

      Director CR1 CR2
      VIP:172.168.254.36 CIP:172.16.252.113CIP:172.16.250.84
      DIP:172.16.254.35
      #!/bin/bash # IPADDR=172.16.254.36 case $1 in start) echo 1 > /proc/sys/net/ipv4/conf/all/arp_ignore echo 2 > /proc/sys/net/ipv4/conf/all/arp_announce echo 1 > /proc/sys/net/ipv4/conf/lo/arp_ignore echo 2 > /proc/sys/net/ipv4/conf/lo/arp_announce ip addr add $IPADDR dev lo:0 //给lo口添加VIP ip route add 172.16.254.36 dev lo:0 //让去往VIP ;; stop) echo 1 > /proc/sys/net/ipv4/conf/all/arp_ignore echo 2 > /proc/sys/net/ipv4/conf/all/arp_announce echo 1 > /proc/sys/net/ipv4/conf/all/arp_ignore echo 2 > /proc/sys/net/ipv4/conf/all/arp_announce ip addr del $IPADDR dev lo:0 > /dev/null ;; *) echo "start|stop" esac

      arp_ignore:定义响应级别,响应时忽略方式,1表示只从本接口进入的请求响应,且本接口地址是个网络地址

      arp_annouce:定义通告级别,2表示仅使用定义的网卡接口在同网络内通信

      Director:

      ~]# ip addr add 172.16.254.36 dev eth0:0 ~]# yum install ipvsadm ~]# ipvsadm -A -t 172.16.254.36:80 -s rr ~]# ipvsadm -a -t 172.16.254.36:80 -r 172.16.252.113 -g ~]# ipvsadm -a -t 172.16.254.36:80 -r 172.16.250.84 -g ~]# for((i=1;i<=10;i++));do curl 172.16.254.36;done 113 84 113 84 113 84 113 84 113 84

    9. FWM防火墙标记功能

      功能:防火墙标记可以实现多个集群服务绑定为同一个,实现统一调度;将共享一组RS的集群服务统一进行定义。

      在PREROUTING链上打标,在INPUT链上把打标记的请求来做成集群

      ~]#  iptables -t mangle -A PREROUTING -d 172.16.254.36 -p tcp -m multiport --dports 80,443 -j MARK --set-mark 2
      ~]# ipvsadm -A -f 2 -s rr -p 60     //在一定时间内,将同一个ip地址的请求发往同一个RS
      ~]# ipvsadm -a -f 2 -r 172.16.252.113 -g -w 1
      ~]# ipvsadm -a -f 2 -r 172.16.250.84 -g -w 3
      ~]# ipvsadm-save > /etc/sysconfig/ipvsadm
      ~]# iptables-save > /etc/sysconfig/iptable
      

      ~]# ipvsadm -A -t 172.16.254.36:0 -s rr //默认所有的服务全都调度给后端服务器,所以不常用
  • 相关阅读:
    利用GitHub和Hexo打造免费的个人博客 coder
    Android基础——项目的文件结构(二) coder
    25个Android酷炫开源UI框架 coder
    MarkDown使用教程(In Atom) coder
    Android基础——项目的文件结构(一) coder
    25类Android常用开源框架 coder
    Android Activity启动黑/白屏原因与解决方式 coder
    我的window phone 开发第一步
    Entity Framework 4 In Action 读书笔记
    最近在制作一套ASP.NET控件,已初见雏形
  • 原文地址:https://www.cnblogs.com/dance-walter/p/12177452.html
Copyright © 2020-2023  润新知