博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
OpenStack Liberty版本network troubleshooting
阅读量:4230 次
发布时间:2019-05-26

本文共 2759 字,大约阅读时间需要 9 分钟。

OpenStack Liberty版本network troubleshooting

目前已经有很多介绍OpenStack新特性以及OpenStack网络详解等文章,但是对于Liberty的Network_Troubleshooting的文章还是很少。虽然L版本使用的plugin已经不是OpenvSwitch了,改成了Linuxbridge,性能并没有提高很多,rackspace提供理由如下Looking for reliability and stability,Less moving parts,Easier to troubleshoot这样已经使得Troubleshooting变得容易很多,但是网络部分仍然是最容易出错的部分。这篇文章是以真实的环境一步一步Troubleshooting的,几乎能解决所有的的常规网络问题。

我使用的网络架构如下图,但是我把controller和network节点放在一台机器上,compute节点单独一台机器(官网文档也是这么做的),一张管理+内部网络,一张外网网络。

注意点:如果你把一个网卡作为vxlan的end point,那么就不能作为一个外网的出口,因为加入到网桥的接口是作为二层接口来看待的,因此没有IP地址,也就是说网络节点没有了IP地址了,成为了为一台二层设备了,不能进行任何的三层(IP网络)操作了。
If eth1 is used for the vxlan tunnel end points, it can't also be used in a bridge ala provider_bridge_mappings. You should have a dedicated interface or a vlan interface off eth1 (i.e. Eth1.20) that is dedicated to the overlay traffic. Move the local_ip address to that interface on respective nodes. Verify that you can ping between nodes at each address. If this doesn't work, the Neutron pieces won't work.

下面是network节点的详细组件图,接下去的debug都是基于这些tap,port,linuxbridge进行的。提供了4张图,可以对应起来看。

流量从compute节点到图中的eth接口,再到tap,然后进入router的qr接口,最后从qg接口出外网
Compute节点中流量从instance(vm)eth口出来,进入compute节点的tap接口,从而进入Linuxbridge,再通过vxlan vtep(linux bridge目前不支持gre),如图中的eth,进入controller节点
安装完成之后,我们先看compute节点,出现了virbr0,这个是libvirt networking,为了debug方便可以disable libvirt networks,这对OpenStack网络没有影响。

链接如下:

操作之前确定服务是否正常启动
启动一个实例。绑定floating ip一直ping 8.8.8.8,但是我的floating ip状态不对,开始debug
在compute节点上运行brctl show,可以看到vxlan的id是63,一个tap是连接qdhcp的,一个是连接controller节点的。

可以看到有ping包从vxlan出去,进入controller节点,在controller的linuxbridge tap上也看到了ping包,那么说明ping包从compute节点到了controller节点。

在controller节点上sudo ip netns list,我们现在要去qrouter这个namespace上进行debug

可以看到出现qrouter这个namespace

可以看到这个qrouter的三个接口,可以对照上文的架构图分析,我对其中的一个接口进行tcpdump

可以看到有instance发出的ping包,那么这个compute1的ping包确实到达了controller的qrouter的namespace里面,但是出不去,那么看一下qrouter的路由表

路由表正常,应该从qg这个接口出外网,继续tcpdump qg接口

ping也ping不通,那么instance过来的流量当然出不去
发现找不到192.168.51.97这个网关

那么我看一下linuxbridge的接口,brctl show,发现没有出去的接口

那么我需要手动加上外网接口 brctl addif brq494427aa-2d eth1(官网没有提到,可能是个bug)
那么我现在qrouter可以ping通外网了
加上这个接口eth1
Instance也ping通了

总结:

1.OpenStack社区在网络这一块选择了更加stable的Linuxbridge来代替功能更为丰富的OpenvSwitch
2.在OpenStack Libery更加容易debug的同时,网络仍然是最容易出问题的部分
3.在网络出现故障的时候需要熟练使用tcpdump等工具在Linuxbridge接口和qrouter、qdhcp等namespace的接口上抓包进行分析,精确地找到问题的所在。

转载地址:http://rznqi.baihongyu.com/

你可能感兴趣的文章
MySQL 表结构与键值
查看>>
MySQL存储引擎,表记录管理
查看>>
Mysql多表查询语句,授权用户与密码更改
查看>>
MySQL 备份与恢复
查看>>
采用IC传感器的相对湿度测量
查看>>
皮带传动实验
查看>>
微软的人才观
查看>>
Blizzard的MPQ文件格式搜索算法
查看>>
你的变量究竟存储在什么地方?
查看>>
s3c2410 中断异常处理(转)
查看>>
对张孝祥C语言试题其中一题的探讨 (转载)
查看>>
一些好的网站
查看>>
WinCE中的虚拟地址和实际的物理地址是如何对应
查看>>
Microsoft Windows CE 的内存使用
查看>>
makefile入门
查看>>
中科院计算所Goddon CPU诞生历史!牛!
查看>>
ispPAC
查看>>
为人处世小技巧
查看>>
结构体知识汇总
查看>>
内存操作越界略述
查看>>