LB(LBaaS)及Load Balance as a Service是 Neutron 提供的一项高级网络服务。

LBaaS 允许租户在自己的网络中创建和管理 load balancer,load balancer 可以说是分布式系统中比较基础的组件,它接收前端发来的请求,然后将请求按照某种均衡策略转发给后端资源池中的某个处理单元,以完成处理。

load balancer 可以实现系统高可用和横向扩展。

LBaaS 有三个主要的概念: Pool Member,Pool 和 Virtual IP

Pool Member
Pool Member 是 layer 4 的实体,拥有 IP 地址并通过监听端口对外提供服务。
例如 Pool Member 可以是一个 web server,IP 为 172.16.100.9 并通过 80 端口提供 HTTP 服务。

Pool
Pool 由一组 Pool Member 组成。 这些 Pool Member 通常提供同一类服务。
例如一个 web server pool,包含: web1:172.16.100.9:80 web2:172.16.100.10:80

Virtual IP
Virtual IP 也称作 VIP,是定义在 load balancer 上的 IP 地址。
每个 pool member 都有自己的 IP,但对外服务则是通过 VIP。

load balancer 负责监听外部的连接,并将连接分发到 pool member。
外部 client 只知道 VIP,不知道也不需要关心是否有 pool 或者有多少个 pool member。

OpenStack Neutron 目前默认通过 HAProxy 软件来实现 LBaaS。
HAProxy 是一个流行的开源 load balancer。
Neutron 也支持其他一些第三方 load balancer。

下图展示了 HAProxy 实现 load balancer 的方式。

左图是 client 发送请求到 web server 的数据流:
1. Client 10.10.10.4 通过浏览器访问服务器的外网 IP 10.10.10.7。

2. 请求首先到达路由器,将目的地址设置为服务器的内网 VIP 172.16.100.11

3. VIP 设置在 load balancer 上,load balancer 收到请求后选择 pool member WEB1,
将数据包的目的 IP 设为 WEB1 的地址 172.16.100.9。

4. 在将数据包转发给 WEB1 之前,load balancer 将数据包的源 IP 修改为自己的 VIP 地址 172.16.100.11,
其目的是保证 WEB1 能够将应答数据发送回 load balancer。

5. WEB1 收到请求数据包。

右图是 web server 应答的数据流:

1. WEB1 将数据包发送给 load balancer。

2. load balancer 收到 WEB1 发回的数据后,将目的 IP 修改为 Client 的地址 10.10.10.4。
同时也将数据包的源 IP 修改为 VIP 地址 172.16.100.11,保证 Client 能够将后续的数据发送给自己。

3. load balancer 将数据发送给路由器。

4. 路由器将数据包的原地址恢复成服务器的外网 IP 10.10.10.7,然后发送给 Client。

5. Client 收到应答数据。

以上就是 Load Balance as a Service 的工作原理。

 

