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

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以后,LVS根据负载均衡算法,确定分给哪一个real server后,便将报文目的地址改成了real server的地址,源地址保持不变。LVS自己和后端所有的real server二层内(或VM的host)之间建立了隧道,报文在出LVS之间会匹配隧道规则进入相应的隧道到达可直接到real server的某个点上(一般是VM的host主机或者是real server自身)。Real server处理完成以后,回包从原先的隧道走回到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.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地址通告给网关,网关上行成多条等价路由指导转发。

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

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

ELB服务

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

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

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

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

下面一张图简单描述

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

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

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

那GSLB和LLB呢?

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

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

来源:华为云社区  作者:Harvey_Zhao

LB服务,软LB的服务能力(下)相关推荐

  1. nacos+gateway服务发现lb路由报503 Service Unavailable

    问题产生背景 使用 Nacos 作为注册中心,gateway 作为网关,网关通过lb的方式进行服务路由,在网关报503服务不可用Service Unavailable. 现象版本 SpringClou ...

  2. 技术硬实力+服务软实力,声网助力出海企业破解水土不服难题

    泛娱乐一直是出海领域备受关注的赛道,随着全球疫情常态化,宅家娱乐需求呈现持续增长态势,以实时音视频技术为基础的社交.短视频.直播等泛娱乐行业迎来又一出海窗口期.据 App Annie 近期发布的202 ...

  3. 华为推出地图服务 助力开发者强化地图能力

    自去年华为开发者大会以来,华为地图服务(HUAWEI Map Kit)备受关注.华为地图服务上线4个月,其丰富的地图呈现.多种路径规划.海量位置搜索.全球化覆盖等丰富的功能可以满足社交.电商.运动健康 ...

  4. 学微服务必经之路——Nacos新手入门(下)

    一位爱好技术的橘右京的哥哥橘左京 学微服务必经之路--Nacos新手入门(下) 1.服务发现 1.1 什么是服务发现 1.2 主流服务发现与配置中心对比 1.3 SpringCloud服务协作流程 1 ...

  5. PingCAP Clinic 服务:贯穿云上云下的 TiDB 集群诊断服务

    伴随着 TiDB 6.0 的发布,PingCAP Clinic 服务也揭开了她的面纱,提供 Tech Preview 版本给广大用户试用. Clinic 服务源于 TiDB Cloud, 以智能诊断提 ...

  6. 微服务全链路灰度新能力

    背景 微服务体系架构中,服务之间的依赖关系错综复杂,有时某个功能发版依赖多个服务同时升级上线.我们希望可以对这些服务的新版本同时进行小流量灰度验证,这就是微服务架构中特有的全链路灰度场景,通过构建从网 ...

  7. 解决通过Nginx转发的服务请求头header中含有下划线的key,其值取不到的问题

    解决通过Nginx转发的服务请求头header中含有下划线的key,其值取不到的问题 参考文章: (1)解决通过Nginx转发的服务请求头header中含有下划线的key,其值取不到的问题 (2)ht ...

  8. 服务中添加mysql服务_Windows平台下在服务中添加MySQL

    widows下查看服务 1.桌面计算机-->右键-->管理-->计算机管理(本地)--->服务和应用程序-->服务 2.运行 中输入 services.msc 在服务中添 ...

  9. RHEL4- SAMBA服务(四)在x-window下图形界面简单搭建samba服务器

    RHEL4- SAMBA服务(四)在x-window下图形界面简单搭建samba服务器       在<RHEL4- SAMBA服务(一)samba服务的安装与启动>中我讲了如何安装和启动 ...

  10. 微服务架构设计模式~根据业务能力进行服务拆分

    业务能力定义了一个组织的工作 组织的业务能力通常是指这个组织的业务是做什么,它们通常是稳定的. 与之相反,组织采用何种方式来实现它的业务能力,是随着时间不断变化的. 识别业务能力 一个组织有哪些业务能 ...

最新文章

  1. Count on a tree
  2. 计算机服务管理器延迟启动项,开机延时启动程序
  3. 关于redis的pipline和lua脚本
  4. hdu 2141 Can you find it(二分)
  5. 快速ping_PING你真的会用么?
  6. 我的世界服务器修改地图,《我的世界手机版》地图编辑器介绍 怎么修改地图信息...
  7. 解决mac上复制粘贴失效问题
  8. Python中filter筛选函数匿名参数问题
  9. Linux内核子系统---内存管理子系统、进程管理子系统
  10. 5 行 Python 代码就能让你的电脑永不息屏!
  11. 2022年导游资格考试测试题及答案(多选题)
  12. BSCI验厂审核知识点
  13. 重磅----股票风险指标计算,附程序,百度网盘链接
  14. 【单片机】心形流水灯の制作指南(保姆级)
  15. 云制造,且慢人云亦云
  16. c和python的优缺点_Python语言有什么优缺点?
  17. html编码后台转换,html unicode编码转换方法
  18. python自定义包出现ModuleNotFoundError: No module named ‘package_name‘故障
  19. 更优雅的编写JavaScript,使用这些函数秒变大神
  20. SQLServer将多行数据合并成一行多列

热门文章

  1. unix mysql备份_数据库操作 备份篇 unix
  2. mysql 自动执行语句_MYSQL 定时自动执行任务
  3. 交互式多模型_论文深度提升的万金油方法——多属性决策 Ⅱ
  4. gels imagej 图片处理_如何用ImageJ进行粒度分析
  5. JAVA中fish什么意思,fish是什么意思_fish的翻译_音标_读音_用法_例句_爱词霸在线词典...
  6. 如何感性地理解EM算法?
  7. 【解决方案】Android图片加载中drawable等图片资源报错,提示找不到该资源
  8. Ubuntu apt-get方式安装Subversion
  9. 基础编程题目集 6-3 简单求和 (10 分)
  10. c语言解三元一次方程组_七年级下学期《8.3 一元一次不等式组》2020年高频易错题集...