声明:

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

作者:林凯

团队:华为杭州OpenStack团队

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

分布式路由怎么工作?

为了实现分布式路由。L3和L2 agent将须要工作在计算节点内。

今天。L3 agent执行在网络节点。但DVR提议,L3agent会在计算节点上执行。L2 agent将继续工作在计算节点,而将工作在所谓的“DVR模式',当中L2 agent将另外负责管理(加入/删除)一个增强模式OVS规则以实现分布式路由。

以下来说明怎样分布式路由完毕的拓扑实例:

在上图,一个PING请求从红色网络上的VM1中发送到在绿色网络上的VM2,这两个网络之间通过一个分布式路由器r1连接。

r1在CN1和CN2节点上有同样的IP地址和MAC地址。

我们能够看到,分布式路由器r1有两个接口,一个接口在红色网络的子网上,还有一个在绿色网络的子网上。

从VM1到VM2的PING ECHO请求数据流能够从上图1到6数据流看出。

1.从vm1中发出带有vm2 ip目的IP的数据流,首先发往红色网络的默认网关mac即r1上红色子网的接口的MAC地址(r1-red-mac),整合网桥发送这些这个数据流给r1

2.DVR路由器r1的红色子网接口接受这个数据帧,然后路由这个数据帧。

3.路由之后。r1将这个数据帧发送到绿色子网的接口,这个数据帧被br-int交换到br-tun。而且打上绿色网络的本地vlantag。

4.在CN1的br-tun用他节点上唯一的DVR mac地址取代帧的源mac地址(一个唯一的dvr mac地址被控制器分配给每一个计算节点CN1和CN2是不一样的)。更改后的数据帧通过br-tun发送到CN2,在发送前他也去除了本地绿色vlantag,并打上隧道vni vxlan id。

5.CN2上br-tun收到这个隧道数据帧。去除绿色vni标签。然后加上本地绿色网络vlan tag,然后发送这个帧到br-int。

6.CN2上的br-int识别到数据帧的源mac地址是一个独特的DVR mac地址(每一个计算节点的l2-agent知道全部dvr独有的mac地址)。之后将这个mac地址替换成绿色子网的mac地址,然后发送这个数据帧给vm2.

从vm2发送ping response给vm1,和上述的过程是一样的。

正如你可能已经注意到。在帧的源节点的DVR路由路由这些数据帧,他们仅仅是被发送到正确的目的地。对于全部的路由的帧。帧的源节点的DVR唯一的MAC地址被用在底层,作为该帧的源MAC地址(即内部帧)。

VM2的ARP表项将被预填充在CN1上的DVR路由器R1。由CN1上的L3-agent执行(通过从L3的插件提供的信息)。相同,对于VM1的ARP表项将由CN1上的L3-agent执行(通过从L3的插件提供的信息)预填充在CN2上的DVR的路由器R1。

CN1上流规则

br-int的规则:

br-tun的规则

CN2上的流规则:

br-int的规则:

watermark/2/text/aHR0cDovL2Jsb2cuY3Nkbi5uZXQvY2FueGluZ2hlbg==/font/5a6L5L2T/fontsize/400/fill/I0JBQkFCMA==/dissolve/70/gravity/Center" alt="">

br-tun的规则:

watermark/2/text/aHR0cDovL2Jsb2cuY3Nkbi5uZXQvY2FueGluZ2hlbg==/font/5a6L5L2T/fontsize/400/fill/I0JBQkFCMA==/dissolve/70/gravity/Center" alt="">

当执行在DVR模式下。全部这些红色表示的表和规则都是新增的,将通过二级代理进行额外的管理。

这些规则的简明说明例如以下:

a.通过租户的虚拟机生成的ARP广播请求在云广播到全部其它CN。可是,假设是ARP请求帧的目标是默认网关的IP(路由器IP子网)。那么这种帧被本地的br-tun所丢弃。由于这种ARP须要。并将仅仅被本地有效的DVR实例所服务。

Tunnel bridge

DVR PROCESS Table 1 (New table for dvr):

