强制热迁移虚拟机

虚拟机活跃内存>=16G会导致热迁失败:

#通过虚拟机uuid迁移
openstack server migrate --live node-24.domain.tld 7610362d-fa4f-40db-850c-c89be95d5e36
#查看进度
nova migration-list | grep 7610362d-fa4f-40db-850c-c89be95d5e36
#到95%左右,强制完成迁移
nova live-migration-force-complete 7610362d-fa4f-40db-850c-c89be95d5e36 2583

bfi、bfv区别

信创要求,采购了商业版、魔改后的openstack,经过厂商更新后先后创建虚拟机的启动方式不同,出了少许bug,特此记录:

一、boot from image:一般在/var/lib/nova/instances/实例ID/下有以下三个文件:console.log(控制台日志)、libvirt.xml(实例配置文件)、 xxx-vda。

1、xxx-vda解释:
a、file命令可以查看该文件的格式、大小信息
b、指向某个后端文件(backing file),一般在/var/lib/nova/instances/_base/后端文件ID
c、再通过file命令查看该后端文件,发现包含bootloader、boot sector、partition 1的id、可启动标识active、starthead、startsector、sectors,、offset等信息

2、dashboard查看某个实例关联的启动镜像,一般在/var/lib/glance/images/镜像ID,也通过file命令查看,对比后发现与后端文件相同。

结论:此模式下每个实例的系统盘对应一个独立的、由镜像孵化的磁盘文件。

二、boot from volume:一般情况在/var/lib/nova/instances/实例ID/下有以下两个文件:console.log、libvirt.xml:

1、在dashboard记录实例关联的启动卷ID,进入/var/lib/cinder/volumes/启动卷ID
2、查看后端存储(backing-store),进入/dev/cinder-volumes/启动卷ID
3、再通过fdisk、dmsetup相关命令查看,可以看出映射到了某个块设备/dev/dm-数字

结论:此模式下部分块设备统一成卷,由cinder服务管理,每个实例的系统盘对应一个分发存储卷。

二、三层网络机制

ovs概念

在OpenStack中,QBR(Quantum Bridge)是指基于Open vSwitch(OVS)的虚拟网络设备,它用于连接虚拟机和物理主机之间的通信。QBR是一种内部接口,用于实现虚拟机与底层网络之间的交互。

在OpenStack中,QBR通常是由Neutron服务创建和管理的。当创建一个虚拟机时,Neutron会自动为每个虚拟机创建一个对应的QBR。QBR通过Open vSwitch的integration bridge(通常称为br-int)与虚拟机所在的物理主机进行连接。

QBR的作用是将虚拟机的数据流量引导到适当的网络路径上,以便与物理网络进行通信。当虚拟机发送或接收数据包时,数据包通过QBR进入虚拟交换机(如OVS)并进行处理,然后被转发到物理网络的合适端口上。

除了QBR,还有两个重要的概念与之相关:

QVB(Quantum Virtual Bridge):QVB是QBR的上游连接,用于连接QBR与虚拟交换机(如OVS)之间的通信。数据包从虚拟机进入QBR,并经过QVB传递给虚拟交换机进行处理。

Tap接口:Tap接口是一个虚拟网卡接口,它与QBR关联。当虚拟机创建时,会为每个虚拟机创建一个关联的Tap接口。Tap接口与QBR直接相连,用于将虚拟机的网络流量传递给QBR,从而进入物理网络。

总结起来,QBR是OpenStack中用于连接虚拟机和物理主机之间通信的虚拟网络设备。它通过QVB与虚拟交换机(如OVS)连接,并通过与Tap接口关联,实现虚拟机与底层网络的数据流转。这样能够确保虚拟机能够与物理网络进行正常的通信。

网络种类:

provider network:管理网络,用于平台自身运行所需
tenant network:租户网络,用于云主机业务,进行相应配置后由neutron代管
flat network:平面网络,无vlan,纯二层,只能一个网段内互通信

local network:本地网络,只允许在本服务器内通信的虚拟网络,不能跨服务器,没什么用

VLAN network :一个物理网络通过vlan实现隔离的虚拟网络(甚至ip地址可重复,但实际没人这么用),实现在一个主机(网卡)多个网络互通的功能,对应连接的交换机端口要配置trunk模式,并放通vlan id(1-4096)

GRE、VXLAN:实际没用过;br-tun比较官方地解释是根据 OpenFlow 规则将 VLAN 标记的流量从集成网桥转换为隧道 ID,其实就是根据流表,出去封装id,进来卸载id

网络解析

openstack设置不检查securitygroup openstack常见故障_虚拟网络

同一个物理机上的云主机的流量:

直接通过ovs的br-int桥就可以做交换了

openstack设置不检查securitygroup openstack常见故障_云主机_02


不同物理机上的云主机的流量:

openstack设置不检查securitygroup openstack常见故障_云主机_03


tap在云主机内部查看就是网卡,为什么不通过br-eth0直接桥接到物理机网卡eth0上?是因为通过br-int实现了安全组功能,之间通过veth-pair连接。

openstack设置不检查securitygroup openstack常见故障_2d_04


三层网络流量经过controller节点(网络节点未单独划分),默认网关设置在上面,由其实现三层转发(流量有可能爆表撑死)。即使使用的是二层网络,不用三层,由于也用dhcp功能,也要注意provider network(流经br-int)的网络配置。

流表flow

查看br-int的所有入口:ovs-ofctl dump-flows br-int
OpenFlow定义了一个数据包如何从源到达目的地,规则存储在流表中,是 虚拟交换机的一部分。当一个数据包到达交换机就会被第一个表检查,如果不匹配 flow 表中的任何入口,那这个数据包就会被丢弃或者转发。

参考命令

ovs-vsctl:这是OVS的管理工具,用于管理OVS的交换机、端口、流表等配置。
        ovs-vsctl show:显示当前OVS的配置信息。
        ovs-vsctl add-br <bridge-name>:创建一个新的网桥。
        ovs-vsctl del-br <bridge-name>:删除指定的网桥。
        ovs-vsctl add-port <bridge-name> <port-name>:在指定的网桥上添加一个新的端口。
        ovs-vsctl del-port <bridge-name> <port-name>:从指定的网桥上删除一个端口。
        ovs-vsctl set-controller <bridge-name> tcp:<controller-ip>:<controller-port>:设置控制器的地址和端口。

ovs-ofctl:这是OVS的OpenFlow控制工具,用于管理OVS的流表和流量转发。
        ovs-ofctl show <bridge-name>:显示指定网桥的OpenFlow交换机信息。
        ovs-ofctl dump-flows <bridge-name>:显示指定网桥的流表信息。
        ovs-ofctl add-flow <bridge-name> <flow-rule>:向指定网桥的流表添加一条规则。
        ovs-ofctl del-flows <bridge-name>:删除指定网桥的所有流表规则。

ovs-appctl:这是OVS的应用程序控制工具,用于管理和监控OVS的运行状态。
        ovs-appctl dpctl/show:显示数据通路(datapath)的信息。
        ovs-appctl dpctl/dump-flows:显示数据通路上的流表信息。
        ovs-appctl bond/show <bond-name>:显示指定绑定接口的信息。
        ovs-appctl vlog/set <module>:<level>:设置指定模块的日志级别。