首页 文章 精选 留言 我的

精选列表

搜索[openstack],共3159篇文章
优秀的个人博客,低调大师

OpenStack虚机迁移live-migration失败(error: internal error Attempt to migrate guest to the same host)

现象:执行迁移live-migration操作后,显示成功迁移,但是实际没有执行迁移动作 解决过程: 在dashboard执行虚机热迁移操作,提示操作成功,但是实际虚机没有迁移; 之前遇到过内存不足导致迁移失败,但是经过查看发现源和目的节点资源充足; 然后在nova的log看到如下内容:DestinationDiskExists_Remote: The supplied disk path (/var/lib/nova/instances/e40708e3-7f19-4f9c-8d19-3e600037c067) already exists, it is expected not to exist.,初步怀疑对端已经建立了该目录,但是由于未知原因没有迁移成功,再次迁移触发这个报错,但是实际发现目的节点并没有该目录,然后继续翻查log。 然后找到log如下:2016-03-24 15:44:21.003 3164 ERROR nova.virt.libvirt.driver [-] [instance: e40708e3-7f19-4f9c-8d19-3e600037c067] Live Migration failure: internal error: Attempt to migrate guest to the same host 00020003-0004-0005-0006-000700080009,初步怀疑虚机之所以没有迁移是因为它认为目的主机就是自己,所以我看了下hosts,主机解析正常。 这让我想起很早遇到的一个VMware迁移的问题,就是很多厂商都是OEM服务器,导致UUID一样。 使用virsh sysinfo | grep uuid或者dmidecode -s system-uuid都可以查询服务器的UUID,结果查询到计算节点的UUID都是一样的,所以导致迁移的时候源主机认为目的主机就是自己。 KVM并不是直接查找这个硬件的UUID而是先到/etc/libvirt/libvirtd.conf内找host_uuid字段,但是此字段是被默认注释掉的,所以找到对方硬件的UUID。 解决方法: 先随机生成一个UUID,如下: [root@node-1 ~]# cat /proc/sys/kernel/random/uuid4165c128-e7ba-45cd-a26f-325d221c2ace 然后使用上面的uuid替换/etc/libvirt/libvirtd.conf中的host_uuid字段 #host_uuid = "00000000-0000-0000-0000-000000000000" 改为 host_uuid = "4165c128-e7ba-45cd-a26f-325d221c2ace" 所有计算节点都修改完成后,重启libvirt服务,再执行迁移即可成功!

优秀的个人博客,低调大师

计算CPU 百分比 - 基于openstack kvm 虚拟机采集片段代码分享

1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 def get_vm_cpu_rate( self , uuid): """ get cpu rate 100 * diff_vm_cpu_time / (diff_sys_cpu_time * 1 * 1e9) return cpurate% """ result = 0 vm_info = self .vms_info.get(uuid, None ) vm_info_before = self .vms_info_before.get(uuid, None ) if not vm_info or not vm_info_before: return result info = vm_info.get( "cpu_mem_state_info" , None ) info_before = vm_info_before.get( "cpu_mem_state_info" , None ) cpu_time = info[ - 1 ] cpu_time_before = info_before[ - 1 ] last = self .vms_info_timestamp before = self .vms_info_before_timestamp if cpu_time and cpu_time_before: result = 100 * abs (cpu_time_before - cpu_time) / \ ( abs (last - before) * 1 * 1e9 ) return round (result, 2 ) 本文转自 swq499809608 51CTO博客,原文链接:http://blog.51cto.com/swq499809608/1404564

优秀的个人博客,低调大师

- 每天5分钟玩转 OpenStack(172)

instance 的网卡是如何被配置并拉起的?这是理解和用好 cloud-init 非常关键的一步。我们先讨论一个最简单基础的场景:镜像中没有安装 cloud-init。 此时 instance 启动时网卡能不能被拉起来完全靠运气!是的,就是运气。 因为这种情况下网卡的配置是死的,完全依赖于镜像中 /etc/network/interfaces 原有的配置。比如原镜像中的配置是:auto eth0iface eth0 inet dhcpinstance 只有满足下面所有条件网卡才能被拉起来: 正好只有一块网卡 正好网卡就叫 eth0 正好 subnet 开了 DHCP 只要出现下面任意一种情况就会失败: 还有其他网卡,比如 eth1,或者 网卡不叫 eth0 ,比如 ens3,或者 没有 DHCP 不同 instance 的网络配置差别很大,在 image 中写死的方法几乎是无效的,只能依靠 cloud-init 动态写入,接下来我们详细分析 cloud-init 的解决方案。 dhcp 先考虑 subnet 有 DHCP 服务的情况。 我们使用的镜像是 ubuntu 的 cloud image,已经预装的 cloud-init,下载地址为http://cloud-images.ubuntu.com/,国内镜像http://mirrors.ustc.edu.cn/ubuntu-cloud-images/ 部署成功后,登录 instance,ip a显示网卡ens3已经正确配置。 下面分析这个 IP 是怎样配置上去的。 上一节我们讨论到,cloud-init 是在 local 阶段完成网络配置的,cloud-init 的执行过程被详细记录在 /var/log/cloud-init.log 中,让我们找找相关操作。 这里可以看到,cloud-init 会做如下工作: ① 扫描出 instance 中的所有网卡(这里是 ens3) ② 获取该网卡的配置信息。 因为没有 config drive,无法得知网卡的详细配置信息,只能采用默认的 fallback 配置,即 dhcp 配置。 ③ 将配置信息写入 /etc/network/interfaces.d/50-cloud-init.cfg,内容为: 这样网卡就以 dhcp 模式拉起来,正好与 subnet 的 dhcp 服务对接上,IP、网关等信息就配上去了。 几点说明: instance 上的每一块网卡都会被 cloud-init 扫描出来。 如果没有 config drive 将采用 fallback 配置,将扫描出来的第一块(只有这一块)网卡配置成 dhcp 模式。请注意:这是 cloud-init 默认行为,跟这块网卡对应的 subnet 是否开启了 DHCP 没有任何关系。 cloud-init 会根据 instance 操作系统类型生成网卡配置文件。例如操作系统是 centos 的话则会将配置写到 /etc/sysconfig/network-scripts 目录下。 现在请大家思考一个问题:如果 subnet 没有开 DHCP,会是怎样一个情况?下节将分析这个问题。

