1、查看物理机的网桥和端口:

ovs-appctl dpif/show

查找server虚拟机的ply网桥 ovs-appctl dpif/show | grep 3dc0dfc1-ad -A 2 我是图片

数据通道命令(datapath) 这些命令管理逻辑数据通道。类似ovs-dpctl的命令。

  • dpif/dump-dps 在多行中显示所有配置的datapath名称
  • dpif/show[dp….] 打印dp的汇总信息,包括dp的状态还有连接上的端口列表。端口的信息包括openFlow的端口号,datapath的端口号,以及类型(本地端口被标识为openflow port 65534) 如果指定了一个或多个datapath,将只显示指定的这些dp的信息。否则,则显示所有dp的信息。
  • dpif/dump-flows dp 想控制端打印dp中流表的所有条目。 这个命令主要来与debugOpen Vswitch.它所打印的流表不是openFlow的流条目。它打印的是由dp模块维护的简单的流。如果你想查看OpenFlow条目,请使用ovs-ofctl dump-flows。dpif/del-fow dp 删除指定dp上所有流表。同上所述,这些不是OpenFlow流表。

2、查看简单的精确流表(是动态的)

ovs-appctl dpif/dump-flows ply3dc0dfc1-ad

我是图片 参数注释 我是图片

3、查看datapath

DPDK目前有两个datapath,内核态的只有一个。DPDK查看需要制定datapath进行查看。 #ovs-appctl dpctl/dump-dps

这个在第一步ovs-appctl dpif/show 也有显示

4、追踪对应datapath上的流表

根据第2步查出的规则,选择到packets前面的内容

ovs-appctl ofproto/trace ovs-netdev “流表内容(packets前面)”

ovs-netdev是datapath,由第三步找到。

我是图片 这个流在bridge(“br-int”)上面没有找到对应的mac,于是泛洪,在brcps上被drop,在br-tun上…

5. 查看网桥上面的mac和port的转发规则

注意到第4步的mac地址是 dl_src=fa:16:3e:4b:2a:c3,dl_dst=fa:16:3e:7c:05:12 查询网桥上面的mac记录:(目的mac2a:c3走41口,目的mac05:12走42口)

我是图片

查看端口的名称 我是图片

虚拟机内流量走向(网桥和端口位置) 我是图片

其他

由于公司网络限制,图片传不出来。

ovs-ofctl dump-flows ply4fdf1e98-e4 table=0 查看网桥的某个table里具体的规则

参考:

  • Neutron L2数据面,同节点流量wiki block
  • ovs-appctl 用户手册中文翻译 https://blog.csdn.net/bestjie01/article/details/50833560
  • 【DPDK】追踪查看精确流表 block

题目起的宽了,心有点虚。放个链接吧 Python 多线程threading 多线程编程必须操作int str等变量的话只能加锁。如果是计数的需求,Python的list.append list.pop是线程安全的。因此可以用list.append(‘type1’) 这种来计数,使用list.count(type1)来达到计数目的。

题外话

双11啥也没买,印证了那句话:多打几份工不会让你变有钱,但可以让你没时间花钱。苦笑

杭州渐渐变冷了,反应有点迟滞的我没添衣服,骑电动车通勤被冻地瑟瑟发抖。


创建的LB如果不指定tenant_id console上面是看不到的,以下命令大部分都能指定租户ID:--tenant_id 9fbf9f44b8e44cd19933ac1fd9b30f49,这个ID是console上面的项目ID,两种查看方法:

  1. console -> 个人设置 -> 项目ID -> ID
  2. cps控制节点:neutron lbaas-loadbalancer-show LB_name

1. 创建VPC和子网

  1. neutron net-create net-liu
  2. neutron subnet-create –name subnet-liu net-liu 10.0.0.0/24 neutron subnet-create –ip-version 6 net-zhong fd00::/112 –name subnet-ipv6

  3. export token=openstack token issue | grep id | grep -v project_id | grep -v user_id | awk '{print $4}' curl -k -X POST https://network.az1.dc1.domainname.com/v2.0/routers -H “User-Agent: python-neutronclient” -H “Content-Type: application/json” -H “Accept: application/json” -H “X-Auth-Token: $token” -d ‘{“router”:{“name”:”router_name”,”external_gateway_info”:{“network_id”:”294ebbf9-29d9-4248-8bc2-15efad6c172b”,”enable_snat”:false},”distributed”:true,”admin_state_up”:true}}’ 其中network_id 一般填写 dummy_external_network 的ID
  4. neutron router-interface-add router_name subnet_name

