Octavia 简介

Octavia is an open source, operator-scale load balancing solution designed to work with OpenStack.

自 Pike 以来 OpenStack 推荐使用 Octavia 代替 neutron-lbaas extension 作为 Load Balancing as a Service 的首选方案,并在 Queens 中将 neutron-lbaas 标记为废弃 —— Neutron-lbaas is now deprecated。

Octavia 在整个 OpenStack 堆栈中处于 Networking 的模块,提供数据流量分发功能。

社区推崇 Octavia 的原因有很多,它解决了 neutron-lbaas 遗留的历史包袱,能够对外提供独立而稳定的 API。简单的说,社区认为 neutron-lbaas 使 Neutron 的项目管理变得拖沓,LBaaS 应该作为一个独立项目得到长足的发展,事实也是如此。

《Octavia 分析与实现》系列基于 OpenStack Rocky 版本,主要记录、分析了 Octavia 作为 OpenStack LBaaS 的抽象设计,开发性设计及架构代码实现,从中感受社区开发者们对 Octavia 的寄予。

本文作为系列的开篇,希望能够从宏观的角度鸟瞰 Octavia 的全貌,由面及点,更利于后续理解 Octavia 的底层实现细节。

基本对象概念

LBaaS:对于 OpenStack  云平台而言,LB(负载均衡)被作为一种服务提供给用户,用户得以按需地获取可配置的业务负载均衡方案,这就是所谓 Load Balancing as a Service。

LoadBalancer:负载均衡服务的根对象,用户对负载均衡的定义、配置和操作都基于此。

VIP:与 LoadBalancer 关联的虚拟 IP 地址,每个 LoadBalancer 最起码有一个 VIP 作为外部对后端业务集群访问的标准入口。

Listener:下属于 LoadBalancer 的监听器,可配置监听外部对 VIP 的访问类型(e.g. 协议、端口)。

Pool:后端的真实业务云主机集群域,一般的,用户会根据云主机的业务类型进行划分。

Member:业务云主机,下属于 Pool,对应传统负载均衡体系中的 Real Server。

Health Monitor:挂靠于 Pool,周期性对 Pool 中的 Member(s) 进行健康检查。

L7 Policy:七层转发策略,描述了数据包转发的动作(e.g. 转发至 Pool,转发至 URL 或拒绝转发)。

L7 Rule:七层转发规则,下属于 L7 Policy,描述了数据包转发的匹配域(e.g. 转发至 Pool 中所有以 webserver 开头的 Members)。

图1. Web 动静页面分离部署架构

图 1 是一个简易的,应用负载均衡技术实现 Web 动静页面分离的部署模型,辅助理解上述基础术语以及每个对象在系统中的位置。

网络架构

图2. Octavia 网络架构图

图 2 是一个标准的 Octavia Amphorae LoadBalancer Provider 网络架构,吃透这张图 Octavia 就算看明白一半了。

Amphora(e):实体为云主机,作为负载均衡器软件 HAProxy 和高可用支持 Keepalived 的运行载体。同时也运行着 amphora-agent service 对外提供 REST API。是 Octavia 的 Default Loadbalancer Provider。

OpenStack Management/API Network:OpenStack 管理网,上面运行着 Octavia、Nova、Neutron、Barbican 等项目服务。

LB Management Network:打通 OpenStack Management/API Network  和 Amphorae,是 Octavia Services 与 amphora-agent service 通信的网络,所以也是 Amphorae 的初始挂靠点。Admin Project 可见。

VIP Network:作为 VIP Pool 的网络,东侧接入 Amphorae 由 Keepalived 实现的 VRRP Protocol 支持具有高可用特性的虚拟 IP 地址。

Tenant Network:业务云主机所处的网络,东侧接入 Amphorae  由 HAProxy 为业务云主机提供负载均衡数据流量分发服务。普通租户可见。

NOTE 1其中 VIP Network 和 Tenant Network 可以是同一个网络,但在生产环境中,我会建议分开,更有利于针对施加不同级别的安全策略,划分网络安全隔离域。

NOTE 2:Amphorae LoadBalancer Provider 依旧是 Rocky 版本官方推荐的实现,其他的 neutron-lbaas drivers 一直碍于缺少人手,迟迟未能迁移。所以,后续的内容依旧围绕 Amphorae 展开。

