私は2日間成功せずにこれを理解しようとしてきました。同様の問題に直面している場合は、それを修正する方法を教えてください。または、任意のポインターが役立ちます。
これが私たちの仕事です。
- 仮想インスタンスを作成します。
- ブランク ボリュームを作成します。
- スナップショットからボリュームを作成します。
- 空のボリュームをインスタンスにアタッチします。
- スナップショットからインスタンスにボリュームをアタッチします。
- その他の IP アドレス、セキュリティ グループなど。
これらはすべて別のスレッドで実行されますが、依存関係が追加されています。元。4 は 2 に依存します (4->2)。2->1。5->3->1。
問題は、次の場合があることです。
- デバイスの 1 つがデバイス リストに表示されません。Openstack は両方が接続されていることを示しています。
- 両方のデバイスがデバイス リストに表示されません。Openstack は両方が接続されていることを示しています。
- どちらも表示されますが、指定したデバイスのディスクが切り替わります。元。/dev/vdb に 1GB のディスクを接続し、/dev/vdc に 10GB のディスクを接続しました。しかし、fdisk –l /dev/vdc を実行すると 1G になり、/dev/vdb は 10G を示します。
- 動作します!!!
コードを確認したところ、すべてのコンポーネントが本来の機能を果たしています。それはopenstack自体を疑うように私を導きます! (わかってる…なんか変だな。)
アイスハウスと RDO パックスタックのセットアップで 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 >/
基本的に、メイン スレッドはインスタンスを作成し、2 つのスレッドを起動します。1 つのスレッドで空のボリューム (10GB) を作成し、アタッチします。もう一方は、スナップショット (1GB) からボリュームを作成してアタッチします。次に、メイン スレッドが IP を作成して接続し、2 つのスレッドが完了するのを待ちます。
観察はかなり奇妙です。毎回、アタッチ ボリュームの応答で、空のボリュームが /dev/vdc にアタッチされ、スナップショットのボリュームが /dev/vdb にアタッチされたことが示されます。
しかし、私がインスタンスをチェックしたとき
fdisk -l /dev/vdb
10GB を返し、
fdisk -l /dev/vdc
1GBを返します
何が欠けているのでしょうか?? ポインタ/提案は役に立ちます。