OpenStack Neutron DVR L2 Agent的初步解析(二)

声明:

本博客欢迎转载,但请保留原作者信息!

作者:林凯

团队:华为杭州OpenStack团队

OpenStack Juno版本已正式发布,这是这个开源云平台的10个版本,在Juno版的Neutron模块中真正引入了分布式路由(DVR)的实现,现在就让我们来初步看下分布式路由是怎么样工作的。

OpenStack Neutron DVR L2 Agent的初步解析 (一)中我们已经知道DVR是怎么样工作的,现在就我们就来看下具体DVR是怎么样创建起来并且生效进行工作的。

L2用Plugin与L3 agent交互

L2 OVS agent初始化

在L2 OVS agent初始化过程中,需要知道其主机唯一的DVR的MAC地址,为了将适当的OVS规则添加到隧道和集成网桥。为了这个目的,在L2 agent调用由ML2的插件提供的RPC函数 get_dvr_mac_address(HOST_ID)获取主机的DVR
mac地址。

分布式路由的创建

一个路由器可以建立为明确的分布式路由器。创建路由器(在分布式模式或以其他方式)所需的操作通常没有在agent上进行操作。只有当一个接口被添加到路由器中,有在L2和L3 agent才会采取行动。在插件这方面,创建路由器的信息存储在DB中,如下图所示。

将接口添加到路由器中

在分布式路由器执行接口的增加命令导致routers_updated()的RPC在CN上的L3-agent被调用。作为这种服务的请求的一部分,L3-Agent-on-CN初步验证这个受影响的路由器是否是一个分布式路由。如果是,则获取对应于新增的接口的接口端口并将这个端口挂在集成网桥上。这个操作在本质上类似于L3 agent,除了在L3-Agent-on-CN运行在计算节点,并增加了端口,这种端口只会在分布式路由器上。

这里的端口是一个分布式路由器的接口,将有一个特殊的device_owner字段值:network:router_interface_distributed

在把路由器上的接口端口加入BR-INT后,L3-Agent-on-CN要求提供有关该子网接口上的云端口的列表信息。对于这一点,调用get_compute_ports_ by_subnet(subnet_id)到L3的插件。L3插件与ML2插件通信,去得到可用的输入子网中的所有端口,并返回L3-Agent-on-CN的端口列表。L3-Agent-on-CN缓存这些端口,然后使用端口信息来创建在DVR路由器命名空间上的静态ARP表项。这样就完成了路由器接口的DVR侧的处理。

由L3-Agent-on-CN加入路由器接口的端口被 L2 Agent检测到。L2 Agent识别到如果该端口是一个分布式的路由器接口。如果没有,它进行通常处理。如果是的话,它进行特殊处理,在其中调用get_compute_ports_on_host_by_subnet(subnet_id),以获得本地虚拟机在此路由器的接口列表。然后,它使用的端口列表及路由器接口的端口信息,在隧道和集成网桥上建立OVS规则。

从分布式路由移除接口

在一个分时路由上执行一个路由接口的删除命令,在L3-Agent-on-CN调用routers_updated() RPC请求。作为这样一个请求的服务的一部分,L3-Agent-on-CN初始化时验证这个影响到的路由器是否是一个分布式路由,如果是,他就会获取对应的要被删除掉额接口端口。再将路由接口端口从集成网桥移除。这个操作在本质上类似于L3
agent,除了在L3-Agent-on-CN运行在计算节点,而且删除的端口,这种端口只会在分布式路由器上。 在删除路由器上在br-int上的接口端口,L3-Agent-on-CN这个端口的缓存来确定端口中可以被删除的路由器接口就行。然后它会为列表中所有端口移除路由器命名空间中的静态ARP表项。这样就完成了DVR侧的路由器接口删除的处理。

这些被L3-Agent-on-CN删除的路由器接口端口被L2 agent检测到。L2 agent识别这个端口是否是分布式路由接口。如果不是,就进行通常处理;如果是,完成特定的进程,将所有的与删除的路由器接口端口匹配的OVS规则从集成网桥和隧道网桥中移除。

新的虚拟机加入到分布式路由器的子网接口

当一个新租户下VM被添加到分布式路由管理的子网接口,一个创建port的api调用被nova完成去主持新租户下的VM。作为ML2插件提供的创建端口服务的一部分,ML2插件将通知L3 Plugin一个新的端口正在被添加。L3 Plugin将检查这个新的端口是否在一个DVR组建的子网中。如果不是,则不做任何操作。如果是,L3 Plugin将启动一个RPC
call port_add() 到 the L3-Agent-on-CN。L3-Agent-on-CN收到这个RPC请求,会获取这个port的信息,然后为这个port增加静态的ARP表项到对应的路由器命名空间。这样就完成DVR侧对一个新租户的VM port的增加。

新租户的VM的端口被L2 agent检测到,L2 agent验证这个端口是否是已经存在分布式路由的子网的一个成员。如果不是,则做普通操作。如果是,执行特定操作:在br-int和br-tun上为匹配的子网网关添加这个port(OFPORT)到现有的OVS规则中。

现有的虚拟机从一个分布式的路由器子网接口中删除

当一个租户VM从一个被分布式路由管理的子网中移除,一个DeletePort API调用被Nova执行用来删除租户VM。作为ML2插件提供的删除创建端口服务的一部分,ML2插件将通知L3 Plugin一个新的端口正在被删除。L3 Plugin将检查这个要删除的端口是否在一个DVR组建的子网中。如果不是,则不做任何操作。如果是,L3
Plugin将启动一个RPC call port_delete() 到 the L3-Agent-on-CN。L3-Agent-on-CN收到这个RPC请求,会获取这个port的信息,然后为这个port移除静态的ARP表项到对应的路由器命名空间。这样就完成DVR侧对一个新租户的VM port的移除。