基本使用流程

图3. 初始网络拓扑图

通过 Dashboard 创建一个 Loadbalancer

  • Step 1. 设定 loadbalancer 的 VIP。不指定则由 DHCP 分配。

  • Step 2. 设定 listener 监听的协议及端口。监听 http://<VIP>:8080/ 的外部访问。

  • Step 3. 设定 pool 的负载均衡算法。这里选择 RR 轮询分发算法。

  • Step 4. 设定 pool 下属的 members。设定 members 需要指定端口和权重,前者组成了接受数据转发的 socket,后者表示分发的优先级。

  • Step 5. 设定 health monitor 的健康检查规则。如果 members 出现 PING 不同的情况,则会被标记为故障,不再接受分发。

创建了 lb-1 之后的网络拓扑变更如图 4。可以看出,Amphorae 在之中起到了关键作用,通过端口挂载的方式将属于 3 个不同网络中的 VIP、Members 以及 Octava Services 等对象 “串连” 起来,Amphorae(双耳壶)也因此而得名。

图4. 创建 LoadBalancer 之后的网络架构图

再补充一下与 Octavia 相关的 image 和 security group 的内容。Launch Amphora Instance 需要使用特定的镜像,Octavia 提供了专门的镜像制作工具。暂支持 CentOS 和 Ubuntu 两种操作系统,也支持设定 password,不过在生产环境中还是建议使用 keypair 进行登录。至于安全组,从图 5 可见 Amphora 的安全组最起码要满足 ingress:TCP/9443 和 egress:UDP/5555 两条规则。

图5. 简易的 Octavia 通讯模型

使用 Amphora Image

  • Step 1. 上传 image

$ /opt/rocky/octavia/diskimage-create/diskimage-create.sh -i ubuntu
$ openstack image create amphora-x64-haproxy \--public \--container-format=bare \--disk-format qcow2 \--file /opt/rocky/octavia/diskimage-create/amphora-x64-haproxy.qcow2 \--tag amphora
  • Step 2. 配置使用

[controller_worker]
amp_image_owner_id = <amphora-image id>
amp_image_tag = amphora
...

使用 Amphora Security Group

  • Step 1. 创建安全组

$ openstack security group create amphora-sec-grp --project <admin project id>
$ openstack security group rule create --remote-ip "0.0.0.0/0" --dst-port 9443 --protocol tcp --ingress --ethertype IPv4 --project <admin project id> amphora-sec-grp
$ openstack security group rule create --remote-ip "0.0.0.0/0" --dst-port 5555 --protocol udp --egress --ethertype IPv4 --project <admin project id> amphora-sec-grp
  • Step 2. 配置使用

[controller_worker]
amp_secgroup_list = <amphora-sec-grp id>
...

软件架构

 图6. Octavia 软件架构图

Octavia 的软件架构设计依旧是典型的「生产者-消费者」异步通讯模型,API 与 Worker 分离再通过 MessageQueens/DB 中间件进行通信。

Neutron Octavia Driver:neutron-lbaas drivers 之一,支持 LBaaS v2 API。如果用户希望在版本较旧(>Pike)的 OpenStack 中集成新版本的 Octavia 可以通过 Octavia Driver 来集成。

Octavia API:Rocky 版本默认启用 Octavia v2 API,是 LBaaS v2 API 的超集,完全向后兼容。 还是应用了新项目常见的 Pecan+WSME Web 框架。

Queue:RPC 通信队列,应用了 cotyledon+oslo_messaging 框架,对接 Octavia API 和 Octavia Controller Worker。

Octavia Controller Worker:Octavia 的核心,底层采用 Driver+Plugin 的设计来满足 OpenStack 所代表的开放性。底层抽象了 Amphora、Certificate、Compute、Network 四个驱动工具,用于支撑上层的 3 大功能模块。

  • Octavia Worker:负责完成 API 请求,是 Octavia 主干功能的执行者。

  • Health Manager:负责保证 LoadBalancer Provider 的高可用

  • Housekeeping Manager:名副其实的 Housekeeping(家政),保障 Octavia Services 清洁的运行环境。

服务进程清单与代码结构

服务进程清单和代码结构就是软件架构设计的具象表现。

  • octavia-api service

  • octaiva-worker service

  • octavia-health-manager service

  • octavia-housekeeping service

