作者:Liping Mao  发表于:2014-07-04

版权声明:能够随意转载。转载时请务必以超链接形式标明文章原始出处和作者信息及本版权声明


在Openstack中L3router会造成流量集中的问题。不论东西向还是南北向的流量都须要流过网络节点的虚拟路由器。为了解决流量集中的问题,社区正在开打分布式虚拟路由器(DVR)的feature。

本文focus在DVR中东西向流量的处理流程。

南北向的处理不在本文范围内。



首先看一下东西向流量存在的问题。 一个用户创建了一个VRoute1(在Network Node上)和两个虚拟网络Net1、Net2,然后在两个网络中分别起了一个虚机,如果这两个虚机分别在Compute Node1和Compute Node2上。能够看到当VM1想要和VM2通信时。数据须要集中到Network Node,因而产生了东西向流量集中的问题。例如以下图所看到的:

为了解决问题引入了DVR,将东西向流量分布在各个计算节点上做到了真正的Multi-Host。

为了分析packet flow做下面如果:
1. VM1 和 VM2如上图所看到的。是属于Net1和Net2的两个虚机,他们分别在Compute Node1 和Compute Node2上。

2. Net1和Net2连接到了VRouter上。
3. Compute Node1和Compute Node2的连接方式是Vlan。
4. VM1和VM2使用fixed ip通信,不涉及floating ip。

5. 使用DVR时,会在每个计算节点上建立IR(Internal Router),如果连接Net1和Net2的接口是qr-net1和qr-net2。

拓扑例如以下图:

启用DVR须要在compute node上安装neutron-l3-agent。而且要打开DVR mode。同一时候须要改动neutron-openvswitch-agent为DVR mode:

就以从VM1发一个包到VM2为例分析东西向包的数据流。
包从VM1发出时。因为默认网关是qr-net1,就会发出下面格式的包:

当包流到br-int会转发到qr-net1,这样就进入了Compute Node1的Internal Router1。

在IR1中查找路由,发现目标地址是属于Net2。而在IR1的ARP表中有全部VM的Static ARP Entry。因此目标地址为VM2就会已经存在ARP Entry,不会发出ARP Request。ARP表是在neutron-l3-agent中维护的。

当有新增/删除虚机时,都会改动此ARP表。

包就会从qr-net2接口转发出。格式例如以下:

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

当包流入br-int后,会将其转发到br-eth0。br-eth0会将包的Vlan改为外部Vlan,同一时候通过openflow rule会将Source MAC改为一个唯一且与ComputeNode绑定的MAC地址。

这个唯一MAC地址是由DVR生成的。

同一时候在br-eth0上也有阻止对qr-net1和qr-net2的ARP请求的rule,这样就能保证本机的VM使用本机的Internal
Router。


Notes:
为什么要这个与Compute Node绑定的唯一MAC呢?主要原因是每一个Compute Node上都有IR1。同一时候qr-net1和qr-net2接口IP地址和MAC地址都是同样的。

如果不改动Source MAC。那各个计算节点上的OVS以及外部物理交换机会从不同的port收到同样源MAC地址的包。这会造成交换机MAC地址表thrashing。

尽管即使使用了唯一MAC还是会出现不同Vlan
id但MAC地址同样的情况,但这样的情况影响要小的多。

当包从Compute Node1上发出后,Phy Switch将其转发到Compute Node2。在br-eth0上将外部Vlan转为内部Vlan,之后转发到br-int,在br-int上会採用OpenVSwitch2.1的新feature,利用“Group Tables”将源MAC地址改动为qr-net2的MAC地址,并转发到Net2的全部port,VM2就能收到请求包了。

Openflow Rule 应该类似例如以下:
dl_vlan = net2LocalVlanID, nw_dst = net2IPRange, actions : strip_vlan, mod_dl_src = qr-net2 MAC, output->all the port in Net2

Refer:
https://blueprints.launchpad.net/neutron/+spec/neutron-ovs-dvr
https://review.openstack.org/#/q/topic:bp/neutron-ovs-dvr,n,z

Note:
本文计算节点之间进行vlan连接的,现在实际提交patch如果只支持vxlan。未来将支持vlan。

