虚拟机跨主机RESIZE和迁移时候报错的问题

起因

KILO版本,
今天查到在分布式环境下修改虚拟机配置大小,是有一定的概率出错的,
当一个虚拟机修改配置时候,有可能此虚拟机会被迁移到另一个资源更多的主机,这个时候就会报错
我查了原因是nova 用户需要配置免密钥登录,才能完成这样的操作。

报错内容如下:

nova.compute.manager [req-7cb1c029-beb4-4905-a9d9-62d488540eda f542d1b5afeb4908b8b132c4486f9fa8 c2bfab5ad24642359f43cdff9bb00047]   Setting instance vm_state to ERROR
TRACE nova.compute.manager   Traceback (most recent call last):
TRACE nova.compute.manager     File "/usr/lib/python2.7/site-packages/nova/compute/manager.py", line 5596, in _error_out_instance_on_exception
TRACE nova.compute.manager       yield
TRACE nova.compute.manager     File "/usr/lib/python2.7/site-packages/nova/compute/manager.py", line 3459, in resize_instance
TRACE nova.compute.manager       block_device_info)
TRACE nova.compute.manager     File "/usr/lib/python2.7/site-packages/nova/virt/libvirt/driver.py", line 4980, in migrate_disk_and_power_off
TRACE nova.compute.manager       utils.execute('ssh', dest, 'mkdir', '-p', inst_base)
TRACE nova.compute.manager     File "/usr/lib/python2.7/site-packages/nova/utils.py", line 165, in execute
TRACE nova.compute.manager       return processutils.execute(*cmd, **kwargs)
TRACE nova.compute.manager     File "/usr/lib/python2.7/site-packages/nova/openstack/common/processutils.py", line 193, in execute
TRACE nova.compute.manager       cmd=' '.join(cmd))
TRACE nova.compute.manager   ProcessExecutionError: Unexpected error while running command.
TRACE nova.compute.manager   Command: ssh 10.5.2.20 mkdir -p /var/lib/nova/instances/99736f90-db0f-4cba-8f44-a73a603eee0b
TRACE nova.compute.manager   Exit code: 255
TRACE nova.compute.manager   Stdout: ''
TRACE nova.compute.manager   Stderr: 'Host key verification failed.\r\n'
TRACE nova.compute.manager   
ERROR oslo.messaging.rpc.dispatcher [-] Exception during message handling: Unexpected error while running command.
Command: ssh 10.5.2.20 mkdir -p /var/lib/nova/instances/99736f90-db0f-4cba-8f44-a73a603eee0b
Exit code: 255

解决办法

控制节点配置:

usermod -s /bin/bash nova

Generate SSH key and configuration
After doing this the next steps are all run as the nova user.

su - nova

We need to generate an SSH key:

ssh-keygen -t rsa

Follow the directions, and save the key WITHOUT a passphrase.

Next up we need to configure SSH to not do host key verification, unless you want to manually SSH to all compute nodes that exist and accept the key (and continue to do so for each new compute node you add).

cat << EOF > ~/.ssh/config
Host *
    StrictHostKeyChecking no
    UserKnownHostsFile=/dev/null
EOF

cat ~/.ssh/id_rsa.pub > ~/.ssh/authorized_keys

如果用比较暴力简单的方案,可以COPY这个.ssh到其他主机的nova家目录,就可以了