[root@control01 octavia]# tree -L 1 -C
.
├── amphorae
├── api
├── certificates
├── cmd
├── common
├── compute
├── controller
├── db
├── distributor
├── hacking
├── i18n.py
├── __init__.py
├── network
├── opts.py
├── policies
├── tests
└── version.py

amphora:AmphoraAPIClient 和 amphora-agent 的实现

api:Octavia API 的实现

certificates:CA 认证功能的实现,支持 LB Management Network 的安全通信

compute:实现了 Compute Driver 的抽象和 novaclient 的封装

network:实现了 Network Driver 的抽象和 neutronclient 的封装

db:ORM 层的封装实现

policies:定义了 API 请求的鉴权策略

[root@control01 octavia]# tree controller/ -L 2 -C
controller/
├── healthmanager
│   ├── health_drivers
│   ├── health_manager.py
│   ├── __init__.py
│   └── update_serializer.py
├── housekeeping
│   ├── house_keeping.py
│   └── __init__.py
├── __init__.py
├── queue
│   ├── consumer.py
│   ├── endpoint.py
│   ├── event_queue.py
│   └── __init__.py
└── worker├── amphora_rate_limit.py├── controller_worker.py├── flows├── __init__.py├── tasks└── task_utils.py

healthmanager:Health Manager 的实现

housekeeping:HouseKeeping Manager 的实现

queue:内部 RPC 通信实现

  • api/handlers/queue/producer.py

  • controller/queue/consumer.py

worker:Octavia Worker 的实现,应用了 TaskFlow 框架

  • flows:TaskFlow 中 Flows 的封装

  • tasks:TaskFlow 中 Tasks 的封装

TaskFlow is a Python library that helps to make task execution easy, consistent and reliable. A library to do [jobs, tasks, flows] in a highly available, easy to understand and declarative manner (and more!) to be used with OpenStack and other projects.

显然,对于 Octavia 而言 TaskFlow 是一个非常关键的工具。TaskFlow 能够控制代码中任务的暂停、重启、回滚以及恢复,简单高效的保证了长业务流程执行的可靠性和一致性。简而言之,将多个 Tasks 以特定的 Flow(e.g. 线性流、并行流、图流)执行起来,就是 Task-Flow。

TaskFlow 的应用场景有很多,主要特征是 “流程长”、“调用复杂”、“有资源状态机” 等,Cinder create volume 的实现就是一次典型的应用。当然了,Octavia 也算一个。而且 Octavia 可以说是将 TaskFlow 的特性发挥到了极致,这个问题我们在后面的底层实现篇中再继续聊。

最后

最后简单终结一下 Octavia 的架构设计,作为独立项目,Octavia 继承了 OpenStack 一贯优秀的开放性,在关键的 LB Provider、Certificates、Compute 和 Network 这些外部支撑节点都进行了高度抽象,使 Vendors 和 Users 有可能通过简单的开发接入现有的基础设施。这无疑是 Octavia 甚至 OpenStack 受到欢迎的原因之一。

下一篇《OpenStack Rocky Octavia 的实现与分析(一)创建 LoadBalancer 的流程》即将更新,敬请期待!

>>  关于作者:九州云网络团队

> >  关于『 Linux宝库 』:欢迎关注『Linux宝库』微信公众号,这里每天发布最新的开源人物和开源事件。谨以此号记录Linux和开源业界的点点滴滴,为开源爱好者和从业者点亮人生!

- END -

为开源爱好者和从业者点亮人生!

长按二维码关注我们

