【发布时间】:2014-08-27 11:57:49
【问题描述】:
自 2 天以来,我一直试图解决这个问题,但没有成功。 让我知道您是否遇到过类似的问题以及如何解决。或者任何指针都会有所帮助。
这就是我们所做的。
- 创建虚拟实例。
- 创建空白卷。
- 从快照创建卷。
- 将空白卷附加到实例。
- 将卷从快照附加到实例。
- 其他 IP 地址、安全组的东西。
所有这些都在单独的线程中完成,但添加了依赖项。前任。 4 取决于 2 (4->2)。 2->1。 5->3->1.
问题是有时:
- 其中一个设备未出现在设备列表中。 Openstack 显示两者均已连接。
- 两个设备都没有出现在设备列表中。 Openstack 显示两者均已连接。
- 两者都出现了,但是指定设备上的磁盘被切换!前任。我们在 /dev/vdb 上附加了 1GB 磁盘,在 /dev/vdc 上附加了 10GB 磁盘。但是当我们执行 fdisk –l /dev/vdc 时,我们得到 1G 而 /dev/vdb 显示 10G。
- 工作!!!
我已经检查了代码并且所有组件都在做他们应该做的事情。这让我怀疑 openstack 本身! (我知道……这有点奇怪。)
我在 icehouse 和 RDO packstack 设置中使用 allinone。
[更新 1]
我正在使用 JClouds API 来附加卷。此外,我正在指定设备名称(/dev/xvdb、/dev/xvdc)。然而,我在通话后的响应中检查设备名称并改用它们。
NovaAPI nova = ContextBuilder
.newBuilder("openstack-nova")
.endpoint(endpoint)
.credentials(getIdentity(), getPassword())
.modules(modules).buildApi(NovaApi.class);
VolumeAttachmentApi attachment = nova.getVolumeAttachmentExtensionForZone(CONSTANT_REGION).get();
VolumeAttachment attachment.attachVolumeToServerAsDevice(volumeIdExisting, instanceId, deviceDevXVDB);
[更新 2] 我创建了一个示例程序来隔离问题。该示例程序执行以下操作:
/-> 2 -> 3 >\
1 -> -> 6 -> -> x
\-> 4 -> 5 >/
基本上主线程创建实例并启动两个线程。一个线程创建空白卷(10GB)并附加它。而另一个从快照(1GB)创建一个卷并附加它。然后主线程创建 IP 并附加它并等待两个线程完成。
观察结果很奇怪。每次,附加卷响应都会显示空白卷已附加到 /dev/vdc,而来自快照的卷已附加到 /dev/vdb。
但是当我检查实例时
fdisk -l /dev/vdb
返回 10GB 和
fdisk -l /dev/vdc
返回 1GB
我可能会错过什么?任何指示/建议都会有所帮助。
【问题讨论】:
-
你能分享你用来附加卷的命令吗?您是让 Openstack 分配设备还是指定设备?
-
嗨,戴夫,您在原帖中的问题的最新答案
-
从你所说的,我看不出有什么明显的问题。我对 jclouds 并不太熟悉,但我唯一的建议是直接在 nova 客户端上尝试一下,看看问题是出在操作系统还是您使用的客户端库中。我在我的部署中尝试了同样的事情(安装了 RDO packstack 的冰屋),但无法重现该问题。
-
戴夫,当我尝试使用相同的程序按顺序进行创建+附加时,它可以正常工作。是的,如果我从 Horizon 或命令行执行此操作,一切都会按预期进行。
标签: openstack jclouds openstack-cinder