移除的port被L2 agent检测到,L2 agent验证这个端口是否是已经存在分布式路由的子网的一个成员。如果不是,则做普通操作。如果是,执行特定操作:在br-int和br-tun上为匹配的子网网关移除这个port(OFPORT)到现有的OVS规则中。

时间: 2024-08-05 03:04:46

OpenStack Neutron DVR L2 Agent的初步解析(二)的相关文章

OpenStack Neutron DVR L2 Agent的初步解析 (一)

声明: 本博客欢迎转载,但请保留原作者信息! 作者:林凯 团队:华为杭州OpenStack团队 OpenStack Juno版本已正式发布,这是这个开源云平台的10个版本,在Juno版的Neutron模块中真正引入了分布式路由(DVR)的实现,现在就让我们来初步看下分布式路由是怎么样工作的. 分布式路由怎么工作? 为了实现分布式路由,L3和L2 agent将需要工作在计算节点内.今天,L3 agent运行在网络节点,但DVR提议,L3agent会在计算节点上运行.L2 agent将继续工作在计算

初探Openstack Neutron DVR

目前在Juno版本的trunk中已经合入了DVR相关的代码,我的理解是在Juno版本中DVR是一个experimental feature.最好需要稳定一个版本以后再上生产环境.之前写过一篇博文是DVR相关的,当时代码还没有实现,与实际的实现有一些出入.当前的DVR的实现是基于VXLAN的.关于VXLAN的优势,有时间会写一些体会,今天暂且不谈. 建议先看一下以下文档,对DVR有一些了解: https://docs.google.com/presentation/d/1ktCLAdglpKdsC

Openstack Neutron DVR workflow

目前在Juno版本的trunk中已经合入了DVR相关的代码,我的理解是在Juno版本中DVR是一个experimental feature.最好需要稳定一个版本以后再上生产环境.之前写过一篇博文是DVR相关的,当时代码还没有实现,与实际的实现有一些出入.当前的DVR的实现是基于VXLAN的.关于VXLAN的优势,有时间会写一些体会,今天暂且不谈. 建议先看一下以下文档,对DVR有一些了解: https://docs.google.com/presentation/d/1ktCLAdglpKdsC

Openstack Neutron DVR

https://blog.csdn.net/matt_mao/article/details/39180135首先看一下,没有使用DVR的问题在哪里: 从图中可以明显看到东西向和南北向的流量会集中到网络节点,这会使网络节点成为瓶颈. 那如果启用的DVR,情况会变成如下: 对于东西向的流量, 流量会直接在计算节点之间传递.对于南北向的流量,如果有floating ip,流量就直接走计算节点.如果没有floating ip,则会走网络节点. 实验环境如下: 然后起了两个私有网络和一个DVR 路由器,

OpenStack Neutron LoadBalance源码解析(一)

声明: 本博客欢迎转载,但请保留原作者信息,并请注明出处! 作者:林凯 团队:华为杭州OpenStack团队 在OpenStackGrizzly版本中,Neutron(当时叫Quantum)组件引入了一个新的网络服务:LoadBalance(LBaaS),关于LoadBalance的框架和基础知识方面网上已经有了一些好文章,在此不再赘述.本文将对LoadBalancer的代码流程及实现进行初步解析,肯定会有错误和不严谨的地方,需要大家给予指正. 推荐一些基础知识的文章给大家,大家看完之后再看源码

[转]OpenStack Neutron解析

1.为什么还需要linux bridge的部署方式? 2.哪一个网桥起着交换机的作用? 3.neutron如何实现私有网络的隔离 ================================================== 很久之前写了一篇关于OpenStack Neutron解析的文章,那时只是粗略的写了一下把Neutorn的整体架构分析了一下,后来一直忙于其他事情,也就忘了去详细分析一下Neutron的架构.这次这篇算是完成未完之事,同时也是对之前的一个知识的总结及恢复. OpenS

[转]OpenStack Neutron运行机制解析概要

转载自:http://panpei.net.cn/2013/12/04/openstack-neutron-mechanism-introduce/ 自从开学以来,玩OpenStack也已经3个月了,这段时间主要把精力投在了OpenStack的安装部署和网络组件Neutron的研究上了.这期间零零散散在安装部署和Neutron运作原理上来回切换,有点在实践中学习的味道,虽然在安装部署的过程遇到了不少的问题,也一一都给解决了.然而,总是觉得对于Neutron的机制理解的还是不够透彻.前一阵子刚刚部

openstack neutron L3 HA

作者:Liping Mao  发表于:2014-08-20 版权声明:可以任意转载,转载时请务必以超链接形式标明文章原始出处和作者信息及本版权声明 最近Assaf Muller写了一篇关于Neutron L3 HA的文章很不错. 建议看原文,地址如下: http://assafmuller.wordpress.com/category/ml2/ 大致翻译如下: L3 Agent Low Availability(L3 agent的低可用性) 目前,在Openstack中,你只能用多个网络节点达到

Neutron - DVR配置

DVR介绍 后续补充,我还没完全搞明白原理 DVR配置 这里说明一下,我的controller node和network node在同一台机器上 controller节点 [[email protected] ~(keystone_admin)]# vim /etc/neutron/neutron.conf  # 添加如下配置选项 router_distributed = True [[email protected] ~(keystone_admin)]# vim /etc/neutron/p