OpenStack Rocky Octavia 的实现与分析(零)架构简介相关推荐

  1. 【Openstack】实录手动部署Openstack Rocky 双节点(5)- Neutron

    第一篇:手动部署Openstack Rocky 双节点(1)- 基础服务 上一篇:手动部署Openstack Rocky 双节点(4)- Nova 下一篇:手动部署Openstack Rocky 双节 ...

  2. 【Openstack】实录手动部署Openstack Rocky 双节点(3)- Glance

    第一篇:实录手动部署Openstack Rocky 双节点(1)- 基础服务 上一篇:实录手动部署Openstack Rocky 双节点(2)- Keystone 下一篇:手动部署Openstack ...

  3. 【Openstack】实录手动部署Openstack Rocky 双节点(2)- Keystone

    第一篇:实录手动部署Openstack Rocky 双节点(1)- 基础服务 上一篇:实录手动部署Openstack Rocky 双节点(1)- 基础服务 下一篇:手动部署Openstack Rock ...

  4. 创纪录!浪潮云海完成OpenStack Rocky版本全球最大规模单一集群测试!

    戳蓝字"CSDN云计算"关注我们哦! 云计算的概念已悄然走过十余年,在助力新兴技术发展的同时,自身也在历经变革.开源作为推动云计算发展的强大动力,于云计算而言,不仅是技术变革的历史 ...

  5. 【Openstack】实录手动部署Openstack Rocky 双节点(6)- Horizon

    第一篇:手动部署Openstack Rocky 双节点(1)- 基础服务 上一篇:手动部署Openstack Rocky 双节点(5)- Neutron 下一篇:无 文章目录 参考文档 关于机器名变更 ...

  6. 【Openstack】实录手动部署Openstack Rocky 双节点(4)- Nova

    第一篇:实录手动部署Openstack Rocky 双节点(1)- 基础服务 上一篇:实录手动部署Openstack Rocky 双节点(3)- Glance 下一篇:实录手动部署Openstack ...

  7. 【Openstack】实录手动部署Openstack Rocky 双节点(1)- 基础服务

    第一篇:本文 上一篇:无 下一篇:实录手动部署Openstack Rocky 双节点(2)- Keystone 文章目录 参考文档 虚拟机准备 OS准备 controller虚拟机 compute虚拟 ...

  8. Openstack rocky 部署四: neutron 部署与验证(控制节点)

    Openstack 云计算(二): Openstack Rocky部署四 neutron 部署与验证 (控制节点) 标签(空格分隔): openstack系列 一:Neutron概述 二:Neutro ...

  9. openstack冷迁移/Resize源码分析(二)

    接上一篇 openstack冷迁移/Resize源码分析(一) 执行冷迁移/Resize /nova_queens/nova/compute/manager.py @wrap_exception()@ ...

  10. CentOS7.5安装OpenStack Rocky版本

    CentOS7.5安装OpenStack Rocky版本 刚刚更新了版本,就忍不住想安装一下,因时间有限,只安装到了dashboard 搭建过程中,跟着官网走了遍流程,基本上没啥问题 建议还是跟着官网 ...

最新文章

  1. Makefile 选项 CFLAGS 、LDFLAGS 、LIBS
  2. 数据库从表中随机选择一行数据
  3. 浅析网站建设与设计有哪些需要引起重视的行业规范
  4. 028_Alert警告
  5. Hadoop二次开发项目案例方案汇总
  6. PHP中array_merge函数与array+array的区别
  7. ssh(Spring+Spring mvc+hibernate)简单增删改查案例
  8. 前端学习(2242)以组件方式创建UI
  9. rabbitmq技术的一些感悟(二)
  10. chrome和safari_私人浏览器-如何在Chrome和Safari中使用隐身模式
  11. 【校内互测】Sunshine’s string(merge) (状压dp)
  12. 张珺 2015/07/13 个人文档
  13. WampServer的下载方法-解决报错the installation folder chosen is not that wampserver
  14. 中国省市JSON列表
  15. 幼儿编程Scratch第31讲:垃圾车-乐高入门机器人-WeDo
  16. (转)男人的梦想之野性篇 什么是真正的越野车
  17. android组合按键截屏,如果你的安卓手机支持〔电源〕键+〔音量减〕键截屏,你可以代码...
  18. Linux系统之audit
  19. 新零售连锁店系统为何这么火?
  20. 苹果cms V10模板主题|白色简约风格自适应模板下载

热门文章

  1. ACS——网管的九阳神功
  2. JExcel - 学习总结(1)
  3. 读书笔记_Effective_C++_条款二:尽量以const, enum, inline替换#define
  4. 分布式系统常用思想和技术
  5. 获取浏览器的User Anent及判断微信浏览器
  6. Jenkins实现测试环境到生产环境一键部署(Windows)
  7. hdu1048(c++)
  8. 20200628每日一句
  9. 20200118每日一句
  10. 多维数组的本质和指针数组