L2 Population 原理 - 每天5分钟玩转 OpenStack(113)

前面我们学习了 VXLAN,今天讨论跟 VXLAN 紧密相关的 L2 Population。

L2 Population 是用来提高 VXLAN 网络 Scalability 的

通常我们说某个系统的 Scalability 好,其意思是:
当系统的规模变大时,仍然能够高效地工作。

L2 Population 到底解决了怎样的 Scalability 问题?
请看下图:

这是一个包含 5 个节点的 VXLAN 网络,每个节点上运行了若干 VM。

现在假设 Host 1 上的 VM A 想与 Host 4 上的 VM G 通信。
VM A 要做的第一步是获知 VM G 的 MAC 地址。
于是 VM A 需要在整个 VXLAN 网络中广播 APR 报文:“VM G 的 MAC 地址是多少?”

如果 VXLAN 网络的节点很多,广播的成本会很大,这样 Scalability 就成问题了。
幸好 L2 Population 出现了。

L2 Population 的作用是在 VTEP 上提供 Porxy ARP 功能,使得 VTEP 能够预先获知 VXLAN 网络中如下信息:
1. VM IP -- MAC 对应关系
2. VM -- VTEP 的对应关系

当 VM A 需要与 VM G 通信时:
1. Host 1 上的 VTEP 直接响应 VM A 的 APR 请求,告之 VM G 的 MAC 地址。
2. 因为 Host 1 上的 VTEP 知道 VM G 位于 Host 4,会将封装好的 VXLAN 数据包直接发送给 Host 4 的 VTEP。

这样就解决了 MAC 地址学习和 APR 广播的问题,从而保证了 VXLAN 的 Scalability。

那么下一个关键问题是:
VTEP 是如何提前获知 IP -- MAC -- VTEP 相关信息的呢

答案是:

  1. Neutron 知道每一个 port 的状态和信息; port 保存了 IP,MAC 相关数据。
  2. instance 启动时,其 port 状态变化过程为:down -> build -> active。
  3. 每当 port 状态发生变化时,Neutron 都会通过 RPC 消息通知各节点上的 Neutron agent,使得 VTEP 能够更新 VM 和 port 的相关信息。
  4. VTEP 可以根据这些信息判断出其他 Host 上都有哪些 VM,以及它们的 MAC 地址,这样就能直接与之通信,从而避免了不必要的隧道连接和广播。

理解了工作原理,下节我们学习如何在 Neutorn 中配置 L2 Population。

时间: 2024-07-30 13:15:30

L2 Population 原理 - 每天5分钟玩转 OpenStack(113)的相关文章

CPU 和内存虚拟化原理 - 每天5分钟玩转 OpenStack(6)

前面我们成功地把 KVM 跑起来了,有了些感性认识,这个对于初学者非常重要.不过还不够,我们多少得了解一些 KVM 的实现机制,这对以后的工作会有帮助. CPU 虚拟化 KVM 的虚拟化是需要 CPU 硬件支持的.还记得我们在前面的章节讲过用命令来查看 CPU 是否支持KVM虚拟化吗? root@ubuntu:~# egrep -o '(vmx|svm)' /proc/cpuinfo vmx 如果有输出 vmx 或者 svm,就说明当前的 CPU 支持 KVM.CPU 厂商 Intel 和 AM

Neutron Vlan Network 原理- 每天5分钟玩转 OpenStack(92)

前面我们陆续学习了 Neutron local network,flat network 和 DHCP 服务,从本节将开始讨论 vlan network. vlan network 是带 tag 的网络,是实际应用最广泛的网络类型.下图是 vlan100 网络的示例. 1. 三个 instance 通过 TAP 设备连接到名为 "brqXXXX" linux bridge. 2. 在物理网卡 eth1 上创建了 eth1.100 的 vlan interface,eth1.100 连接

Neutron Router 工作原理 - 每天5分钟玩转 OpenStack(142)

上一节我们创建了 router 连通了 vlan100 和 vlan101, 今天分析router是如何工作的. 首先查看控制节点的网络结构发生了什么变化: br-int 上多了两个 port:  1. qr-d295b258-45,从命名上可以推断该 interface 对应 router_100_101 的 interface (d295b258-4586),是 subnet_172_16_100_0 的网关.  2. qr-2ffdb861-73,从命名上可以推断该 interface 对

cloud-init 工作原理 - 每天5分钟玩转 OpenStack(171)

cloud-init 是 linux 的一个工具,当系统启动时,cloud-init 可从 nova metadata 服务或者 config drive 中获取 metadata,完成包括但不限于下面的定制化工作: 设置 default locale 设置 hostname 添加 ssh keys到 .ssh/authorized_keys 设置用户密码 配置网络 安装软件包 为了实现 instance 定制工作,cloud-init 会按 4 个阶段执行任务: local init conf

写在最前面 - 每天5分钟玩转 OpenStack(1)

<每天5分钟玩转 OpenStack>是一个 OpenStack 教程,这是第 1 篇. 这个教程有下面两个特点: 系统讲解 OpenStack 从架构到各个组件:从整体到细节逐一讨论 重实践并兼顾理论 主要从实际操作的角度带着大家学习 OpenStack.   为啥要写这个? 简单回答是:因为OpenStack 学习难度大,但如果掌握了价值会很大 先做一个自我介绍吧. 本人网名CloudMan,在 IT 这个行当已经摸爬滚打了十多年,05年之前是搞上层应用开发的,那时候 Java 比较火,所

学习 OpenStack 的方法论 - 每天5分钟玩转 OpenStack(150)

作为 OpenStack 的核心教程,我们已经到了最后总结的部分. OpenStack 目前已经有好几十个模块,本教程讨论的是最最重要的核心模块:Keystone,Nova,Glance,Cinder 和 Neutron.请大家看下图: 此图截自 https://www.openstack.org/software/project-navigator/,这是 OpenStack 官方定义的 6 个 Core Service.每个模块都会从三个维度来衡量: ADOPTION - 采用度 MATUR

详解 ML2 Core Plugin(II) - 每天5分钟玩转 OpenStack(72)

上一节我们讨论了 ML2 Plugin 解决的问题,本节将继续研究 ML2 的架构. ML2 对二层网络进行抽象和建模,引入了 type driver 和 mechanism driver. 这两类 driver 解耦了 Neutron 所支持的网络类型(type)与访问这些网络类型的机制(mechanism),其结果就是使得 ML2 具有非常好的弹性,易于扩展,能够灵活支持多种 type 和 mechanism. Type Driver Neutron 支持的每一种网络类型都有一个对应的 ML

cloud-init 典型应用 - 每天5分钟玩转 OpenStack(174)

本节介绍几个 cloud-init 的典型应用:设置 hostanme,设置用户初始密码,安装软件.  设置 hostname cloud-init 默认会将 instance 的名字设置为 hostname.但这样不太方便,有时希望能够将二者分开,可利用 cloud-init 的set_hostname 模块实现.set_hostname 它会查询 metadata 中 hostname 信息,默认值就是 instance 的名字.我们可以指定自己的 hostname,方法是将下面的内容传给

部署 instance 到 VXLAN - 每天5分钟玩转 OpenStack(112)

上一节我们创建了 vxlan 100_net,今天将部署 instance 并分析网络的连通性. launch 新的 instance "cirros-vm1",网络选择 vxlan100. cirros-vm1 分配到的 IP 为 172.16.100.3. cirros-vm1 被 schedule 到控制节点,对应的 tap 设备为 tap099caa87-cd,并且连接到 bridge brq1762d312-d4. 当前 vxlan100 的结构如下: 继续用同样的方式 la