zoukankan      html  css  js  c++  java
  • Openstack的nova-network的vlan模式扩展

    openstack的nova-network的vlan模式是可以在安装的时候,将网络划分为多个子网,每个项目一个或者多个子网进行虚拟机创建。
    但是他现在代码级别上不支持:如果一开始安装的环境的vlan网段数目太少,后面使用要进行扩展的话容易出现问题。

    场景
    我们的场景是开始只建立一个vlan网段用于fixed_range(172.17.51.0/24,vlanID:51),num_networks=1,现在我们要加一个网络,vlanId 52,除了在物理交换机上要配置该虚拟网络,计算节点要使用trunk口以外,还需要在openstack集群中使用命令:

    nova-manage network create --lable vlan52 --fixed_range_v4 172.17.52.0/24 --vlan 52 --project_id 80c29c88d3c349a78d4ed558e224eac4

    执行完成以后,我们使用命令查看:

    [root@node-8 ~]# nova-manage network list
    id IPv4 IPv6 start address DNS1 DNS2 VlanID project uuid 
    1 172.17.51.0/24 None 172.17.51.3 218.6.200.139 8.8.4.4 51 80c29c88d3c349a78d4ed558e224eac4    e8df9310-ba2c-45a8-9645-6d6d045da71e
    14 172.17.52.0/24 None 172.17.52.3 8.8.4.4 None 53 80c29c88d3c349a78d4ed558e224eac4    eada580e-cf13-42d5-9c4e-b8e5c61de6d

    请注意上面的结论的VlanID的值,虽然我们输入的vlan是52,但是这里的VlanID却是53,为什么?
    当然,为什么我在这里纠结这个vlanID呢,因为在网络节点上创建br网桥,vlan都需要这个vlantag来进行数据的封包,如果他不正确,虚拟实例将无法ping到网关,也无法ssh连接。

    实际测试中我还建立了其他环境,而那个环境一开始就有4个网络,我们如果指定的vlan是51,那么vlanID的最终数据库存储将是54,结论很明显,我新建立一个vlan,将使用已有的vlan的数量+我输入的vlanID,不明白为什么这样弄,不符合我们新创建的vlan的ID的增加顺序。

    源码跟踪:

    if CONF.network_manager == 'nova.network.manager.VlanManager':
    1190 vlan = kwargs.get('vlan', None)
    1191 print kwargs
    1192 if not vlan:
    1193 print num_used_nets
    1194 index_vlan = index + num_used_nets
    1195 print index_vlan
    1196 #vlan = kwargs['vlan_start']
    1197 vlan = kwargs['vlan_start'] + index_vlan
    1198 used_vlans = [x['vlan'] for x in nets]
    1199 print used_vlans
    1200 if vlan in used_vlans:
    1201 # That vlan is used, try to get another one
    1202 used_vlans.sort()
    1203 vlan = used_vlans[-1] + 1



    这是/usr/lib/python/site-package/nova/network/manager.py的内容,而vlanID不正确也正是这段代码导致的.这里我了几个print。执行我们前面的创建虚拟网络的命令,将打印:

    ...
    1
    1


    即index_vlan=1,used_vlans=[51L],
    修改方法:
    将1197行的vlan=kwargs['vlan_start']+index_vlan修改为vlan=kwargs['vlan_start']
    将原来创建的网络关联删除,使用命令:

    nova network-disassociate network-id
    nova-manage network delete network-id

    重新执行网络创建命令,将可以得到正确的vlanID,而且还能在后续的虚拟机创建后,虚拟机能使用该fixed_range到达实例。

    最后,原来这是一个nova官方已发现的bug:

    https://bugs.launchpad.net/nova/+bug/1288609

    修改方法就不一样了。

  • 相关阅读:
    Binary Tree Inorder Traversal
    Populating Next Right Pointers in Each Node
    Minimum Depth of Binary Tree
    Majority Element
    Excel Sheet Column Number
    Reverse Bits
    Happy Number
    House Robber
    Remove Linked List Elements
    Contains Duplicate
  • 原文地址:https://www.cnblogs.com/CLTANG/p/3860455.html
Copyright © 2011-2022 走看看