写点什么

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

  • 2020-03-30
  • 本文字数:2465 字

    阅读完需:约 8 分钟

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

LVS 的工作模式,主要包含三种:DR、Fullnat、Tunnel。

DR

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



可以认为,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 把报文源地址和目的地址还原成 VIP 和 client 地址,回给 client。



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


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

Tunnel

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


Tunnel 模式的原理是,LVS 自己和后端所有的 real server(或 VM 的 host)之间建立了隧道,报文到了 LVS 以后,LVS 根据负载均衡算法,确定分给哪一个 real server,同时确定应该走到哪一个隧道上去。LVS 对于报文是否做了转换?其实标准的 LVS 是没有对报文做转换的,但是部分友商为了能对报文进行分析,做了一些修改。


传统的 LVS,报文目的 IP 依然保持 vip,直接走到 real server,real server 上需要配置 vip,请求受理完成以后,直接可回给 client,不需要经过 LVS;企业改造以后,LVS 会把报文的目的 IP 改成 real server 的 IP 地址,然后再进隧道。real server 不需要再配置 vip,但回包要先送回到 LVS,方便 LVS 对报文进行分析统计。



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


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


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

ECMP 引流

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


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


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


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


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


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


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



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

静态配置等价路由

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


Ip route-static 10.10.10.10 255.255.255.255 192.168.1.10Ip route-static 10.10.10.10 255.255.255.255 192.168.1.11Ip route-static 10.10.10.10 255.255.255.255 192.168.1.12
复制代码


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

动态形成等价路由

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



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


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

ELB 服务

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


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


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


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


下面一张图简单描述:



更多的 ELB 实例的材料可以在链接获取。


对应于传统的四层交换来说,LB 有 GSLB、LSLB、LLB。这里讲的 LVS,替代的就是传统的 LSLB。


那 GSLB 和 LLB 呢?


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


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


本文转载自 华为云产品与解决方案 公众号。


原文链接:https://mp.weixin.qq.com/s/wIMoqfTSjjHCpKXAepXbRg


2020-03-30 10:47931

评论

发布
暂无评论
发现更多内容

Hadoop 生态里,为什么 Hive 活下来了?

大数据技术指南

11月日更

几个高效做事的法则,让你的一天有 25 小时

程序员鱼皮

Java c++ 效率 大前端 高效

3分钟搞定 web人脸识别登录,这样式爱了

程序员小富

Java 编程 人脸识别 springboot 毕业设计

带你了解AKG正反向算子注册+关联流程

华为云开发者联盟

算子 AKG 正向算子 反向算子 算子注册

Apache ShardingSphere 企业行|走进转转

SphereEx

ShardingSphere SphereEx Apache ShardingSphere 转转

Apollo生产环境整合springboot

小鲍侃java

11月日更

微信和QQ这么多群,该如何管理好友关系?

Tom弹架构

Java 架构 设计模式

“低代码”是什么?低代码平台如何助力企业实现数字化转型?

优秀

低代码

微帧Film Grain编码技术,致敬电影胶片颗粒的独特魅力

微帧Visionular

视频编解码

The Data Way Vol.6|我不是开发者,但我依然向往开源

SphereEx

开源 开发者 播客 ShardingSphere SphereEx

HBase 的预分区及 rowkey 设计技巧

五分钟学大数据

11月日更

数据可视化界的小公主:cutecharts,入门+实战应用

老表

Python 数据可视化 11月日更 实战案例 cutecharts

群雄“逐鹿”风采显露:2021信创“大比武”鲲鹏赛道总决赛火热来袭

科技热闻

JAVA应用生产问题排查步骤

热爱java的分享家

Java 架构 程序人生 编程语言 经验分享

Redis为什么需要强一致?技术揭秘秒杀活动如何限流

华为云开发者联盟

redis 开源 华为云 强一致 MySQL组件

微服务的灾难:拆的很爽,但服务太小...

热爱java的分享家

Java 架构 程序人生 编程语言 经验分享

智能云分支(Cloud Intelligent Branch)方案正式发布!

阿里云 云网络 智能化 发布会

Aeron是如何实现的?—— Ipc Publication

BUG侦探

Aeron Ipc Publication

阿里云发布云原生加速器,携手生态企业拥抱数字时代

阿里巴巴云原生

阿里云 云原生 企业 合作伙伴 创投

解决 Serverless 落地困难的关键,是给开发者足够的“安全感”

阿里巴巴中间件

阿里云 Serverless 技术 云原生 中间件

百度Q3财报:百度智能云同比增长73%,稳居中国四朵云之一

百度大脑

人工智能

LifseaOS 悄然来袭,一款为云原生而生的 OS

阿里巴巴云原生

阿里云 云原生 操作系统 LifseaOS

青海西宁市正规等保测评公司名单汇总-行云管家

行云管家

网络安全 等级保护 等保测评 过等保

安全稳定高效节约的云运维软件哪个好?咨询电话多少?

行云管家

云计算 公有云 混合云 云管平台 云运维

Python代码阅读(第62篇):列表是否包含相同元素判断

Felix

Python 编程 列表 阅读代码 Python初学者

CRM与ERP之争,谁能在“企业数字化转型”的趋势中胜出?

优秀

低代码 CRM ERP

恒源云(GPUSHARE)_云GPU服务器如何使用VSCode?

恒源云

人工智能 深度学习

驴行千里不洗沙尘,尚硅谷Spark性能调优教程发布

编程江湖

大数据 spark

用户增速与体验质量并存,博睿数据携阿里云发布双十一电商网站用户体验报告

博睿数据

论文解读丨无参数的注意力模块SimAm

华为云开发者联盟

卷积神经网络 视觉 注意力模块 SimAm 神经元

Linux一学就会之Linux环境搭建并安装VMware虚拟机

学神来啦

Linux centos 运维 vmware

LB服务:软LB的服务能力(下)_语言 & 开发_华为云产品与解决方案_InfoQ精选文章