• neutron 层次绑定 +binding_levels


     next_segments_to_bind

    301     def continue_binding(self, segment_id, next_segments_to_bind):
    302         # TODO(rkukura) Verify binding allowed, segment in network
    303         self._new_bound_segment = segment_id
    304         self._next_segments_to_bind = next_segments_to_bind

       当ovs-agentbind_port时,kilo版本会查找driver依次绑定,M版本之后就不再支持。这儿可以先调用自己的mechaism机制,将vxlan ID下发到交换机上,然后设置continue_binding变量,继续将vlan ID绑定到ovs上。

     防止重复绑定

    context._new_bound_segment


    //一类
    segments_to_bind,遍历所有的driver

    def _bind_port_level(self, context, level, segments_to_bind): ......
    for driver in self.ordered_mech_drivers: if not self._check_driver_to_bind(driver, segments_to_bind, context._binding_levels):continue try: context._prepare_to_bind(segments_to_bind) driver.obj.bind_port(context) segment = context._new_bound_segment if segment: context._push_binding_level( models.PortBindingLevel(port_id=port_id,host=context.host, level=level,driver=driver.name,segment_id=segment)) next_segments = context._next_segments_to_bind if next_segments: # Continue binding another level. if self._bind_port_level(context, level + 1,next_segments): //递归 return True else: LOG.warning(_LW("Failed to bind port %(port)s on " "host %(host)s at level %(lvl)s"), {'port': context.current['id'],'host': context.host,'lvl': level + 1}) context._pop_binding_level() else: # Binding complete. ...... return True
    首先会遍历每个ml2 driver(例如openvswitch,networking-huawei等),调用_check_driver_to_bind,遍历每个context._binding_levels中的level,如果该level.segment_id在segments_to_bind里面以及level.driver与当前driver匹配的话,将会退出该driver的绑定流程,进行下一个driver的绑定。简单总结一下:就是在同一个driver上不能绑定相同的segment_id。
    
    当然,如果是层次化绑定的话,需要higher level的driver将分配的segment_id通过continue_binding()传递给bottom level的driver。各种driver进行端口绑定的过程就不详细分析了,主要就是获取host中运行的alive状态的agent,如果agent的信息符合绑定的需求(如检验network_type),就会将该agent信息写入端口绑定信息里(vif_type:ovs,vif_details)。nova创建虚机,需要获取vif_type:ovs,vif_detail信息。
    
     

    华为层次绑定

    http://support-it.huawei.com/docs/zh-cn/hcs-kb/netword-maintence-manual/maten_provision_00000356.html

    网卡层次化绑定

    概述中提到过AC插件会对vxlan网络进行层次化绑定。AC会在每一台主机上给每一个vxlan网络分配一个vlan, 该网络下的虚拟机在主机上走vlan通信,在交换机上走vxlan通信。如何查询AC绑定的vlan是多少呢?

    F6.3&6.5部分版本已经将层次化绑定信息直接显示在了port的信息中,如下图,层次化绑定正常的话能看到vxlan和vlan的两条信息

    如果这里只显示了一条vxlan的信息,可以直接找AC侧定位为何层次化绑定异常

    有的版本可能没有任何显示,这时候可以通过查数据库的方法查看,如下:

    1. 登录FusionSphere OpenStack后台控制节点执行以下命令,查询gaussdb的主节点

      cps template-instance-list --service gaussdb gaussdb

    2. 登录到步骤1查询的gaussdb主节点,并进入neutron数据库,密码跟导环境变量的默认密码一致

      su gaussdba

      gsql neutron

    3. 登录数据库后,执行以下命令查询该虚拟网卡的绑定层次。

      select * from ml2_port_binding_levels where port_id='<port_id>';

      再次执行以下命令,查询层次化绑定的segmentation_id,即vlan。

      select * from ml2_network_segments where id='<segment_id>';

      如上图,ID为ca7f83b4-cca1-4b0f-81f7-7f3df4c0facf的端口进行了两层绑定,0层为AC绑定,1层为ovs绑定。虚拟机在主机上通信走vlan网络,vlan号为 617 ,物理网络平面为 physnet1 。 如果vxlan网络下的虚拟机只有一层绑定,或者在虚拟机所在主机的物理口进行抓包所带vlan与在数据库中查询到的segmentation_id不一致,找AC同事进行定位。

    openstack层次化端口绑定特性(Hierarchical Port Binding)通过在不同的计算节点服务器上建立各自独立的VLAN到VXLAN映射表项,实现VXLAN(二层网络域)数量4096个的突破。

        为了实现这个功能,需要在计算节点和接入交换机上使能LLDP,使得控制器可以建立计算节点服务器和LEAF设备接入端口的对应关系。

        常规机架式服务器计算节点正常配置LLDP即可,但是当LEAF交换机下面连接的是刀框式服务器情况就有点特殊了。刀框上的刀片服务器通过刀框上自带的接入模块上联到LEAF接入交换机上。接入模块通常分为两种:交换机或者网络直通模块。其中直通模块效果上可以理解为网线扩展。

        在刀框上接入模块是交换机的时候,由于LEAF交换机需要和计算节点建立LLDP邻居,那么中间的刀框交换机就需要配置为LLDP报文透传。

    配置步骤

    可能我们会配置STP生成树报文透传,只需要在交换机上配置

    [SWA]undo stp global enable

    即可,由于关闭了STP,STP协议报文不会再上送CPU处理,被正常业务报文处理。

     那么LLDP报文透传也是这么配置吗?其实稍有区别:

    全局关闭LLDP:

    [SWA]undo lldp global enable

    接口下开启LLDP报文透传:

    [SWA]l2protocol lldp tunnel dot1q

    (一定要配置)

        

    配置关键点

        完成上述配置后LLDP报文可以在刀框交换机上透传,并可以用VLAN技术进行隔离。可以正常配置Openstack 层次换端口绑定特性。

  • 相关阅读:
    DOM操作创建表格
    基于insertBefore函数编写insertAfter函数
    兼容浏览器将NodeList对象转换为数组
    创建对象
    对象属性
    常用命令
    play framework
    Intellij Idea 15 注册方法
    eclipse 背景色调整,设置成护眼色(豆沙绿)
    查看Eclipse版本号,及各个版本区别
  • 原文地址:https://www.cnblogs.com/dream397/p/13353346.html
Copyright © 2020-2023  润新知