LB服务,软LB的服务能力(下)

举报
Harvey_Zhao 发表于 2018/08/22 23:57:38 2018/08/22
【摘要】 现在常用的LB软件,主要是LVS和nginx。普通情况下,LVS主要负责四层负载均衡,nginx负责七层。当然,业界也有友商基于LVS做出了七层负载均衡。本篇主要讲一下LVS的工作模式及各种模式的缺陷。并试图描述一下ELB服务的方案。

现在常用的LB软件,主要是LVSnginx。普通情况下,LVS主要负责四层负载均衡,nginx负责七层。当然,业界也有友商基于LVS做出了七层负载均衡。本篇主要讲一下LVS的工作模式及各种模式的缺陷。并试图描述一下ELB服务的方案。

 

LVS的工作模式,主要包含三种:DRfullnattunnel

 

DR

DR模式下,LVS上会配置服务虚IP,同时要求后端的real server上也会配置该IP地址,即LVS与后端服务器处于同一个网段。当client有报文发送到LVS的时候,LVS不会修改报文的IP地址,而是修改了报文的目的mac地址为real server的地址,后往后端server上送。real server回包直接回给网关,后发给client,不再经过LVS

                                              image.png

 

可以认为,DR是一种基于后端mac地址的负载分发方式,LVS会将报文按照负载均衡算法,轮询给后端的不同mac地址。

 

DR模式的好处就是,回包不经过LVS,回城可以达到比较高的性能。缺点是,LVS与后端要求在一个二层网络中,部署不太灵活。

 

Fullnat

Fullnat模式下,服务虚IP配在LVS上,报文路由到LVS以后,LVS先根据负载均衡算法确定分给哪一个后端real server,然后对报文的源地址和目的地址都做了转换。目的地址改成real server的地址,源地址改成LVS自身地址。

报文路由到real server以后,real server回包报文目的地址为LVS的地址,报文会回到LVS上。LVS把报文源地址和目的地址还原成VIPclient地址,回给client

image.png

由于报文在LVS出做了fullnat后,按照IP地址寻址转发,所以后端real server不再需要与LVS在同一个二层网络里面,支持更灵活的组网方案。

fullnat模式的缺点,LVS做了源地址转换以后,服务端无法看到访问者的源IP,将无法针对访问者进行分析。而当今大多数的游戏等应用,都需要知道是谁访问的自己,做客户来源分析等。而源地址可见,却正是DR模式的优点。

 

Tunnel

前面说了,DR模式的优点是源地址可见,fullnat模式的优点是可以拉远部署,那是否存在一种方式,技能拉远部署又能保持源地址可见?当然有,那就tunnel模式。

Tunnel模式的原理是,报文到了LVS以后,LVS根据负载均衡算法,确定分给哪一个real server后,便将报文目的地址改成了real server的地址,源地址保持不变。LVS自己和后端所有的real server二层内(或VMhost)之间建立了隧道,报文在出LVS之间会匹配隧道规则进入相应的隧道到达可直接到real server的某个点上(一般是VMhost主机或者是real server自身)。Real server处理完成以后,回包从原先的隧道走回到LVS上。

image.png

在公有云上,一般LVS是跟host主机的VTEP IP建立隧道。

而隧道的选择,一般选择GRE隧道或者是VXLAN隧道。不同的友商根据自己的技术能力和场景不同,可以选择不同的协议。华为云选择什么?自然是VXLAN

 

网上介绍LVS的文档基本上将到这里就完了,但作为一个物理网络虚拟网络都有一丁点认识的小兵,笔者在此再给各位读者吐槽一下LVS的一个坑人的地方。

 

ECMP引流

传统的四层交换,基本上都是主备部署。主备之间跑VRRP,对于上层路由设备来说,发送ARP请求,是可以很明确的学习到四层交换的实IP或者是虚IPmac地址,进而指导传统的路由交换,将报文引给四层交换。