scp -r serverip:/var/lib/nova/.ssh/*   /var/lib/nova/.ssh/

之后,发现仍有报错:

 .103 7779 TRACE nova.compute.manager [instance:  ] Traceback (most recent call last):
 .103 7779 TRACE nova.compute.manager [instance:  ] File "/usr/lib/python2.7/dist-packages/nova/compute/manager.py", line 6459, in _error_out_instance_on_exception
 .103 7779 TRACE nova.compute.manager [instance:  ] yield
 .103 7779 TRACE nova.compute.manager [instance:  ] File "/usr/lib/python2.7/dist-packages/nova/compute/manager.py", line 4054, in resize_instance
 .103 7779 TRACE nova.compute.manager [instance:  ] timeout, retry_interval)
 .103 7779 TRACE nova.compute.manager [instance:  ] File "/usr/lib/python2.7/dist-packages/nova/virt/libvirt/driver.py", line 6353, in migrate_disk_and_power_off
 .103 7779 TRACE nova.compute.manager [instance:  ] shared_storage)
 .103 7779 TRACE nova.compute.manager [instance:  ] File "/usr/lib/python2.7/dist-packages/oslo_utils/excutils.py", line 85, in __exit__
 .103 7779 TRACE nova.compute.manager [instance:  ] six.reraise(self.type_, self.value, self.tb)
 .103 7779 TRACE nova.compute.manager [instance:  ] File "/usr/lib/python2.7/dist-packages/nova/virt/libvirt/driver.py", line 6342, in migrate_disk_and_power_off
 .103 7779 TRACE nova.compute.manager [instance:  ] on_completion=on_completion)
 .103 7779 TRACE nova.compute.manager [instance:  ] File "/usr/lib/python2.7/dist-packages/nova/virt/libvirt/utils.py", line 329, in copy_image
 .103 7779 TRACE nova.compute.manager [instance:  ] on_execute=on_execute, on_completion=on_completion)
 .103 7779 TRACE nova.compute.manager [instance:  ] File "/usr/lib/python2.7/dist-packages/nova/virt/libvirt/utils.py", line 55, in execute
 .103 7779 TRACE nova.compute.manager [instance:  ] return utils.execute(*args, **kwargs)
 .103 7779 TRACE nova.compute.manager [instance:  ] File "/usr/lib/python2.7/dist-packages/nova/utils.py", line 207, in execute
 .103 7779 TRACE nova.compute.manager [instance:  ] return processutils.execute(*cmd, **kwargs)
 .103 7779 TRACE nova.compute.manager [instance:  ] File "/usr/lib/python2.7/dist-packages/oslo_concurrency/processutils.py", line 174, in execute
 .103 7779 TRACE nova.compute.manager [instance:  ] raise UnknownArgumentError(_('Got unknown keyword args: %r') % kwargs)
 .103 7779 TRACE nova.compute.manager [instance:  ] UnknownArgumentError: Got unknown keyword args: {'on_execute': <function <lambda> at 0x7f3a64527050>, 'on_completion': <function <lambda> at 0x7f39ff6ddf50>}
 .103 7779 TRACE nova.compute.manager [instance:  ]

查证,
OpenStack Nova Kilo release requires 1.8.2 or higher, this is due to the
addition of on_execute and on_completion to the execute(..) function.
The latest Ubuntu OpenStack Kilo packages currently have code that
depend on this new updated release. This results in a crash in some
operations like resizes or migrations.

下载软件python-oslo-concurrency-1.8.2-1.el7
http://cbs.centos.org/koji/buildinfo?buildID=7030
替换后,解决!

参考:
http://funcptr.net/2014/09/29/openstack-resizing-of-instances/
https://blueprints.launchpad.net/nova/+spec/no-migration-resize

QT中的`resize()` 函数用于更改控件大小。在某些情况下可能会遇到错误,这通常是因为在尝试更改控件尺寸之前,该控件还未完全初始化、布局尚未完成或控件内部的一些资源分配不当。 以下是几个可能导致 `resize()` 报错的情况及解决办法: ### 布局未完成 在尝试调整控件大小前,如果其父容器或其他相关控件的布局尚未计算完毕,QT会抛出异常。这常见于创建窗口后立即调整大小,而窗口内其他组件的布局还没有设置好或加载完图片等资源。 **解决方案**: 等待布局完成后,再进行调整。一种常见的做法是在 `resize()` 函数外部添加事件监听,直到所有需要的布局元素都已准备好。例如,在Qt的信号槽机制中,你可以将调整大小的行为绑定到特定的事件上。 ```cpp QAction *resizeAction = new QAction("Resize", this); connect(resizeAction, &QAction::triggered, [this]() { if (layoutIsReady()) { // 假设这是一个检查函数确认布局是否已完成的逻辑 resize(500, 400); // 这里修改为你期望的新尺寸 } }); ``` ### 控件资源未初始化 如果你在控件中使用了依赖外部资源的元素(如图片、字体等),并且这些资源在调用 `resize()` 时还未加载完成,同样可能会导致错误。 **解决方案**: 确保在使用任何依赖资源的元素前先进行加载,并通过适当的回调机制在资源准备好后再尝试调整控件大小。 ### Qt版本兼容性问题 有时候,某些特性可能在较新的Qt版本中可用而在旧版本中不可用,因此调整大小操作可能因兼容性问题而出错。 **解决方案**: 检查并确保使用的Qt库版本与你的项目需求相匹配。对于特定功能的使用,查阅官方文档以确定支持的Qt版本范围。 ### 程序内存或资源限制 程序运行过程中内存不足也可能导致调整大小的操作失败,尤其是在处理大量复杂UI布局的情况下。 **解决方案**: 优化UI设计,减少不必要的组件或资源消耗;监控程序的内存使用情况,必要时增加应用程序的资源管理策略,比如使用资源池技术避免频繁分配和释放内存。 --- ### 相关问题 - `QT中resize报错`: 1. **如何判断控件内部资源是否已经准备就绪?** 可以通过观察控件是否响应用户输入、是否能够正常显示内容以及是否有其他依赖于资源状态的行为作为初步判断标准。 2. **如何检测Qt程序的内存使用情况?** 使用Qt提供的工具如qmon、Profiler等进行内存分析和诊断可以帮助识别性能瓶颈和潜在的内存泄漏。 3. **在Qt中调整大小的最佳实践是什么?** 最佳实践包括合理组织窗口结构、延迟关键操作至布局完成之后、优化资源加载顺序以及使用Qt的布局管理和响应式设计原则。
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

day walker

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值