table=1, priority=4, dl_vlan= red1-L-vlan, dl_type=arp,ar_tpa= r1-red-ip actions: drop

table=1, priority=4, dl_vlan= grn1-L-vlan, dl_type=arp,ar_tpa= r1-grn-ip actions: drop

b.由分布式路由器接口port产生的全部请求,无论是ARP请求时,其他广播(或)单播数据包。将被发送至云中。可是,全部的这些帧被觉得是“DVR路由帧”。因此这种帧将搭载在该帧的源MAC地址的“本地唯一的DVRMACADDRESS”被转发到云中。

将本地的路由接口的mac地址转换为本地唯一的dvr mac address在 DVR PROCESStable完毕,例如以下演示样例:

Tunnel bridge

DVR PROCESS Table 1 (New table for dvr):

table=1, priority=1, dl_vlan=red2_L_vlan,dl_src=r1-red-mac, actions: mod_dl_src=dvr-cn1-mac, resubmit(,2)

table=1, priority=1, dl_vlan=grn2_L_vlan,dl_src=r1-grn-mac, actions: mod_dl_src=dvr-cn1-mac, resubmit (,2)

c.补充b点,在DVR的路由通过计算节点接收到的帧,目的节点上的br-int将去除上面加入的“唯一的DVR的MAC地址”。相同,br-int将代替本地DVR实样例网接口的MAC地址,再把该帧转发到本地目的地的虚拟机。这是通过br-int中的新的表1完毕。比如在CN2:

Integration Bridge Rules

Table 0: (Local switching table)、

table=0, priority=2, in_port=patch-tun, dl_src=dvr-cn1-macactions: goto table 1

table=0, priority=1, actions: output->NORMAL Table 1:(DVR_TO_LOCALMAC table)

table=1, priority=2, dl_vlan=grn2-L-vlan,nw_dst=grn-subnet actions: strip_vlan,mod_dl_src=r1-grn-MAC,output->port-vm2

table=1, priority=1 actions: drop

d.发往本地dvr子网的接口mac地址的数据包在原始计算节点的br-tun中丢弃。由于它们假设转发到云中。将在这个包被云中其它节点解码时。创建mac发生歧义。这是通过以下的规则:

Tunnel bridge

DVR PROCESS Table 1 (New table for dvr):

table=1, priority=2, dl_vlan=red2_L_vlan,dl_dst=r1-red-mac, actions: drop

table=1, priority=2 , dl_vlan=grn2_L_vlan,dl_dst=r1-grn-mac, actions: drop

e.为了防止多个单播的路由数据包同一时候发往云中的全部计算节点的远程虚拟机。12的预填充技术被用来在计算节点预先填充FDB表中。仅仅对正确的单目的地计算节点发送帧。

f.对于br-int上的这些规则,当中一长串的端口都可能会出现“输出口”行动规则。该文件建议使用可从2.1OpenVswitch(OVS)版本号的“组表Group Tables”措施,将源MAC地址改动为qr-net2的MAC地址,并转发到Net2的全部port,VM2就能收到请求包了。

Integration bridge

Table 1: (DVR_TO_LOCALMAC table)

