OVS下无法访问内部网站

遇到朋友求助的一个客户问题,环境是这样的,客户在自己的iaas平台(不是openstack)上使用ovs,物理交换机上配置vlan和dhcp service,计算节点的ovs上配置了虚拟vlan,当ovs port设置为trunk port模式后,vm就可以自动获取物理交换机dhcp分配的ip地址了,之后测试vm可以ping通公网目标地址,使用过程中发现个别公网地址的80/443服务无法访问,比如无法访问百度,(如图所示,https点击继续浏览按钮长时间没反应,http服务也是打开超时) 。朋友尝试在ovs上取消vlan,并把与计算节点相连的物理交换机对应的端口设置为access模式后,现象消失。

无法访问的现象如图所示:



点击继续浏览此网站,网站没有响应

朋友认为是防火墙或者OVS的问题,求助我协助分析。下面是整个处理的过程的记录。

抓包分析

如上图所示,应用wireshark数据包分析工具,根据朋友的描述设置过滤条件,核实数据包存在丢失的情况,因丢包直接导致了reset的发生。

去掉过滤条件,查看完整的信息发现一些正常的访问出现了比较多的PDU重置的情况,如下图所示:

于是让朋友在ping的时候加上-l 参数,ping -l 2048 -f www.baidu.com, 结果发现无法ping通,而调整到

ping -l 1499 -f www.baidu.com 后才可以ping通。

至此,问题已经开始明朗。

问题排查

检查虚拟网卡接口信息,核实mtu的配置为默认值1500,看似没有问题。

不管怎么说,问题应该和MTU的协商和配置有关,于是朋友在vm上执行下列命令:

sudo ifconfig eth0 mtu 1492

再次测试访问百度成功,至此问题就这样解决了。

看似是一个简单问题,里面一定藏有玄机,一般情况都不需要我们去改动MTU默认值的。通过查阅资料,我就这个问题做下总结。首先,这是既GRE存在MTU相关问题之后,迄今为止发现的又一个OVS在MTU方面的问题。这一次发生在是ovs vlan trunk port设置上。

如果你对GRE相关问题不了解,可以参考:http://blog.csdn.net/lynn_kong/article/details/9140659

下面这个链接解释的更加清楚,访问时可能需要翻墙

http://techbackground.blogspot.co.uk/2013/06/path-mtu-discovery-and-gre.html

在OVS1.9版本提到并已经改进了这个问题,但经证实发现仍然要配置MTU的值,具体可以参考:

http://openvswitch.org/releases/NEWS-1.9.0

  • Tunnel Path MTU Discovery.

    对于Quantum插件OVS这意味着,超过MTU的物理接口上的数据包,现在将得到碎片,ICMP将不予退还给发件人。您可能仍然要配置的MTU值(在实例或节点),以防止该IP碎片,因为它降低了整体的性能,它造成了很多小的额外的数据包的开销。

总结:

遇到此类问题,可以通过traceroute --mtu (具体命令可以参考文档结尾的附件)检查中间设备,通过wireshark抓包分析,也就是验证和探索吧。

具体机制肯定是ovs和tracepath中的某设备在自动协商方面都做了限定有关,双方都坚持让对方重传,没有任何一方让步的结果。谁对谁错暂且不说,不过胳膊拧不过大腿,Ovs在这方面还需要做出改进。该问题已经影响到基本使用,由此也带来的性能上的问题。

最后的解决方案

以下是Openstack中的解决方法:

https://github.com/claenjoy/OpenStack-Grizzly-Install-Guide/commit/9ed25290ecd8466407c985aaad61eb0e098df8cd
+* Create new file /etc/quantum/dnsmasq.conf::
+
+ # reduce the MTU on the new instances to 1454
+ dhcp-option-force=26,1454
+ log-facility = /var/log/quantum/dnsmasq.log
+ log-dhcp
+
+ # Change file's owner
+ chown root:quantum /etc/quantum/dnsmasq.conf
+
+ #Add line to /etc/quantum/dhcp_agent.ini
+ dnsmasq_config_file = /etc/quantum/dnsmasq.conf
+
* Make sure that your rabbitMQ IP in /etc/quantum/quantum.conf is set to the controller node:: rabbit_host = 10.10.10.51

不同的IaaS平台都可以参照这个方法设置,至此问题解决分析完毕!后续将继续关注由此带来的性能方面的问题。

补充材料

通过traceroute可以检查每跳设备的mtu设置:

traceroute -n www.baidu.com -p 80 --mtu
traceroute to www.baidu.com (220.181.112.244), 30 hops max, 65000 byte packets
1 192.168.1.1 3.740 ms F=1500 2.000 ms 23.781 ms
2 218.241.252.157 32.011 ms F=1492 12.053 ms 5.484 ms
3 218.241.252.149 7.705 ms 12.232 ms 10.914 ms
4 202.99.1.153 8.830 ms 202.99.1.121 6.432 ms 7.449 ms
5 172.16.98.133 13.663 ms 15.295 ms 10.729 ms
6 106.38.215.13 12.791 ms 20.058 ms 8.631 ms
7 * * *
8 * * *
9 220.181.17.94 6.918 ms 220.181.182.34 9.949 ms 220.181.17.94 8.589 ms
10 * * *
11 * * *
12 * * *
13 * * *

