虚拟机未分配IP地址的问题

尽管为了提高VM启动性能,可以采取静态固定IP的方式来取代DHCP,但私有云当中还是有些环境依旧保留有DHCP方式,在并发进行云主机生命周期的时候,偶尔出现有未正常分配IP地址的情况,这部分需要好好分析下

这里说的涉及到DHCP的问题,首先主机这边应该能够查询到对应PORT的IP地址,但是在虚拟机内部,网卡的IP地址却为空,此时分析的大概流程如下

1:dhclient获取一次,通过dhclient -v $nic

2:如果dhclient获取失败,这时候继续发请求,在节点机上通过抓包工具抓取对应tap设备67端口的包,关注MAC地址

3:如果抓包只有request,却没有reply,可以查下对应的network,以及其对应的dhcp-agent节点是否都正常

4:如果都正常,那么就登陆到dhcp-agent节点上,进入namespace,在这边抓67端口的包,这里namespace和router类似,只不过是dhcp port

$ sudo ip netns exec qdhcp-$network_id ip a
1: lo:  mtu 65536 qdisc noqueue state UNKNOWN group default
    link/loopback 00:00:00:00:00:00 brd 00:00:00:00:00:00
    inet 127.0.0.1/8 scope host lo
       valid_lft forever preferred_lft forever
    inet6 ::1/128 scope host
       valid_lft forever preferred_lft forever
61: tap94fbda2b-73:  mtu 1500 qdisc noqueue state UNKNOWN group default qlen 1000
    link/ether fa:16:3e:03:c0:36 brd ff:ff:ff:ff:ff:ff
    inet 10.180.65.235/23 brd 10.180.65.255 scope global tap94fbda2b-73
       valid_lft forever preferred_lft forever
    inet6 fe80::f816:3eff:fe03:c036/64 scope link
       valid_lft forever preferred_lft forever

抓个包瞧瞧

$ sudo ip netns exec qdhcp-$network_id tcpdump -i tap94fbda2b-73 port 67 -en
tcpdump: verbose output suppressed, use -v or -vv for full protocol decode
listening on tap94fbda2b-73, link-type EN10MB (Ethernet), capture size 65535 bytes
^C

5:如果这时候还是没有reply的包,那么还是在dhcp-agent节点上,查看network进程

$ ps aux | grep $network_id

进程参数里查找一个文件的关键字

--dhcp-hostsfile=/data/neutron/dhcp/$network_id/host

然后在这个文件当中检索MAC地址,查找有无release等信息,以及和IP地址的对应关系

6:如果现在还没找到问题,就在dhcp-agent节点机上,查看/var/log/syslog日志

到现在,我就技穷了

今天就碰到了,最后通过重启dhcp-agent,问题就恢复正常了,不晓得哪位大神遇到过这个问题没~!

发表评论