网易私有云网络问题案例

到公司也有近一年时间了,或多或少的接触了不少网络问题,其实有很多是共性的。

都说网络的水很深,其实一些基本的问题都是靠经验,也就那么三板斧。
本文就来总结一下最近遇到过的那些常见的网络问题,也希望对各位小伙伴们有所帮助。


1.心跳问题
 心跳出问题的表现一般都是显示为虚拟机操作系统状态不可用。
 我的三板斧如下:
 第一,在虚拟机里执行curl -X PUT -d "state=1" http://169.254.169.254/heartbeat或者curl http://169.254.169.254/infos
查看到私有网网关是否通畅(注:该地址169.254不可ping)
 第二,查看该租户对应的metadata日志文件,比如/data/log/neutron/neutron-ns-meta>    uuid是routerid的,看一下返回值是否为200
 第三,查看对应的metadta-agent,看是否有异常
 第四,查看到nova metadta的通路:/etc/neutron/metadata_agent.ini,里面有个nova_metadata_ip,执行curl nova_metadata_ip:8775

2.vpn问题
windows openvpn问题比较多,若是客户端问题,一般通过重启windows即可解决
vpn退出后,对应的路由表没有清空,这会导致报文路由错误,一般通过到任务管理器里将vpn进程kill以及将对应的tap网卡禁用/启用后解决;
若客户端报错verify failed,有可能是证书过期;可以通过openssl x509 -in ca.crt -noout -text查看证书有效期;
若客户端无法连接vpn server,有可能是网关的ha状态不对,这又包括几种情况:
router不是ha,此时只能改客户端vpn配置文件,使用ip地址来连接;
router是ha,但是有两个master,并且两个master之间无法通信,有可能是keepalived进程死掉了,也可能是节点间的隧道有问题;
router是ha,只有一个master,但是通过ha_state这个文件看到的状态是两个master,
该问题目前未解决,只能手工kill keepavlived进程或者将l3 agent重新绑定一次
vpn可以连接,网关也通,但是虚拟机不通。一般可以查看网关上的iptables规则;极少数情况会发生将自己的虚拟机建到别人租户上的事情。
看一下网关的arp就好了,看看是不是自己网关的地址。这种情况一般是由于租户创建虚拟机的时候使用了带net_service权限的账号
来创建虚拟机,由于前端和umbrealla都没有做network的过滤,就会发生虚拟机建到别人租户上的事情。

3.连通性问题
  案例1:从办公网ping虚拟机的外网ip不通
  这个有可能是镜像问题。首先查看是否虚拟机的防火墙把icmp功能关闭了
  若关闭,则将icmp功能打开
  -A INPUT -p icmp -m icmp --icmp-type 0 -m comment --comment Ping -j ACCEPT
  -A INPUT -p icmp -m icmp --icmp-type 8 -m comment --comment Ping -j ACCEPT
  或者将公网对应的网段打开

  案例2:虚拟机快照引起的ip地址没有更新问题
  这个问题其实很有迷惑性。如果是端口没有获取到ip,那么我们看一眼ip address命令的结果就知道了。
  但是如果该虚拟机是通过快照创建的,那么在dhcp 没有获取到ip后,就会直接使用dhcp lease文件的内容。
  这样我们就能看到端口上是有ip地址的,而其实这个ip地址是错误的。很多时候这会误导我们解决问题的方向。

  案例3:外网ip地址冲突引起的问题
  外网ip已经绑定到虚拟机上,但是ping网关不通。而其他同一个network的端口,绑定到同一个宿主机上的虚拟机上,却没有问题。
  同样的环境,一个通,一个不通,一般可以查一下是不是外网ip地址冲突了(arping可以做这个事情)。
  因为目前我们线下环境的外网网段分配极不规范,极有可能重复分配。


  案例4:虚拟机热迁移引起的外网ip不通问题(机房网ip估计也有类似问题)
  虚拟机迁移之前,外网是通的。热迁移之后,外网很长一段时间内不通,但之后又是可以通的。这说明网络环境本身是好的。
  在热迁移之后,网络不通的时候,若执行一下arping gw_ip,则网络立即就通。
  这种问题一般都是机房的交换机mac地址学习的功能不支持学习非arp报文的mac地址,导致交换机那边的mac地址无法更新端口,
  报文回去的时候还是发到了原来迁移前的宿主机上。
  这个问题目前还未解决,需要在迁移完后触发一下发送arp报文。


  案例5:外网ip挂载后导致wget传输中断问题
  原来只有私有网地址,通过l3 router执行wget获取一个大文件。在这过程中,attach一个外网端口,发现wget中断了好长一段时间。
  若是一直只有私有网端口或者在wget之前外网端口就已经attach上去,则该问题不会出现。(可以看看有没有针对该进程的TIME_WAIT)
  这类问题是由于socket连接的过程中,到目的地的路径发生了改变。原来走私有网端口出去,后来走外网端口出去。
  不过这种问题也看不同的应用程序,不是所有的程序都有这类问题。  

4.ip地址获取问题
  如果虚拟机启动后通过dhclient仍旧无法获取地址,怀疑几个地方:
  虚拟机的tap端口初始化失败,比如ofport为-1;
  dhcp server端口初始化失败;
  vxlan tunnel隧道建立失败;(这个问题在ovs agent上理论上应该不太会发生了,l2pop这边已经做过优化)

5.dns问题
  遇到过几个ping很慢的问题都是dns问题造成;
  tcpdump若打印很慢,可以加-n参数;
  从虚拟机往外网ping很慢,看一下/etc/reslov.conf里的nameserver,看是否这些dnsmasq都可用;
  l3 agent的router add变为backup很慢,因为namespace无法解析域名,keepalived代码里使用了gethostbyname

  这类问题一般可以通过ping 域名和ping ip地址来比较,若有差别,可以更新/etc/hosts文件试试
  nslookup www.163.com命令查询对应关系
  DNS的默认超时时间可以通过查看man resolv.conf,通过设置options timeout:1 attempts:5可以改变超时时间

6.新节点上线
  对于网络来说,要检查几项:
  openvswitch内核模块是否加载,这会导致所有的流表不可用;(lsmod|grep openvswitch)
  neutron agent-list,查看是否alive;
  是否存在多个agent,这会导致流表规则有时存在有时消失;(ps aux|grep openvswitch-agent)
  az有没有正确配置,network和agent所在的az需要一致;
  linux vlan设备是否正确加载,这里也有可能机房的trunk port配置错误;

有些可能写得不对,欢迎大家指正。

网易云新用户大礼包:https://www.163yun.com/gift

本文来自网易实践者社区,经作者陈跃芳授权发布。