2. 创建虚拟机镜像和规格

  1. glance image-create –name=”euler” –visibility public –disk-format=qcow2 –container-format=bare –file /opt/HUAWEI/image/kvm_euler_basetemplate-1.25.5.qcow2
  2. nova flavor-create ovs 21 2048 20 2 nova flavor-key 22 set hw:mem_page_size=1048576

  3. nova boot –flavor ovs –nic net-id=net_id –image euler vm_name
  4. nova boot –image euler –flavor ovs –nic port-id=6a3dc5b3-1843-47da-ba35-9720bf6a589a ljn02

3. 放通安全组

默认安全组已放通出方向流量,只用加个入方向。安全组id用 neutron port-show 查看 ![](http://3ms.huawei.com/hi/index.php?app=home&mod=Attach&act=showTempImage&filename=20200813032142145001m378.png)

  1. neutron security-group-rule-create –direction ingress –remote-ip-prefix 0.0.0.0/0 net_id
  2. neutron security-group-rule-create –direction ingress –remote-ip-prefix ::/0 –ethertype ipv6 net_id

4. 创建ELB

依次为创建负载均衡、监听器、后端服务器组、添加后端member、创建健康检查

  1. neutron lbaas-loadbalancer-create –name lbname subnetname

  2. neutron lbaas-listener-create –name lisname –loadbalancer lbname –protocol UDP –protocol-port 400 protocol 可选 HTTP HTTPS TCP UDP

  3. neutron lbaas-pool-create –listener lisname –name pool_name –lb-algorithm SOURCE_IP –protocol UDP
    1. lb-algorithm 分配策略。可选 ROUND_ROBIN、LEAST_CONNECTIONS、SOURCE_IP
    2. protocol 一般同listener
    3. session_persistence :会话保持策略,默认为空。可选
      • tcp: SOURCE_IP
      • http:HTTP_COOKIE/APP_COOKIE
  4. neutron lbaas-member-create –name mem_name –subnet subnetname –address 10.0.0.100 –protocol-port 8000 –weight 1 pool_name
    1. address 后端服务器地址
    2. weight 权重
  5. neutron lbaas-healthmonitor-create –delay 30 –max-retries 3 –timeout 3 –type TCP –pool pool_name –name health_name
    1. 创建healthmonitor要指定pool name
    2. delay 健康检查周期
    3. type可选:TCP HTTP UDP PING (新加HTTPS)
    4. http_method 可选 ‘GET’, ‘HEAD’, ‘POST’, ‘PUT’, ‘DELETE’, ‘TRACE’, ‘OPTIONS’, ‘CONNECT’, ‘PATCH’

以太网二层交换基础

以太网二层交换机的主要功能

  • 使得终端用户能够接入网络;
  • 维护MAC地址表;
  • 数据帧的转发及过滤;
  • 二层环路避免及链路冗余性。

MAC地址

  • MAC地址有48bit,通常被表示为十六进制格式。
  • MAC地址分为单播、组播及广播MAC地址三类。
  • 单播MAC地址全球唯一,由 IEEE对这些地址进行管理和分配。
  • 每个单播MAC地址由两部分组成,其中前24bit代表OUI(组织唯一标识),剩下的24位由厂商自己分配。

VLAN及Trunk的基本概念

VLAN(Virtual Local Area Network)即虚拟局域网,是将一个物理的LAN在逻辑上划分成多个广播域的通信技术。VLAN内的主机间可以直接通信,而VLAN间不能直接互通,从而将广播报文限制在一个VLAN内。

为什么需要VLAN

  • 缺省时,整台交换机的所有端口均属于同一个广播域。
  • 当网络中的交换机数量特别多时,广播域将变得特别庞大,网络中可能充斥着大量广播。
  • 无法根据业务需求灵活的规划网络逻辑单元。

VLAN 知识点小结

  • 一个VLAN中所有设备都是在同一广播域内,不同的VLAN为不同的广播域。
  • VLAN之间互相隔离,广播不能跨越VLAN传播,因此不同VLAN之间的设备一般无法直接互访(二层互访),不同VLAN间需通过三层设备实现相互通信。
  • 一个VLAN一般为一个逻辑子网。
  • VLAN中成员多基于交换机的端口分配,所谓的VLAN划分,通常指的是将交换机的接口添加到特定的VLAN中,从而该接口所连接的设备也即加入到了该VLAN。
  • VLAN是二层交换机的一个非常基本的工作机制。
  • Access接口:
    • Access接口只能加入一个VLAN,该种类型的接口通常用于连接PC、服务器及路由器等设备。
    • 接收帧:不带tag则打上端口的pvid,同pvid接收、不同丢弃
    • 发送帧:剥离tag
  • Trunk接口:
    • Trunk接口可以加入多个VLAN,可以收发多个VLAN的报文。一般用于交换机之间的互联接口,也用于交换机与以太网子接口对接。
    • 接收帧:不带tag则打上接口PVID,此时若PVID在允许通过的VLAN列表里,则接收该帧,否则丢弃;缺省时PVID为1,且1在allow-pass VLAN 列表中;如果带tag,在allow-pass 列表中则接收否则丢弃。
    • 发送帧:
      • 若VLAN-ID与接口PVID相同,且该VLAN-ID在allow-pass VLAN列表中,则去掉Tag,发送数据帧。
      • 若VLAN-ID与接口PVID不同,且该VLAN-ID在allow-pass VLAN列表中,则保持原有Tag,发送该带tag的数据帧(标记帧)。
  • Hybrid端口:
    • 接收帧:
      • 若数据帧不带tag,打上接口PVID,若PVID在允许通过的VLAN列表里,则接收该帧,否则丢弃。
      • 若数据帧带tag,且VLAN-ID在接口允许通过的VLAN列表里,则接收该报文。否则丢弃该报文。
    • 发送帧:
      • 若VLAN-ID在接口允许通过的VLAN列表里,则发送该帧。可以通过命令设置发送时是否携带Tag。

VLAN及Trunk的基本配置

# 创建VLAN10及VLAN20:
[SW1] vlan batch 10 20
# 将GE0/0/1配置为access类型,并加入VLAN10:
[SW1] interface gigabitEthernet0/0/1
[SW1-gigabitEthernet0/0/1] port link-type access
[SW1-gigabitEthernet0/0/1] port default vlan 10
# 将GE0/0/2配置为access类型,并加入VLAN20:
[SW1] interface gigabitEthernet0/0/2
[SW1-gigabitEthernet0/0/2] port link-type access
[SW1-gigabitEthernet0/0/2] port default vlan 20
# 将GE0/0/24口配置为trunk类型,并且放行VLAN10及VLAN20:
[Quidway] interface gigabitEthernet0/0/24
[Quidway- gigabitEthernet0/0/24] port link-type trunk
[Quidway- gigabitEthernet0/0/24] port trunk allow-pass vlan 10 20

当前文章广泛存在着:质量不高、内容不多、结构分散的问题,下次一定改。

nova是OpenStack的计算组件。 曾经面试时候被问到“虚拟机有几种状态?”,我只回答了“运行中,关机,重启”这几个从PC上得来的知识。实际上还有“删除,冷迁移,热迁移”等等。

虚机创不出很多是flavor(规格)的原因。flavor的extra_specs字段会过滤底层的host-list(即给选中此规格的虚机加上标签,只有符合这个标签的host会被选中),比如”resource_type”: “IOoptimized”就指定使用IO密集型的host。

  1. 对于没创建成功的虚机,一般使用如下命令查找虚机ID。–all-t表示在级联层查找
    nova list --all-t --deleted |grep <vm_name>
    
  2. 查找该虚机的所有操作的 请求ID 日志里面有虚机所在的计算节点,可以去该节点查看详细的nova-scheduler日志,貌似涉密?不提了。
    nova instance-action-list <vm_id>
    # 查看某个请求的详细日志
    nova instance-action <vm_id> <req_id>
    
  3. 更改flavor的标签
    nova flavor-show c48b71af-3edd-4b6e-b8df-7499bbe34854
    nova flavor-key 2u2g_elb set service_om_match=az0.dc0_2
    
  4. 虚拟机冷热迁移
    # 热迁移
    nova live-migration <vm_id>
    # 冷迁移,需要resize-confirm 
    nova migerate <vm_id>
    nova resize-confirm <vm_id>