table=1, priority=2, dl_vlan=grn2-L-vlan,nw_dst=grn-subnet actions: strip_vlan,mod_dl_src=r1-grn-MAC,output->port-vm2

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

  1. Openstack Neutron DVR workflow

    目前在Juno版本的trunk中已经合入了DVR相关的代码,我的理解是在Juno版本中DVR是一个experimental feature.最好需要稳定一个版本以后再上生产环境.之前写过一篇博文是DV ...

  2. 初探Openstack Neutron DVR

    目前在Juno版本的trunk中已经合入了DVR相关的代码,我的理解是在Juno版本中DVR是一个experimental feature.最好需要稳定一个版本以后再上生产环境.之前写过一篇博文是DV ...

  3. Openstack Neutron L2 Population

    Why do we need it, whatever it is? VM unicast, multicast and broadcast traffic flow is detailed in m ...

  4. [转]OpenStack Neutron解析

    1.为什么还需要linux bridge的部署方式? 2.哪一个网桥起着交换机的作用? 3.neutron如何实现私有网络的隔离 =================================== ...

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

    转载自:http://panpei.net.cn/2013/12/04/openstack-neutron-mechanism-introduce/ 自从开学以来,玩OpenStack也已经3个月了, ...

  6. Openstack Neutron:二层技术和实现

    目录 - 二层的实现 - 1.本地联通与隔离: - Linux bridge实现方式: - local - Flat - VLAN - VXLAN - Open vswitch实现方式 - local ...

  7. openstack neutron L3 HA

    作者:Liping Mao  发表于:2014-08-20 版权声明:能够随意转载,转载时请务必以超链接形式标明文章原始出处和作者信息及本版权声明 近期Assaf Muller写了一篇关于Neutro ...

  8. neutron DVR

    DVR 简介 DVR 提出的背景 在 Neutron 的网络环境中,跨子网的虚机通信是需要通过 Neutron 的路由器.这既包括不同子网的虚拟机之间的通信,又包括虚拟机与外网之间的通信.在 DVR ...

  9. openstack——neutron网络服务

    一.neutron 介绍:   Neutron 概述 传统的网络管理方式很大程度上依赖于管理员手工配置和维护各种网络硬件设备:而云环境下的网络已经变得非常复杂,特别是在多租户场景里,用户随时都可能需要 ...

随机推荐

  1. android 中Log - 简单使用

    例如,我们可以使用'Log.d'进行Debug,在java代码中输入Log.d(String tag, String message),tag为自己命名的tag,message为待输出的信息.然后打开 ...

  2. IIS 配置问题解决

    无法识别的属性“targetFramework”.请注意属性名称区分大小写. 配置错误 说明: 在处理向该请求提供服务所需的配置文件时出错.请检查下面的特定错误详细信息并适当地修改配置文件. 分析器错 ...

  3. 关于T-SQL重编译那点事,内联函数和表值函数在编译生成执行计划的区别

    本文出处:http://www.cnblogs.com/wy123/p/6266724.html 最近在学习 WITH RECOMPILE和OPTION(RECOMPILE)在重编译上的区别的时候,无 ...

  4. jQuery 如何创建基本插件(翻译)

    有时候,你希望有一块功能在整个代码当中都可以使用.例如,你可能想要有一个单一的方法可以在jQuery选择器上进行调用,用于处理该选择器上的一系列操作.又或许你编写了一个十分有用的工具函数,并希望能够简 ...

  5. Delphi笔记(GL_Scene四轴飞行器模型)

    有了前的一篇做铺垫,已经简单的说了GL_Scene的下载安装和一个简单的实例制作.现在就要开始制作一个3D的模型了,具体的步骤就不再这里多说了,直接上图和代码吧! [第一版]先看一下最开始的版本吧,比 ...

  6. Watchcow

    传送门 题目大意: 给你一幅连通的图,要求从起点1开始走,要经过每条边刚好两次,并且最终回到1起点. 思路:将无向图转换成有向图求欧拉回路. #include<cstdio> #defin ...

  7. 转:MongoDB调查总结

    与关系型数据库相比,MongoDB的优点:①弱一致性(最终一致),更能保证用户的访问速度:举例来说,在传统的关系型数据库中,一个COUNT类型的操作会锁定数据集,这样可以保证得到“当前”情况下的精确值 ...

  8. C++进阶阅读

    推荐的阅读顺序:level 1从<<essential c++>>开始,短小精悍,可以对c++能进一步了解其特性以<<c++ primer>>作字典和课 ...

  9. 基于Karma和Jasmine的AngularJS测试

    1:工程目录结构 y@y:karma-t01$ tree -L 3.├── client│   ├── app│   │   └── user│   ├── bower_components│   │ ...

  10. 调用API函数,在窗口非客户区绘图(通过GetWindowDC获得整个窗口的DC,就可以随意作画了)

    http://hi.baidu.com/3582077/item/77d3c1ff60f9fa5ec9f33754 调用API函数,在窗口非客户区绘图 GDI+的Graphics类里有个FromHdc ...