优秀的个人博客,低调大师

在 ML2 中配置 OVS vlan network - 每天5分钟玩转 OpenStack(136)

前面我们已经学习了 OVS 的 local 网络 和 falt 网络,今天开始讨论 vlan 网络。 vlan network 是带 tag 的网络。 在 Open vSwitch 实现方式下,不同 vlan instance 的虚拟网卡都接到 br-int 上。 这一点与 linux bridge 非常不同,linux bridge 是不同 vlan 接到不同的网桥上。 在我们的实验环境中,收发 vlan 数据的物理网卡为 eth1,上面可以走多个 vlan,所以物理交换机上与 eth1 相连的的 port 要设置成 trunk 模式,而不是 access 模式。 在 ML2 配置中 enable vlan network 在 /etc/neutron/plugins/ml2/ml2_conf.ini 设置 vlan network 相关参数: tenant_network_types = vlan 指定普通用户创建的网络类型为 vlan。 然后指定 vlan 的范围: 上面配置定义了 label 为 “default” 的 vlan network,vlan id 的范围是 3001 - 4000。 这个范围是针对普通用户在自己的租户里创建 network 的范围。 因为普通用户创建 network 时并不能指定 vlan id,Neutron 会按顺序自动从这个范围中取值。 对于 admin 则没有 vlan id 的限制,admin 可以创建 id 范围为 1-4094 的 vlan network。 接着需要指明 vlan 网络与物理网络的对应关系: 如上所示: 在 [ml2_type_vlan] 中定义了 lable “default”,​[ovs] 中则通过 bridge_mappings 指明 default 对应的 Open vSwitch 网桥为 br-eth1。 这里 label 的作用与前面 flat network 中的 label 一样,只是一个标示,可以是任何字符串。 我们需要提前通过 ovs-ovctl 命令: 创建 br-eth1。 将物理网卡 eth1 桥接在 br-eth1 上。 配置完毕,下一节创建 OVS vlan network。

优秀的个人博客,低调大师

在 ML2 中配置 OVS flat network - 每天5分钟玩转 OpenStack(133)