Openstack中间DVR Part1 -- 东西走向的交通处理的更多相关文章

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

    声明: 本博客欢迎转载,但请保留原作者信息! 作者:林凯 团队:华为杭州OpenStack团队 OpenStack Juno版本号已正式公布,这是这个开源云平台的10个版本号,在Juno版的Neutr ...

  2. openstack网络DVR

    一.DVR描述 分布式路由 二.相关的专业术语 术语名称 术语解释 SNAT 在路由器后(POSTROUTING)将内网的ip地址修改为外网网卡的ip地址,也就是绑定浮动IP和外部通信 DNAT 在路 ...

  3. Openstack Neutron DVR workflow

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

  4. 初探Openstack Neutron DVR

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

  5. 零基础学习openstack【完整中级篇】及openstack资源汇总

    1.你是如何学习openstack的?2.你对openstack的组件了解多少?3.你认为openstack该如何学习? 一直想写关于openstack的方面的内容,今天终于整理完成.算是完成一桩心事 ...

  6. OpenStack网络新项目Dragonflow研究

    https://www.ustack.com/blog/openstack-dragonflow/ 本文由2015年5月30日举行的OpenStack Meetup北京上的演讲整理而成,演讲者为Uni ...

  7. <JAVA图像学习笔记>十字路口交通模拟--操作系统模拟课后小项目

    项目的要求很简单: 模拟出十字路口的交通控制情况: 秒. 当东西(或南北)方向红灯时,所有车辆(除了消防车.救护车.警车)均排队等待,当东西(或南北)方向绿灯时,所有车辆按序行驶(不准超车). 制作这 ...

  8. 学习OpenStack之(5):在Mac上部署Juno版本OpenStack 四节点环境

    0. 前沿 经过一段时间的折腾,终于在自己的Mac上装好了Juno版本的四节点环境.这过程中,花了大量的时间,碰到了许多问题,学到不少知识,折腾过不少其实不需要折腾的东西,本文试着来对这过程做个总结. ...

  9. openstack与VMware workStation的区别

    免责声明:     本文中使用的部分图片来自于网络,如有侵权,请联系博主进行删除 最近一直在研究云计算,恰好有个同事问了我一个问题:你们研究的openstack到底是什么东西?跟VMware Work ...

随机推荐

  1. TSS 任务状态段

    TSS(任务状态段) 1 什么是TSS TSS 全称task state segment,是指在操作系统进程管理的过程中,任务(进程)切换时的任务现场信息.  2 TSS工作细节 TSS在任务切换过程 ...

  2. ruby的命名约定

    1 局部变量和方法参数以小写字母开头 2 方法名字以小写字母开头 3 全局变量以$开头 4 实例变量以@开头 5 类变量以@@开头 6 常量以大写字母开头 7  类和模块名以大写字母开头

  3. hdu4714Tree2cycle

    链接 树上的一些操作还是不是太好想 直接dfs下去 不是最优的 一个节点最多保留两个度 如果它有两个以上的子节点 那么就与父节点断开 与k-2个子节点断开 再重新连 #pragma comment(l ...

  4. c#反射重载方法(发现不明确的匹配)

    GetMethod(string name) 在反射重载方法时,如果调用此重载方法,会产生 发现不明确的匹配 的错误. 解决方案如下: GetMethod("MethodName" ...

  5. wps 2012-2013 通杀漏洞(CVE-2013-3934)

    测试方法: 本站提供程序(方法)可能带有攻击性,仅供安全研究与教学之用,风险自负! #!/usr/bin/python # Exploit Title: Kingsoft Office Writer ...

  6. 【 D3.js 进阶系列 — 6.2 】 饼状图的拖拽

    本文讲解稍微复杂一些的拖拽应用,即拖拽饼图的各部分. 在[入门 - 第 9.1 章]讲解了如何制作饼状图.饼状图的各部分是用具有宽度的弧线来表示的.在与用户进行交互的时候,如果每一部分都能拖拽,是很有 ...

  7. STL总结之vector

    STL中vector是通常作为数组使用,不过它更像一个动态数组,在实际项目开发中大量使用. 优点:存储空间连续,可以使用下标访问,时间复杂度O(1). 缺点:不适合从中间删除和添加元素. C++标准规 ...

  8. 【HTML】Intermediate5:Definition Lists

    dl(defination list) dt(defination term) dd(defination description)

  9. (4)I2C总线的7bit从机地址

    时钟拉伸(Clock stretching)clock stretching通过将SCL线拉低来暂停一个传输.直到释放SCL线为高电平,传输才继续进行.clock stretching是可选的,实际上 ...

  10. Html笔记(十)XHTML XML

    XHTML 是可扩展的超文本标记语言(Extensible HyperText Markup Language). XHTML 是 w3c 组织在2000年的时候为了增强HTML推出的,本来是想替代H ...