LB的更多相关文章

  1. LB负载均衡之Nginx-Proxy

    LB负载均衡之Nginx-Proxy Nginx 反向代理及负载均衡引用实战 Nginx反向代理的原理优点:      Nginx proxy(反向代理)作为Nginx的重要功能,使用nginx pr ...

  2. LB(Load balance)负载均衡集群--{LVS-[NAT+DR]单实例实验+LVS+keeplived实验} 菜鸟入门级

    LB(Load balance)负载均衡集群 LVS-[NAT+DR]单实例实验 LVS+keeplived实验 LVS是Linux Virtual Server的简写,意即Linux虚拟服务器,是一 ...

  3. LB 简单比较 – F5、NetScaler、LVS、Nginx、Haproxy

    LB 简单比较 – F5.NetScaler.LVS.Nginx.Haproxy 负载均衡技术是构建大型网站必不可少的架构策略之一.它的目的是,把用户的请求分发到多台后端的设备上,用以均衡服务器的负载 ...

  4. LB负载均衡集群及NAT模式配置

    一.LB(load balance)负载均衡集群 负载均衡集群常用的有: 1.软件实现的 nginx(工作在OSI第七层应用层) lvs+keepalived(工作在OSI第四层传输层) 2.硬件实现 ...

  5. 浅谈C++ Lambda 表达式(简称LB)

    C++ 11 对LB的支持,对于喜欢Functional Programming的人来说,无疑是超好消息.它使得C++进入了和C#,JavaScript等现代流行的程序设计语言所代表的名人堂. 不熟悉 ...

  6. LB集群

    LB集群   1. LB.LVS介绍LB集群是load balance 集群的简写,翻译成中文就是负载均衡集群LVS是一个实现负载均衡集群的开源软件项目 LVS架构从逻辑上可分为调度层(Directo ...

  7. 混合使用Azure LB和ILB访问相同web服务(3)

    接下来我们来配置Azure Load balancer,就是面向公网的负载均衡器: 1.在该测试中,为了保持内网访问和外网访问一样的体验,本地端口和public端口和ILB一样,同样是80: PS C ...

  8. 混合使用Azure LB和ILB访问相同web服务(1)

    在经典的使用场景中,我们一般使用AzureLoadBalancer来面向公网提供负载均衡服务,而使用Azure Internal Load Balancer提供内部那些不愿意将服务暴露给公网的服务,比 ...

  9. 数据结构中La表的数据合并到Lb表中

    实验描述:La表中的数据为(3,5,8,11)  Lb 表中的数据为(2,6,8,9,11,15,20) 将La表中的数据而不存在Lb表的数据插入到Lb表中,从而实现并集操作. 出现的问题:最后实现的 ...

  10. 删除Lb重复的数,用La输出(顺序表)

    #include<stdio.h> typedef int A; const int LIST_INIT_SIZE=100; const int LISTINCRMENT=10; type ...

随机推荐

  1. 复合词(Compound Words, UVa 10391)(stl set)

    You are to find all the two-word compound words in a dictionary. A two-word compound word is a word i ...

  2. Spring ApplicationListener配合-D实现参数初始化

    ApplicationListener是SpringBoot的监听器,提供了四种事件: ApplicationStartedEvent :spring boot启动开始时执行的事件 Applicati ...

  3. data-ng-hide 指令

    <!DOCTYPE html><html><head><meta http-equiv="Content-Type" content=&q ...

  4. rank() over,dense_rank() over,row_number() over的区别

    rank() over,dense_rank() over,row_number() over的区别 1.rank() over:查出指定条件后的进行排名.特点是,加入是对学生排名,使用这个函数,成绩 ...

  5. 寻找AP数

    题目背景 正整数n是无穷的,但其中有些数有神奇的性质,我们给它个名字--AP数. 题目描述 对于一个数字i是AP数的充要条件是所有比它小的数的因数个数都没有i的因数个数多.比如6的因数是1 2 3 6 ...

  6. Cent-OS——服务状态

    查看MySQL状态: systemctl start mysqld #启用 systemctl stop mysqld #关闭 systemctl restart mysqld #重启MySQL服务 ...

  7. ATX 浅谈自动化测试工具 python-uiautomator2

    1.简介 python-uiautomator2是一个自动化测试开源工具,仅支持Android平台的原生应用测试. 2.支持平台及语言 python-uiautomator2封装了谷歌自带的uiaut ...

  8. JAVAOOP I/O

    程序的主要任务就是操作数据,通过允许程序读取文件的内容或向文件写入数据,可以使程序应用更加广泛. I/O(input/output) 在不同操作系统之下,所占的字节数也不同,一般认为 8.1.1使用F ...

  9. 为何要搭建ES6开发环境,如何搭建ES6开发环境?

    1.ES6需要搭建开发环境,原因是现在的Chrome浏览器已经支持ES6了,但是有些低版本的浏览器还是不支持ES6语法的,这就需要我们把ES6的语法自动转变成ES5的语法.   2.开始搭建环境   ...

  10. Python的Bottle框架中实现最基本的get和post的方法的教程

    这篇文章主要介绍了Python的Bottle框架中实现最基本的get和post的方法的教程,Bottle框架在Python开发者中的人气很高,需要的朋友可以参考下 1.GET方式: # -*- cod ...