主备部署,平时工作的就只有主一台设备,这也是我们吐槽硬件设备的一个地方——无法平滑拓展。但是,LVS如何解决这个问题呢?LVS如果再主备部署,性能只会比硬件更加差。Linux程序员设计出来的负载均衡,那当然是集群部署了。

 

可是,在LVS集群部署的时候,多台LVS的配置完全一致,虚IP地址都是一样的,如何规避如下两个问题:

1、  IP地址/mac地址在一个二层网络内部冲突如何解决?

2、  上层设备,怎么知道应该路由给谁?

 

二层网络内,服务虚IP对于LVS来说,并不是接口IP,本身是不会发送ARP也不会响应ARP。避免IP地址冲突的问题,当然,也意味着二层内部是无法访问到虚IP的。

所有访问LVSIP的流量,都需要三层转发,而上层路由设备,需要通过等价路由ECMP给多台LVS分流。

image.png

如图,各个LVS服务器除了本身有相同的虚IP以外,还需要每台设备有唯一的接口IP地址,上层的网关设备上,根据路由将报文发送给接口IP。路由形成的方式有两种:静态配置等价路由、LVS与网关建立动态路由形成等价路由。

 

静态配置等价路由

如上图,可以手工在网关设备上配置静态路由,以指导流量转发

Ip route-static 10.10.10.10 255.255.255.255 192.168.1.10

Ip route-static 10.10.10.10 255.255.255.255 192.168.1.11

Ip route-static 10.10.10.10 255.255.255.255 192.168.1.12

 

当然,静态路由上需要增加NQA探测,以使得某台LVS故障以后,可以快速撤销对应的路由。

 

动态形成等价路由

LVS和网关设备之间建立动态路由协议邻居,LVS将本地虚IP地址通告给网关,网关上行成多条等价路由指导转发。

image.png

如图,LVS与网关之间跑OSPF或者BGP,将10.10.10.10IP地址同时通告给网关,网关会形成3条等价路径。当某台设备故障时,协议之间心跳探测失败,路由自动撤销。

 

只有实现了ECMP引流以后,LVS才能横向拓展,通过N台设备的组合,实现亿级并发能力。

 

 

ELB服务

要使用华为云的ELB服务,有几个概念需要先理解一下

华为云的ELBEIP是分开的,EIP申请了以后,可以挂到ECS上,也可以挂到ELB上,还可以挂到NAT网关上

申请ELB实例,需要创建监听器,监听器为ELB实例所对外提供服务的特性特点,如分发协议,保持方式等

对于后端服务器的检查,需要配置检查类型、协议、周期等。后端检查的方式

 

下面一张图简单描述

image.png

更多的ELB实例的材料可以在下面连接获取

https://static.huaweicloud.com/upload/files/pdf/20180115/20180115114304_63601.pdf

 

 

对应于传统的四层交换来说,LBGSLBLSLBLLB。这里讲的LVS,替代的就是传统的LSLB

GSLBLLB呢?

 

GSLB通过智能DNS来取代,华为的智能DNS还在开发中,敬请期待

 

LLB,通过BGP IP就已经可以实现了,不需要额外的负载均衡,下一期我们重点讲解一下公有云的动态BGP和静态BGP的概念。


【版权声明】本文为华为云社区用户原创内容,转载时必须标注文章的来源(华为云社区)、文章链接、文章作者等基本信息, 否则作者和本社区有权追究责任。如果您发现本社区中有涉嫌抄袭的内容,欢迎发送邮件进行举报,并提供相关证据,一经查实,本社区将立刻删除涉嫌侵权内容,举报邮箱: cloudbbs@huaweicloud.com
  • 点赞
  • 收藏
  • 关注作者

评论(0

0/1000
抱歉,系统识别当前为高风险访问,暂不支持该操作

全部回复

上滑加载中

设置昵称

在此一键设置昵称,即可参与社区互动!

*长度不超过10个汉字或20个英文字符,设置后3个月内不可修改。

*长度不超过10个汉字或20个英文字符,设置后3个月内不可修改。