作者: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. IE10与IMG图片PNG显示不了 WP中的WebBrowser中无法查看PNG格式的图片

    在IE10下,IMG的图片不能是PNG格式的,PNG格式显示不了,JPG显示就可以

  2. easyui源码翻译1.32--accordion(手风琴)

    前言 前几天加班比较忙 未能及时更新翻译的 今天多发布几篇..下载该插件翻译源码 Accordion 分类空间允许用户使用多面板,但在同一时间只会显示一个.每个面板都内建支持展开和折叠功能.点击一个面 ...

  3. easyui源码翻译1.32--MenuButton(菜单按钮)

    前言 扩展自$.fn.linkbutton.defaults.使用$.fn.menubutton.defaults重写默认值对象..下载该插件翻译源码 菜单按钮是下拉菜单的一部分.它伴随着linkbu ...

  4. wordpress的使用

    ubuntu 发送邮件学习资料: http://edu.51cto.com/lesson/id-6066.html 相关插件: Disable Google Fonts 使用中出现的问题: 1:wor ...

  5. Android 动态背景的实现以及SurfaceView中添加EditText控件

    首先还是一贯作风,我们先看案例: \ 静态图看不出来效果,如果用过此软件(扎客)的同学们都知道,她的背景会动.怎么样,是不是觉得很时尚,起码比静态的要好(个人观点).其实实现起来并不复杂,这个如果让做 ...

  6. What is martian source / martian packets

    Martian source / Martian packets In Linux, by default, packets are considered individually for routi ...

  7. Form Personalization应用总结

    1 Form Personalization 简介 Oracle EBS 11.5.10增加了Form Personalization功能,该功能不仅是技术功能的一次增强,也是对业务功能的扩展,提高了 ...

  8. Hibernate包及相关工具包下载地址

    Hibernate包及相关工具包下载地址: http://prdownloads.sourceforge.net/hibernate/ 这里包含所有hibernate各个版本的包下载,且提供了 Mid ...

  9. servlet读取cookie问题

    String sessionid = request.getSession().getId(); // 取得当前的session id ckSessionid = new Cookie("s ...

  10. 注意!ASP.NET MVC 3 的一个 OutputCache 问题

    在用 ASP.NET MVC 3 重写博客园网站首页时,特地留意了一下这个缓存问题,通过这篇博文分享一下. 在 ASP.NET MVC 3 中如果使用了 OutputCache,一定要在 Action ...