chunjihong 发表于 2015-10-11 08:54:22

OpenStack Neutron问题调试的一点点心得

  在OpenStack方面也工作了一年多了,有一点点心得。终于有时间记录下来,希望对别人能有一点点帮助。不对的地方请赐教,我先谢了。
  


  下面我简单介绍一下Neutron网络从虚机到默认网桥br-int的路径和涉及到的一些概念,这样有助于对Neutron安装中问题的调试。简单来说,虚机的网卡会连接到一个由Neutron创建的Linux Bridge上,然后通过一对veth pair连接到OpenVSwitch(ovs)的bridge(一般默认为br-int)上。根据您的配置,从br-int上又可以连接到外部网络或者其他OpenStack tenant network。为什么要用一个Linux Bridge,而不是ovs bridge,是因为Neutron的Security
Group机制使用的iptables技术,它只能用在Linux Bridge上。
  





  


  1. 找出虚机(demo9)的ID
  

# nova show demo9
+--------------------------------------+------------------------------------------------------------+
| Property                           | Value                                                      |
+--------------------------------------+------------------------------------------------------------+
| OS-DCF:diskConfig                  | MANUAL                                                   |
| OS-EXT-AZ:availability_zone          | nova                                                       |
| OS-EXT-SRV-ATTR:host               | x.x.x.x                        |
| OS-EXT-SRV-ATTR:hypervisor_hostname| x.x.x.x                        |
| OS-EXT-SRV-ATTR:instance_name      | instance-00000009                                          |

  
  2.用虚机的ID找出网卡的ID。虚机的网络配置可以从libvirt的配置中读到。

# cat /etc/libvirt/qemu/instance-00000009.xml|grep -b3 tap
2523-    <interface type='bridge'>
2553-      <mac address='fa:16:3e:37:c0:2b'/>
2594-      <source bridge='qbr6298f624-95'/>
2634:      <target dev='tap6298f624-95'/>
2671-      <address type='pci' domain='0x0000' bus='0x00' slot='0x03' function='0x0'/>
2753-    </interface>
2770-    <serial type='file'>
  



3.从Linux Bridge的信息中可以看到网卡连接到了qbrxxx的网桥上,然后上面还有一个端口qvbxxx

# brctl show
bridge name   bridge id               STP enabled   interfaces
qbr6298f624-95          8000.aa9a367d02ec       no            qvb6298f624-95
tap6298f624-95

  4.qvbxxx和qvoxxx形成了一个veth pair。veth pair是两个连接在一起的端口,就像一根铜线,从一个端口进入的数据,会从另外一端出来。
  

# ip -d link show|grep -b3 6298f624-95
1026-    link/ether d2:07:58:f8:11:3f brd ff:ff:ff:ff:ff:ff
1081-20: tep2: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc noqueue state UNKNOWN
1163-    link/ether c6:af:e2:f7:3f:da brd ff:ff:ff:ff:ff:ff
1218:23: qbr6298f624-95: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc noqueue state UNKNOWN
1310-    link/ether aa:9a:36:7d:02:ec brd ff:ff:ff:ff:ff:ff
1365:24: qvo6298f624-95: <BROADCAST,MULTICAST,PROMISC,UP,LOWER_UP> mtu 1500 qdisc pfifo_fast state UP qlen 1000
1472-    link/ether 8a:5c:1c:6c:81:12 brd ff:ff:ff:ff:ff:ff
1527-    veth
1537:25: qvb6298f624-95: <BROADCAST,MULTICAST,PROMISC,UP,LOWER_UP> mtu 1500 qdisc pfifo_fast state UP qlen 1000
1644-    link/ether aa:9a:36:7d:02:ec brd ff:ff:ff:ff:ff:ff
1699-    veth
1709:26: tap6298f624-95: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc pfifo_fast state UNKNOWN qlen 500
1812-    link/ether fe:16:3e:37:c0:2b brd ff:ff:ff:ff:ff:ff

  
  


  如果不太清楚veth pair的配对,可以用ethtool找出另外一端的ID号(例如 25: qvb6298f624-95)
  

# ethtool -S qvo6298f624-95
NIC statistics:
peer_ifindex: 25



  

5.veth pair的一端最后接在了br-int上。  

# ovs-vsctl show|grep -b3 6298f624-95
1001-      Port br-int
1021-            Interface br-int
1050-                type: internal
1081:      Port &quot;qvo6298f624-95&quot;
1111-            tag: 1
1130:            Interface &quot;qvo6298f624-95&quot;
1169-    Bridge br-tun
1187-      Port &quot;gre0&quot;
1207-            Interface &quot;gre0&quot;

  了解了Neutron网络的路径,有利于我们排查网络路径上的问题。假定我们给虚机分配的IP为10.0.20.2/24。将一个不用的IP付给所在linux bridge即可ping通虚机。
  

# ifconfig qbr6298f624-95 10.0.20.100/24
# ping -c3 10.0.20.2
PING 10.0.20.2 (10.0.20.2) 56(84) bytes of data.
64 bytes from 10.0.20.2: icmp_seq=1 ttl=64 time=3.93 ms
64 bytes from 10.0.20.2: icmp_seq=2 ttl=64 time=0.572 ms
64 bytes from 10.0.20.2: icmp_seq=3 ttl=64 time=1.73 ms

  


  另外利用Neutron提供的neutron-debug工具也可以检查tenant网络的连通性。neutron-debug可以在指定的网络中加入测试端口(probe),用来执行命令。probe创建后的ID可以从probe-list中得到。
  # export NEUTRON_TEST_CONFIG_FILE=/etc/neutron/l3_agent.ini
#neutron-debug probe-create 9f6b9038-6738-4222-ba2e-84304a182c38
# neutron-debug probe-exec e84d33b8-9230-485b-8988-cc8090173499 'ping -c3 10.0.10.2'
PING 10.0.10.2 (10.0.10.2) 56(84) bytes of data.
64 bytes from 10.0.10.2: icmp_seq=1 ttl=64 time=0.086 ms
64 bytes from 10.0.10.2: icmp_seq=2 ttl=64 time=0.069 ms
64 bytes from 10.0.10.2: icmp_seq=3 ttl=64 time=0.093 ms





  
  


  


  参考文章
  OpenStack Networking Troubleshooting


  scottlowe blog



版权声明:本文为博主原创文章,未经博主允许不得转载。
页: [1]
查看完整版本: OpenStack Neutron问题调试的一点点心得