您所在的位置:云计算 > 云开发 > OpenStack Neutron DVR L2 Agent的初步解析:DVR的创建及生效

OpenStack Neutron DVR L2 Agent的初步解析:DVR的创建及生效

2014-11-25 13:28 Hcloud Hcloud的博客 字号:T | T
一键收藏,随时查看,分享好友!

OpenStack Juno版本已正式发布,这是这个开源云平台的10个版本,在Juno版的Neutron模块中真正引入了分布式路由(DVR)的实现,现在就我们就来看下具体DVR是怎么样创建起来并且生效进行工作的。

AD:

OpenStack Juno版本已正式发布,这是这个开源云平台的10个版本,在Juno版的Neutron模块中真正引入了分布式路由(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规则中。

原文出自:http://blog.csdn.net/canxinghen/article/details/41443127

【编辑推荐】

  1. Flocker 0.3.1 新特性 - 兼容 Fig 配置文集,及支持多个云平台
  2. OpenStack私有云DR的益处比其TCO更显而易见
  3. EMC收购Cloudscaling对OpenStack应用意义何在?
  4. HP Helion之OpenStack社区版
  5. 悉“数”HP Helion OpenStack
【责任编辑:Ophira TEL:(010)68476606】



分享到:

  1. 灾难频发 还敢相信云计算吗
  2. 索尼事故 用户重新考虑云迁移

文章排行

本月本周24小时

热点职位

更多>>

热点专题

更多>>

读书

XML案例解析教程
本书对开发XML应用程序给予了详细指导,其中一些应用程序甚至对于您来说是完全陌生的。这些应用程序包括XML 1.0,以及与XSLT、XQ

51CTO旗下网站

领先的IT技术网站 51CTO 领先的中文存储媒体 WatchStor 中国首个CIO网站 CIOage 中国首家数字医疗网站 HC3i 51CTO学院