前面讨论了 OVS local network,今天开始学习 flat network。 flat network 是不带 tag 的网络,宿主机的物理网卡通过网桥与 flat network 连接,每个 flat network 都会占用一个物理网卡。 在 ML2 配置中 enable flat network 在控制节点 /etc/neutron/plugins/ml2/ml2_conf.ini 中设置 flat network 相关参数: tenant_network_types = flat 指定普通用户创建的网络类型为 flat。 需要注意的是:因为 flat 网络与物理网卡一一对应,一般情况下租户网络不会采用 flat,这里只是示例。 接着需要指明 flat 网络与物理网络的对应关系: 如上所示: 在 [ml2_type_flat] 中通过 flat_networks 定义了一个 flat 网络,label 为 “default”。 在 [ovs] 中通过 bridge_mappings 指明 default 对应的 Open vSwitch 网桥为 br-eth1。 label 是 flat 网络的标识,在创建 flat 时会用到(后面演示),label 的名字可以是任意字符串,只要确保各个节点 ml2_conf.ini 中的 label 命名一致就可以了。 各个节点中 label 与物理网卡的对于关系可能不一样。这是因为每个节点可以使用不同的物理网卡将 instance 连接到 flat network。 与 linux bridge 实现的 flat 网络不同,ml2 中并不会直接指定 label 与物理网卡的对应关系,而是指定 label 与 ovs bridge 的对应关系。 [ovs] bridge_mappings = default:br-eth1 这里的 ovs bridge 是 br-eth1,我们需要提前通过 ovs-ovctl 命令: 创建 br-eth1。 将物理网卡 eth1 桥接在 br-eth1 上。 如果要创建多个 flat 网络,需要定义多个 label,用逗号隔开,当然也需要用到多个 ovs bridge,如下所示: [ml2_type_flat] flat_networks = flat1,flat2[ovs] bridge_mappings = flat1:br-eth1,flat2:br-eth2 通过以上步骤控制节点的 flat 网络就准备好了。 计算节点也需要做相同的配置,然后重启所有节点的 Neutron 服务。 下面有必要通过 ovs-vsctl show 检视一下当前的网络结构。 对于 ovs bridge “br-eth1” 和其上桥接的 port “eth1” 我们应该不会感到意外,这是前面配置的结果。然而除此之外,br-int 和 br-eth1 分别多了一个 port “int-br-eth1” 和 “phy-br-eth1”,而且这两个 port 都是 “patch” 类型,同时通过 “peer” 指向对方。 上面的配置描述了这样一个事实:br-int 与 br-eht1 这两个网桥通过 int-br-eth1 和 phy-br-eth1 连接在一起了。 目前控制节点网络结构如下: veth pair VS patch port 在前面 local network 我们看到,br-int 与 linux bridge 之间可以通过 veth pair 连接。 而这里两个 ovs bridge 之间是用 patch port 连接的。 看来 veth pair 和 patch port 都可以连接网桥,使用的时候如何选择呢? patch port 是 ovs bridge 自己特有的 port 类型,只能在 ovs 中使用。 如果是连接两个 ovs bridge,优先使用 patch port,因为性能更好。 所以: 1. 连接两个 ovs bridge,优先使用 patch port。技术上veth pair 也能实现,但性能不如 patch port。 2. 连接 ovs bridge 和 linux bridge,只能使用 veth pair。 3. 连接两个 linux bridge,只能使用 veth pair。 配置就绪,下一节将创建 OVS flat network。

优秀的个人博客,低调大师

再部署一个 instance 和 Local Network - 每天5分钟玩转 OpenStack(131)

上一节部署了 cirros-vm1 到 first_local_net,今天我们将再部署 cirros-vm2 到同一网络,并创建 second_local_net。 连接第二个 instance 到 first_local_net 以同样的方式 launch instance “cirros-vm2”,分配的 IP 为 172.16.1.4。 cirros-vm2 也被 schedule 到控制节点,ovs-vsctl show 的输出如下: cirros-vm2 对于的 tap 设备为 tapddbbb728-93。 从 cirros-vm2 能够 Ping 通 cirros-vm1 的 IP 地址 172.16.1.3。 当前宿主机的网络结构如下: 两个 instance 都挂在 br-int 上,可以相互通信。 创建第二个 local network 为了分析 local network 的连通性,我们再创建一个 "second_local_net"。 second_local_net 的绝大部分属性与 first_local_net 相同,除了 IP 池范围为 172.16.1.101-172.16.1.200 second_local_net 的 DHCP 设备也已经就绪。 DHCP 对应的 tap 设备为 tap2c1b3c58-4e,已经连接到 br-int。 下节将部署 instance 到 second_local_network 并分析两个 local network 的连通性。

资源下载

更多资源
腾讯云软件源

腾讯云软件源

为解决软件依赖安装时官方源访问速度慢的问题,腾讯云为一些软件搭建了缓存服务。您可以通过使用腾讯云软件源站来提升依赖包的安装速度。为了方便用户自由搭建服务架构,目前腾讯云软件源站支持公网访问和内网访问。

Nacos

Nacos

Nacos /nɑ:kəʊs/ 是 Dynamic Naming and Configuration Service 的首字母简称,一个易于构建 AI Agent 应用的动态服务发现、配置管理和AI智能体管理平台。Nacos 致力于帮助您发现、配置和管理微服务及AI智能体应用。Nacos 提供了一组简单易用的特性集,帮助您快速实现动态服务发现、服务配置、服务元数据、流量管理。Nacos 帮助您更敏捷和容易地构建、交付和管理微服务平台。

Spring

Spring

Spring框架(Spring Framework)是由Rod Johnson于2002年提出的开源Java企业级应用框架,旨在通过使用JavaBean替代传统EJB实现方式降低企业级编程开发的复杂性。该框架基于简单性、可测试性和松耦合性设计理念,提供核心容器、应用上下文、数据访问集成等模块,支持整合Hibernate、Struts等第三方框架,其适用范围不仅限于服务器端开发,绝大多数Java应用均可从中受益。

Sublime Text

Sublime Text

Sublime Text具有漂亮的用户界面和强大的功能,例如代码缩略图,Python的插件,代码段等。还可自定义键绑定,菜单和工具栏。Sublime Text 的主要功能包括:拼写检查,书签,完整的 Python API , Goto 功能,即时项目切换,多选择,多窗口等等。Sublime Text 是一个跨平台的编辑器,同时支持Windows、Linux、Mac OS X等操作系统。

用户登录
用户注册