zoukankan      html  css  js  c++  java
  • lvs简介

    Linux集群

      在介绍lvs之前,我们先来聊聊Linux集群。Linux集群(cluster)就是一组Linux计算机,它们作为一个整体向用户提供一组网络资源,这些单个的计算机系统就是集群的节点

    (node)。一个理想的集群,用户是不会意识到集群系统底层的节点的,在他们看来,集群是一个系统,而非多个计算机系统,并且集群系统的管理员可以随意增加和删改集群系统

    的节点。

    Linux集群特点: 

      (1)高可扩展性:在不影响业务的情况下,可以动态的添加或删除资源

      (2)高可用性HA:集群中的一个节点失效,它的任务可传递给其他节点。可以有效防止单点失效。

      (3)高性能:负载平衡集群允许系统同时接入更多的用户。

      (4)高性价比:可以采用廉价的符合工业标准的硬件构造高性能的系统。

    Linux集群类型:

      (1)LB:负载均衡

      (2)HA:高可用集群

      (3)HP:高性能

    LVS,Linux Virtual Server:

      在初步了解了Linux集群后,我们进一步介绍负载均衡集群技术LVS

      LVS是Linux Virtual Server的简写,意即Linux虚拟服务器,是一个虚拟的服务器集群系统。本项目在1998年5月由章文嵩博士成立,是中国国内最早出现的自由软件项目之一。

    具体介绍可以查询度娘  https://baike.baidu.com/item/LVS/17738?fr=aladdin

      LVS属于Linux集群LB类型,而目前LB类型的实现方式一般分两种:硬件实现软件实现

      硬件实现:

        F5 BIGIP

        Citrix NetScaler

        A10

        。。。

      软件实现:

        LVS

        nginx

        haproxy

        。。。

    lvs特点

             功能上:四种IP负载均衡技术和八种连接调度算法的IPVS软件。

             适用性上:基于OSI参考模型4层转发,后端服务器可运行任何支持TCP/IP的操作系统,负载均衡调度器能够支持绝大多数的TCP和UDP协议

             性能上:LVS服务器集群系统具有良好的伸缩性,可支持几百万个并发连接

    lvs组成部分:

       负载调度器(load balancer/Director):由一台或多台负载调度器组成,主要作用类似一个路由器,将用户请求分发给服务器池上的real server;

      服务器池(server pool/Realserver):一组真正执行客户请求的服务器

      共享存储(shared storage):为服务器池提供一个共享的存储区,能使得服务器池拥有相同的内容,提供相同的服务。

    lvs类型:

      lvs的类型有4种,我们这里详细地介绍前三种类型。lvs的类型分别是NAT、DR、TUN、FULLNAT四种。

      lvs-nat

      

      lvs-nat工作流程:

      lvs-nat的工作的本质就是多目标的dnat。

      (1)客户端请求资源,源地址cip(client IP),目的地址vip(virtual IP)

      (2)请求报文到达调度器,调度器发现目的地址是自己,然后修改请求报文的目标IP地址为通过调度算法选出的RealServer,并将请求发送至RealServer

      (3)RealServer收到请求后,将请求内容响应给负载调度器,负载调度器将响应报文的源地址设置为VIP,目的地址设置为CIP发出。

      lvs-nat的特点:    

      (1)RS应该和DIP应该使用私网地址,且RS的网关为DIP

      (2)请求和响应报文都要经由director转发,极高负载场景中,director可能会成为系统瓶颈

      (3)支持端口映射:

      (4)RS可以使用任意OS

      lvs-dr

          

      lvs-dr工作流程:

      lvs-dr的本质是修改目的地址MAC

      (1)客户端请求资源,源地址cip(client IP),目的地址vip(virtual IP)

      (2)请求报文通过路由器,到达交换机,交换机检查目的地址的MAC,并发送ARP广播。

      (3)调度器收到广播,经过调度算法后将RealServer  rip(realserver IP)的MAC地址添加到目的地址后,发往交换机

      (4)交换机收到调度器发来的报文,检查目的地址MAC,这里的MAC地址已经是经过调度器修改后的MAC,也就是RealServer的MAC,再次发送广播

      (5)RealServer接到请求,响应请求,将源地址设置为vip,目的地址设置为cip后不经过调度器发送给客户端

      lvs-dr特点:  

      (1)保证前端路由器将目标IP为VIP的请求报文发送给director

      (2)RS的RIP可以使用私有地址,也可以使用公网IP

         (3)RS跟Director必须在同一个物理网络中(ARP)能解析的

           (4)请求本文经由Director调度,但响应报文一定不能由director

        (5)不支持端口映射

          (6)RS的网关不能指向DIP

      lvs-tun

      

         (1)用户发送请求到Director的VIP请求服务;

         (2)当用户请求到达Director的时候,根据调度算法选择一台RS进行转发,这时使用隧道(tun)封装两个IP首部,此时源IP是DIP,目标IP是RIP;

       (3)当RS接收到数据报后,看到外层的IP首部,目标地址是自己,就会拆开封装,解析完毕后,发送响应报文,源IP是VIP,目标IP是CIP。

    lvs调度算法:

     

      静态方法:仅根据算法本身进行调度:(不考虑后端运行情况)
        RR:round robin 轮循

        WRR:weighted rr, 加权轮循 (设置权重,权重比列分配)

        SH:source hash 源地址hash ,实现session保持的机制:

        DH:destation hash 目标地址hash,将对同一个目标的请求始终发往同一个RS

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

        overhead(负载)=

        LC: least connection 最小连接数 overhead=Active*256+Inactive(非活动数)

        WLC:weighted LC 加权最小连接数 overhead=(Active*256+Inactive)/Weight

        SED:shortest expect delay WLC的改进

        overhead=(Active+1)*256/weight

        NQ:nerver queue 从不排队,

        SED的改进

        LBLC:Locality-based LC 即为动态的DH算法:

        本地访问互联网时,采用,缓存,提高访问命中率

        LBLCR:带复制的LBLC

       由于http是无状态的连接,即请求时建连接、请求完释放连接,以尽快将资源释放出来服务其他客户端,所以可能在某些特定的情况下出现问题。比如在登录某宝购买商品

    时会出现被要求重复登录的情况,因为无状态,请求被发往不同的RealServer导致,引入session保持可以解决这类问题,目前session保持实现方法有以下几种。

      session保持:

        session绑定:

          source ip hash(LVS只支持ip hash)

          cookie:任意新请求来时,插入cookie

        session集群:

          保证主机宕机的危险

          各主机间同步session,各主机拥有全部session

        session服务器:

          将session保存在共享存储内,存储或者nas,Redis(考虑Redis的高可用性)

    ipvsadm配置命令:

      管理群集服务:

        增:

          ipvsadmin -A -t|u|f service-address [-s scheduler]

          A 添加

          service-address:

          -t TCP

          -u UDP

          -f FWM

          -s 9种调度器

        例子 :

          ipvsadmin -A -t 172.16.1.253:80 -s wlc

        删:

          ipvsadmin -D -t 172.16.1.253:80

          ipvsadmin -C 删除所有集群服务

        改:
          ipvsadmin -E -t|u|f service-address [-s scheduler]

          -E 编辑

          -t TCP

          -u UDP

          -s 9种调度器

        例子 :

          ipvsadmin -E -t 172.17.1.253:80 -s wrr

      管理集群服务中的RS

        增:

          ipvsadmin -a -t|u|f service-address -r realserver-address [-g|i|m] [-w weight]

          -r server-address:某RS的地址,在NAT模式中,可使用IP:PORT实现端口映射;

          [-g|i|m]: LVS类型

          -g gateway:DR(默认)

          -i ipip:tun  

          -m maqs:NAT

          [-w weight]:定义服务器权重

        例子:

          ipvsadmin -a -t 172.16.1.253:80 -r 172.16.1.101 -g -w 5

          ipvsadmin -a -t 172.16.1.253:80 -r 172.16.1.102 -g -w 10   

        删除RS

          ipvsadmin -d -t|u|f service-address -r server-address  

        例子:

          ipvsadmin -d -t 172.16.1.253:80 -r 172.16.1.101

        修改RS

          ipvsadmin -e -t|u|f service-address -r server-address [-g|i|m] [-w weight]

        例子:

          ipvsadmin -e -t 172.16.1.253:80 -r 172.16.1.101 -g -w 3 

        查看:
          ipvsadmin -L|I [options]

          -n:数字格式显示主机地址和端口

          --stats:统计数据

          --rate:速率

          --timeout:显示

          -c:显示当前的ipvs连接状况

        保存:
          service ipvsadm save 保存到默认配置文件

          ipvsadmin -S > /path/to/somefile

        载入:

          ipvsadmin -R < /path/from/somefile

    lvs持久连接

      我们这里主要介绍lvs persistence,它的作用是无论ipvs使用何种调度方法,其都能实现将来自于同一个RS的请求始终定向至第一次调度时选出的RS。配置命令很简单,只要在

    管理群集服务命令后加-p number即可。

      lvs persistence的实现方式有以下三种:  

        每端口持久:PPC,每端口持久,单端口持久调度,(单个端口)

        单FWM持久:PFWMC,单FWM持久调度 (一组端口 -j MASK --set-mark 10)

        单客户端持久: PCC,单客户端持久调度 (所有端口)

      配置命令:

        PPC:  

         ipvsadm -A -t 192.168.0.10:80 -s rr -p 300 

        PFWMC:   

          通过FWM定义集群的方式:

          (1)在director上netfilter的mangle表的PREROUTING定义用于打标的规则

          iptables -t mangle -A PREROUTING -d 192.168.0.10(vip) -p tcp --dport 80 -j MARK --set-mark 10

          iptables -t mangle -A PREROUTING -d 192.168.0.10(vip)-p tcp --dport 22 -j MARK --set-mark 10

          iptables 定义了两个端口22和80 

          (2)基于FWM定义集权服务:

          ipvsadmin -A -f 10 -s rr -p 360

          ipvsadmin -a -f 10 -r 192.168.1.10 -g -w 1      

          在lvs时定义-f10 即可开放两种应用

          功用:将共享一组RS的集群服务统一进行定义

        PCC:

          ipvsadm -A -t 192.168.0.10:0 -s rr -p 3600 

    lvs注意事项

      关于时间同步:各节点间的时间偏差不大于1s,建议使用统一的ntp服务器进行更新时间;

      DR模型中的VIP的MAC广播问题:

      在DR模型中,由于每个节点均要配置VIP,因此存在VIP的MAC广播问题,在现在的linux内核中,都提供了相应kernel 参数对MAC广播进行管理,具体如下:

        arp_ignore: 定义接收到ARP请求时的响应级别;

        0:只要本地配置的有相应地址,就给予响应;

        1:仅在请求的目标地址配置在到达的接口上的时候,才给予响应;DR模型使用

        arp_announce:定义将自己地址向外通告时的通告级别;

        0:将本地任何接口上的任何地址向外通告;

        1:试图仅向目标网络通告与其网络匹配的地址;

        2:仅向与本地接口上地址匹配的网络进行通告;DR模型使用

     

      

      

      

    -------不会开发的运维不是好厨师
  • 相关阅读:
    华为为什么再发布2016年就已经对外露脸甚至商用的欧拉操作系统。
    更安全,仅允许当前用户运行脚本法:vscode运行python时提示无法加载文件xxx.venvScriptsactivate.ps1
    ubuntu下安装odoo 14.0框架
    安利: Swagger工具, 一个REST APIs文档生成工具
    关注Brython 项目,在浏览器中运行python,部分替代javascript
    2021年最火的前端框架
    2021 最受欢迎的前端 八 个 UI 框架
    取代os.path的模块pathlib
    Java中Int转byte分析
    基于Java的时间转换:Date、Timestamp和String时间转化
  • 原文地址:https://www.cnblogs.com/gally-jiang/p/10912324.html
Copyright © 2011-2022 走看看