作者: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. Memcached总结一:memcached简介及适用和不适应场景

    Memcached是免费的,开源的,高性能的,分布式内存对象的缓存系统(键/值字典),旨在通过减轻数据库负载加快动态Web应用程序的使用. Memcached是由布拉德·菲茨帕特里克(Brad Fit ...

  2. TSS 任务状态段

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

  3. [codility]Falling-discs

    http://codility.com/demo/take-sample-test/omega2013 这题有点意思.首先经过思考,想到从底部往上扫,去迎接掉下来的disc.但这样仍然是不行的.后来看 ...

  4. Django单元测试(二)------测试工具

    The test client test client是一个python类,来模拟一个简单的“哑”浏览器,允许你来测试你的view函数.你可以使用test client完成下列事情: 1.模拟&quo ...

  5. ruby quiz The Solitaire Cipher

    solitaire cipher:http://en.wikipedia.org/wiki/Solitaire_(cipher) https://www.schneier.com/solitaire. ...

  6. 从零开始学习jQuery (九) jQuery工具函数

    一.摘要 本系列文章将带您进入jQuery的精彩世界, 其中有很多作者具体的使用经验和解决方案,  即使你会使用jQuery也能在阅读中发现些许秘籍. 我们经常要使用脚本处理各种业务逻辑, 最常见的就 ...

  7. 在ASP.NET MVC中实现基于URL的权限控制

    本示例演示了在ASP.NET MVC中进行基于URL的权限控制,由于是基于URL进行控制的,所以只能精确到页.这种权限控制的优点是可以在已有的项目上改动极少的代码来增加权限控制功能,和项目本身的耦合度 ...

  8. WebService的优点和基本原理

    WebService简介(1)WebService是一个SOA(面向服务的编程)的架构,它是不依赖于语言,不依赖于平台,可以实现不同的语言间的相互调用,通过Internet进行基于Http协议的网络应 ...

  9. 如何处理alert、confirm、prompt对话框

    import java.io.File; import org.openqa.selenium.Alert; import org.openqa.selenium.By; import org.ope ...

  10. FAQ_浏览器_ChromeDriver报错

    Started ChromeDriverport=2437version=23.0.1240.0log=D:\workspace\WebdriverTest\chromedriver.log[0704 ...