前回の投稿では単一の VM Role のインスタンスで Windows Azure Storage を Windows Azure Drive としてマウントをしました。
今回は複数のインスタンスを起動した場合の対応について考えてみたいと思います。
■前回のスクリプトで複数のインスタンスを起動した場合の挙動
前回の投稿のスクリプトでは、マウント対象を以下のように指定していました。
$clouddrive = [Microsoft.WindowsAzure.StorageClient.CloudStorageAccountCloudDriveExtensions]::CreateCloudDrive($account, "$($account.BlobEndpoint)persistent/PersistentDisk.vhd") |
マウント対象の VHD は [PersisitentDisk.vhd] と決め打ちで記述していました。
それでは、このスクリプトを使用している状態でで VM Role のインスタンスを 2 インスタンス起動してみたいと思います。
後から起動したインスタンスでは、以下のエラーが発生して Page Blob はマウントされていません。
"2" 個の引数を指定して "Mount" を呼び出し中に例外が発生しました: "Unknown Error HRESULT=D0000708" |
Page Blob の領域ですが同一の領域を 2 つのインスタンスから Azure Drive としてマウントすることはできません。
複数のインスタンスで Azure Drive として Page Blob をマウントするためにはそれぞれのインスタンスで異なる Page Blob の領域をマウントする必要があります。
■インスタンスごとに異なる領域をマウント
以下のような形でインスタンスごとに異なる領域をマウントすることで、各インスタンスに永続化したデータ領域を持たせることが可能となります。
Widnows Azure 上のインスタンスですが、インスタンスごとに以下のような ID が割り当てられます。
この ID をマウントする VHD の名称として使用することで、インスタンスごとに異なる領域の Page Blob をマウントすることが可能となります。
今回は以下の名称の VHD を Page Blob としてアップロードしておきました。
[インスタンス ID.vhd] という形式になっています。
あとはスクリプトを修正してインスタンス ID 名の VHD をマウントするようにします。
前回作成したスクリプトを以下のように修正します。
# 改行されているところは一行で入力します。
# 必要となるアセンブリの参照 # サービスの起動が完了するまで待機 while((Get-Service -Name "Windows Azure Integration Components").Status -ne "Running"){ while((Get-Service -Name "Windows Azure Remote Forwader Service").Status -ne "Running"){ # Azure Storag に接続するための接続文字列をサービスモデルで定義した設定から取得 # Azure Storage に接続 # ローカルストレージに Azure Drive 用のキャッシュディレクトリを作成 # Azure Drive として、VHD をマウント |
[RoleEnvironment] クラスの、[CurrentRoleInstance] からインスタンス ID の取得をして、VHD の名称として使用しています。
# Twitter で教えていただけました。ありがとうございます!!
このようなスクリプトを使用することで、一つのスクリプトでインスタンス別にマウントする VHD を変更することが可能となります。
今回作成したスクリプトは以下に保存してありますので、興味のある方がいらっしゃいましたらご利用ください。
Azure Drive サンプルスクリプト (マルチインスタンス対応)
今は、各インスタンスで独立したディスクを使用していますが、インスタンス間のディスクでデータ同期みたいなことができると面白そうですね。
VM Role。なかなか調べることが尽きないので結構面白いですね。
[…] VM Role で Windows Azure Drive を使用 VM Role 起動時に Windows Azure Drive を自動でマウント 同一スクリプトで VM Role のインスタンス毎に異なる領域をマウント […]
VM Role で Azure Drive を使用する際の注意点 « SE の雑記
11 2月 11 at 15:18