欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页  >  科技

lvs简介

程序员文章站 2022-04-12 15:33:22
Linux集群 在介绍lvs之前,我们先来聊聊Linux集群。Linux集群(cluster)就是一组Linux计算机,它们作为一个整体向用户提供一组网络资源,这些单个的计算机系统就是集群的节点 (node)。一个理想的集群,用户是不会意识到集群系统底层的节点的,在他们看来,集群是一个系统,而非多个 ......

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简介

  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简介

  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

  lvs简介

     (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模型使用