环境是 nova-network +vmware+flatdhcp

错误表现为 开出来的虚拟机有一定几率获取不到dhcp地址,手工赋予ip则正常,用flat模式注入的ip正常,下面是排错过程

1首先找网络

 防火墙已经把 dnsmasq对应的端口已经打开

 抓包结果:wKiom1fV-RayJKR1AACZtZ4jZNs632.png-wh_50

  可以看到虚拟机dhcp 已经发到br100上面,但是br100 没有返回,基本可以排除网络原因

2 找dhcp 原因

首先kill掉 nova启动的 dnsmasq进程,手工去启一个dnsmasq,虚拟机是正常的。

其次 查看 dnsmasq 的日志

有如下 报错

Sep 12 08:32:31 centos-6568 dnsmasq[1947]: bad DHCP host name at line 3 of /var/lib/nova/networks/nova-br100.conf

Sep 12 08:32:31 centos-6568 dnsmasq[1947]: bad DHCP host name at line 4 of /var/lib/nova/networks/nova-br100.conf

Sep 12 08:32:31 centos-6568 dnsmasq[1947]: bad DHCP host name at line 7 of /var/lib/nova/networks/nova-br100.conf

Sep 12 08:32:31 centos-6568 dnsmasq[1947]: bad DHCP host name at line 8 of /var/lib/nova/networks/nova-br100.conf

 

Sep 12 08:44:41 centos-6568 dnsmasq-dhcp[1947]: DHCPDISCOVER(br100) fa:16:3e:4e:70:42 no address available


谷歌一下,很多人这个问题,但是没解决方案

于是看了下这个这个文件,再对比下同样的环境,使用neutron的文件截图如下

wKioL1fV-vCj6fyxAAAnLZNH1Dg231.png-wh_50

wKiom1fV-vDBHmlCAAAwqysrsho343.png-wh_50


一眼可以看出 出错的行都是hostname 以数字开头的。

知道原因了,在开两台虚拟机 一台以数字开头 一台字母开头 一对比 果然是这个原因:

nova-network +vmware+flatdhcp

这个环境下 nova-network是直接把虚拟机的hostname写进dnsmasq的列表中,但是dnsmaqs不认数字开头的hostname

解决办法: 修改源代码中 这条dhcp插入的方法

 vim /usr/lib/python2.7/site-packages/nova/network/linux_net.py

wKioL1fWCnjzlbigAAB6HRmKZkE874.png-wh_50



改好的效果


wKioL1fWCtHSaIRCAAATlmns7uE644.png-wh_50