LVS

作者: 一桥长书 | 来源:发表于2017-11-12 17:17 被阅读0次

    1 集群的概念

    • Cluster的概念
    - 当系统的性能实在是不够用,一般的系统的扩展方式
      Scale Up: 向上扩展,增强
      Scale Out: 向外扩展,增加设备,但是存在调度问题
    Cluster: 集群,为解决某个特定的问题将多台计算机组合起来形成的单个系统
    Linux Cluster类型:
      LB: Load Balancing, 负载均衡
      HA: High Availiablity,高可用,解决SPOF(Single Point Of Failuer)单点故障
      HPC: High-performance computing,高性能计算
    分布式系统:
      分布式存储:云盘
      分布式计算: hadoop, Spark
    
    • Cluster 的分类
    硬件: 
      F5 Big-IP
      Citrix Netscaler
      A10
    软件:
      LVS: Linux Virtual Server
      nginx: 支持四层调度
      haproxy:支持四层调度
    基于工作的协议层次划分:
      传输层(通用):DPORT
        lvs,nginx(stream),haproxy(mode tcp)
      应用层(专用):对特定的协议
        proxy server(代理服务器)
        http: nginx, httpd, haproxy(mode http)
        fastcgi: nginx, httpd
        mysql: mysql-proxy
    
    • 与Cluster相关的一些问题及解决
    会话保持: 负载均衡
      1 session sticky: 同一个用户调度固定的服务器
        Source IP: LVS sh 算法(对特定的服务而言)
        Cookie
      2 session replication: 每一台拥有的全部的session
        session multicast cluster
      3 session server: 专门的session服务器
        Memcached, Redis
    HA集群实现方案:
      keepalived:基于 vrrp(虚拟冗余路由协议)
      ais:application interface standard(应用接口规范)
        heartbeat, cman+rgmanager, corosync+pacemaker
    

    2 LVS的介绍

    • LVS: Linux Virtual Server,负载调度器,集成内核(在netfileter的框架上),由章文嵩研发
    lvs:基于四层调度,根据一定的算法将客户端的请求分发给后端的服务器
    工作原理: VS根据请求的报文的目标IP和目标协议及端口将其调度转发到某RS,根据调度算法来挑选RS
    iptables/netfilter:
      iptables:用户空间的管理工具
      netfileter: 内核空间的框架
      流入: PREROUTING --> INPUT
      流出: OUTPUT --> POSTROUTING
      转发: PREROUTING --> FORWARD --> POSTROUTING
    查看内核是否支持ipvs
      grep -i -A 20 'ipvs' /boot/config-xxx
    
    • LVS的概念:
    • LVS中的一些术语
    VS: VIrtual Server,Director Server(DS)
      Dispatcher(调度器),Load Balancer
    RS: Real Server(lvs), upstream server(在nginx中叫), backend server(在haproxy叫)
    CIP: Client IP
    VIP: Virtual server IP VS外网的IP
    DIP: Direcor IP VS内网的IP
    RIP: Real server IP 真是服务器的IP地址
    访问流程: CIP <--> VIP==DIP <-->RIP
    
    • LVS 集群的类型:
    lvs: ipvsadm/ipvs
      ipvsadm: 用户空间的命令行工具,规则管理器,用于管理集群服务及RealServer
      ipvs: 工作于内核空间netfilter的INPUT钩子上的框架
        支持的协议: tcp udp ah_esp esp ah sctp
    lvs集群的类型:
      lvs-nat: 修改请求报文的目标IP,多目标IP的DNAT
      lvs-dr: 操纵封装新的MAC地址
      lvs-tun: 在原请求IP报文之外新加一个IP首部
      lvs-fullnat: 修改请求报文的源和目标
    
    • lvs-nat
    lvs-nat
    多目标DNAT(iptables) 他通过修改报文的目标IP地址(同时可能会修改目标端口)至挑选出来某RS的RIP地址实现转发
        1 RS 应该使用私有网络地址,且RS的网关指向DIP(DIP和RIP之间可以使用路由器)
        2 请求和相应报文都要经由director转发,极高负载的场景中,director可能会成为系统瓶颈
        3 支持端口映射
        4 RS 可以使用任意操作系统
        5 RS的RIP和Director的DIP在同一IP网络,也可以不在同一个网段
    
    • lvs-dr
    1 保证前端路由器将目标IP为VIP的请求报文发送给director
      解决方案
        静态绑定
        arptables  后台主机不能使windows
          arptables -A IN -d $VIP -j DROP
          arptables -A OUT -s $VIP -j mangle --mangle-ip-s $RIP
        修改RS主机内核参数
          arp_announce
          arp_ignore
    2 RS的RIP可以使用私有地址,但是也可以使用公网地址
    3 RS跟Director必须在同一物理网络中
    4 请求报文经由Director 调度,但响应报文一定不能经由Director;
    5 不支持端口映射
    6 RS 可以是大多数操作系统
    7 RS的网关不能指向DIP
    
    • lvs-tun
    转发方式:不修改请求报文的IP首部(源IP为CIP,目标IP为VIP),而在原IP报文之外再封装一个IP首部(源IP是DIP,目标IP是RIP),将报文发往挑选出的目标RS;RS直接响应给客户端(源IP是VIP,目标IP是CIP)
      (1) DIP, VIP, RIP都应该是公网地址
      (2) RS的网关不能,也不可能指向DIP
      (3) 请求报文要经由Director,但响应不能经由Director
      (4) 不支持端口映射
      (5) RS的OS须支持隧道功能
    
    • lvs-fullnat: 这种类型kernel不支持,所以也就不做介绍了
    • LVS工作模式的总结


    lvs-nat与lvs-fullnat:请求和响应报文都经由Director
    lvs-nat: DIP的网关指向DIP
    lvs-fullnat: DIP和RIP未必在同一个网络,但要能够通信
    lvs-dr与lvs-tun:请求报文要经由Director,但响应报文由RS直接发往Client
    lvs-dr: 通过封装新的MAC首部实现,通过MAC网络转发
    lvs-tun: 通过在原IP报文封装新的IP头,实现转发,支持远程通信
    
    • ipvs scheduler: lvs的调度算法
    根据是否考虑各个RS的负载状态,可分为两种:动态算法和静态算法
    静态算法:四种
      1 RR: roundrobin,轮训
      2 WRR: weight RR, 加权的轮训
      3 SH: source hashing,实现 session sticky,源地址hash,将来自统一个IP的地址的请求始终发送给第一次挑中的RS,从而实现会话绑定,粒度比较粗
      4 DH: destination hashing: 目标地址hash,将发往同一个目标地址的请求始终发至第一次挑中的RS,典型的场景是正向代理缓存场景中的负载均衡
    动态算法:
      1 LC: least connections 适用于长连接使用 overhead=active*256+inactiveconns
      2 WLC: weight LC: 默认调度算法 overhead=(activeconns*256+inactiveconns)/weight
      3 SED: shortest Expection Delay: 初始连接权重优先 overhead=(activeconns+1)*256/weight
      4 NQ: nerver queue: 第一次均匀分配,后续SED
      5 LBLC: locality-based lc,动态的DH算法,场景:根据负载状态实现正向代理
      6 LBLCR: LBLC with Replication,带复制功能的LBLC,解决LBLC不均匀问题,从负载重的复制到负载轻的RS
    
    • ipvsadm
    ipvsadm 用法同iptables
      管理集群服务 
        ipvsadm -A|E -t|u|f service-address [-s scheduler]  E 修改
        ipvsadm -D -t|u|f service-address
          service-address
            tcp: -t ip:port
            udp: -u ip:port
            fwm: -f mark    
          -s scheduler
      管理集群服务中的RS
        ipvsadm -a|e -t|u|f service-address -r server-address [-g|i|m] [-w weight]
        ipvsadm -d -t|u|f service-address -r server-address
          server-address
            ip:port
          lvs-type    要注意使用 什么模型
            -g gateway dr
            -i ipip tun
            -m masquerade,nat   
      清空和查看
        ipvsadm -C
        ipvsadm -L|l [options]
          -n numberic 基于数字格式显示地址和端口
          -c connetcion 显示ipvs连接
          --rate 速率
          --stats 统计数据
          --exact 精确值
      保存和重载
        ipvsadm -R
        ipvsadm -S [n]
      置零计数器
        ipvsadm -Z [-t|u|f service-address]
    

    3 LVS的实现

    • lvs-nat


    1 布置此环境的时候,使用linux的主机进行实现
    2 route的转发的功能需要实现,Director的核心转发就不需要打开
    3 将RIP1和RIP2的网关指向DIP
    4 然后在Director上写转发规则
    5 在各RS布置上服务如,mysql或httpd的服务
    6 在Director上写规则,使用的是mysql和http并且是使用的轮训的算法
      ipvsadm -A -t 192.168.8.3:80 -s rr
      ipvsadm -a -t 192.168.8.3:80 -r 172.18.23.71:80 -m -w 1
      ipvsadm -a -t 192.168.8.3:80 -r 172.18.23.72:80 -m -w 2
      ipvsadm -A -t 192.168.8.3:3306 -s rr 
      ipvsadm -a -t 192.168.8.3:3306 -r 172.18.23.71:3306 -m -w 1
      ipvsadm -a -t 192.168.8.3:3306 -r 172.18.23.72:3306 -m -w 2
    
    • lvs-dr
    DIP和VIP是同网段的地址,如果用到生产环境,会需要很多的公网IP
    1 布置此环境的时候,使用linux的主机进行实现
    2 ,Director,route的转发的功能需要实现
    3 将Director,RIP1和RIP2的网关指向router 2
    4 在各个RS的服务器上修改内核参数
      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
      ifconfig lo:0 172.18.23.100/32 broadcast 172.18.23.100 up
      route add -host 172.18.23.100 dev lo:0 
    5 在Director上配置IP地址
      ifconfig ens33 172.18.23.100/32 broadcast 172.18.23.100 up
      route add -host 172.18.23.100 dev ens33
    6 在Director上写ipvs规则
      ipvsadm -A -t 172.18.23.100:80 -s rr
      ipvsadm -a -t 172.18.23.100:80 -r 172.18.23.71:80 -g -w 1
      ipvsadm -a -t 172.18.23.100:80 -r 172.18.23.72:80 -g -w 2
      ipvsadm -A -t 172.18.23.100:3306 -s rr
      ipvsadm -a -t 172.18.23.100:3306 -r 172.18.23.71:80 -g -w 1
      ipvsadm -a -t 172.18.23.100:3306 -r 172.18.23.72:80 -g -w 2
    
    DIP和VIP是同网段的地址,可以使用内网IP
    1 布置此环境的时候,使用linux的主机进行实现
    2 Director,router的转发的功能需要实现,并且router上还应当有192.168.80.0/24地址,否则可能会有问题
    3 将Director,RIP1和RIP2的网关指向router 2
    4 在各个RS的服务器上修改内核参数
      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
      ifconfig lo:0 192.168.8.8/32 broadcast 192.168.8.8 up
      route add -host 192.168.8.8 dev lo:0 
    5 在Director上配置IP地址
      ifconfig ens33 192.168.8.8/32 broadcast 192.168.8.8 up
      route add -host 192.168.8.8 dev ens33
    6 这种方式,需要在前段路由器上添加一条路由规则,执行vip,通过route2 的网卡
    7 在Director上写规则
      ipvsadm -A -t 192.168.8.8 -s rr
      ipvsadm -a -t 192.168.8.8:80 -r 172.18.23.71:80 -g -w 1
      ipvsadm -a -t 192.168.8.8:80 -r 172.18.23.72:80 -g -w 2
      ipvsadm -A -t 192.168.8.8:3306 -s rr
      ipvsadm -a -t 192.168.8.8:3306 -r 172.18.23.71:80 -g -w 1
      ipvsadm -a -t 192.168.8.8:3306 -r 172.18.23.72:80 -g -w 2
    

    对于上面三种lvs的实现:可以使用FWM即:基于防火墙标记进行统一调度,请自行进行调节

    iptables -t mangle -A PREROUTING -d VIP -p tcp --dport 80 -j MARK 10
    iptables -t mangle -A PREROUTING -d VIP -p tcp --dport 3306 -j MARK 10
    ipvsadm -A -f 10 rr
    ipvsadm -a -f 10 -r 172.18.23.71 -g
    ipvsadm -a -f 10 -r 172.18.23.72 -g
    

    相关文章

      网友评论

          本文标题:LVS

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