END

OVS故障处理一例的更多相关文章

  1. MySQL故障处理一例_Another MySQL daemon already running with the same unix socket

    MySQL故障处理一例:"Another MySQL daemon already running with the same unix socket". [root@test- ...

  2. 10g异机恢复后EM无法启动故障处理一例

    之前在自己的測试环境上做了个异机恢复,原来的库上是配置过EM的,可是在恢复的库上去启动EM就报错了.以下看详细解决过程: PS:原主机名为zlm,恢复出来的主机名为bak [root@bak ~]# ...

  3. Neutron 理解 (2): 使用 Open vSwitch + VLAN 组网 [Netruon Open vSwitch + VLAN Virutal Network]

    学习 Neutron 系列文章: (1)Neutron 所实现的虚拟化网络 (2)Neutron OpenvSwitch + VLAN 虚拟网络 (3)Neutron OpenvSwitch + GR ...

  4. VLAN模式

    一 二层基础知识 1.1 vlan介绍 本小节重点: vlan的含义 vlan的类型 交换机端口类型 vlan的不足 1.1.1:vlan的含义 局域网LAN的发展是VLAN产生的基础,因而先介绍一下 ...

  5. openstack项目【day24】:VLAN模式

    本节内容 一 二层基础知识 1.1 vlan介绍 1.1.1:vlan的含义 1.1.2:vlan的类型 1.1.3:vlan的不足 1.2 : 二层交换的基础知识 1.2.1:二层交换机最基本的功能 ...

  6. mysql5.6.40单实例安装二进制快捷安装

    mysql5.6.40单实例安装二进制快捷安装 近期因不同环境需要不同版本的mysql实例,故为了方便操作,特此记录下来,方便自己查找. # 1.1.Centos最小化安装推荐常用依赖包 yum cl ...

  7. MySQL5.7单实例二进制包安装方法

    MySQL5.7单实例二进制包安装方法 一.环境 OS: CentOS release 6.9 (Final)MySQL: mysql-5.7.20-linux-glibc2.12-x86_64.ta ...

  8. openstack之Neutron网络模式vlan,gre,vxlan详解

    第一:neutron openvswitch + vlan虚拟网络 一:基础知识 vlan基础知识 1.vlan介绍 1.1:首先说下lan,LAN 表示 Local Area Network,本地局 ...

  9. Neutron 理解 (2): 使用 Open vSwitch + VLAN 组网 [Neutron Open vSwitch + VLAN Virtual Network]

    学习 Neutron 系列文章: (1)Neutron 所实现的虚拟化网络 (2)Neutron OpenvSwitch + VLAN 虚拟网络 (3)Neutron OpenvSwitch + GR ...

随机推荐

  1. WPF MVVM 架构 Step By Step(6)(把actions从view model解耦)

    到现在为止,我们创建了一个简单的MVVM的例子,包含了实现了的属性和命令.我们现在有这样一个包含了例如textbox类似的输入元素的视图,textbox用绑定来和view model联系,像点击but ...

  2. .NET使用HttpWebRequest发送手机验证码

    namespace SendSMS { class Program { static void Main(string[] args) { string phone = "13770504x ...

  3. Discuz更改默认搜索模块

    由于网站使用DZ的侧重点不同,在搜索中可能需要更改默认搜索模块 首先找到模板中搜索模块对应的文件,默认模板中搜索模块的地址是 template\default\common\pubsearchform ...

  4. .NET Core程序中使用User Secrets存储敏感数据

    前言 在开发中经常会用到一些敏感数据,比如AppSecret或数据库连接字符串,无论是硬编码还是写在配置文件中,最终都要push到svn或git上.对于开源项目,这些敏感数据就无隐私可言了,对于私有项 ...

  5. 如何远程调试zookeeper集群

    我们在阅读一些源码的时候,如果能调试源代码将会大大的提高我们的阅读效率.最近在学习zookeeper源码,分享下如何调试zookeeper集群. zookeeper代码,调试环境搭建 1.下载zook ...

  6. ASP.NET Core 源码学习之 Options[3]:IOptionsSnapshot

    在 上一章 中,介绍了 IOptions 的使用, 而我们知道,在ConfigurationBuilder的AddJsonFile中,有一个reloadOnChange参数,设置为true时,在配置文 ...

  7. php导入csv文件

    <?php /** * Created by PhpStorm. * User: hanks * Date: 2017/4/30 * Time: 13:24 */ include 'header ...

  8. Swift大写和小写字符串

    您可以通过字符串的 uppercaseString 和 lowercaseString 属性来访问一个字符串的大写/小写版本. 复制纯文本新窗口 let normal = "Could yo ...

  9. meta小结

    mate 标签定义及使用说明 元数据(Metadata)是数据的数据信息. 标签提供了 HTML 文档的元数据.元数据不会显示在客户端,当时会被浏览器解析. META元素通常用于指定网页的描述,关键词 ...

  10. .NetCore+Jexus代理+Redis模拟秒杀商品活动

    开篇叙 本篇将和大家分享一下秒杀商品活动架构,采用的架构方案正如标题名称.NetCore+Jexus代理+Redis,由于精力有限所以这里只设计到商品添加,抢购,订单查询,处理队列抢购订单的功能:有不 ...