Windows仮想マシンをソフトウェアで制御する~その実践と対策~

Post on 01-Nov-2014

710 Views

Category:

Technology

4 Downloads

Preview:

Click to see full reader

DESCRIPTION

 

Transcript

1

株式会社インターネットイニシアティブ

プラットフォーム本部プラットフォームサービス部

プラットフォーム開発課

山内 徹

Windows仮想マシンをソフトウェアで制御する~その実践と対策~

14-D-2#devsumiD

2

本日のアジェンダ

• 本セッションの骨子

• 自己紹介

• Windowsで構築する仮想環境

• IIJ GIOのハイパーバイザーとしてWin2008R2を導入する

• IIJ GIOのハイパーバイザーを2008R2から2012へ移行する

• まとめ

• 参考

3

本セッションの骨子

弊社がWindowsベースの仮想環境の管理システムを開発する中で、仮想マシンを制御する過程で発生し

た問題と解決策について解説するものです

4

自己紹介

プロフィール

• 1997年日本電気ソフトウェア(現NECソフト)入社

• 開発やったりSIやったり色々

• 2002年以降、.NET関連の仕事が主業務になる

• 2007年アイアイジェイテクノロジ-(現IIJ)入社

• やはり.NETに関係する仕事が多い

• 2009年以降、IIJが提供するクラウドサービス“IIJ GIO”の立ち上げにあたり、“IIJ GIOコンポーネントサービスVシリーズ(Windows)”の開発等に従事

テクノロジーフィールド

• サーバ/クライアントなど.NET Frameworkによる開発全般

• OS/ミドルウェアのコントロール

5

Windowsを使った標準的な仮想環境

6

Windowsを使った標準的な仮想環境

Windows ServerHyper-V

VM VM VM VM

Windows ServerHyper-V

VM VM VM VM

Windows ServerHyper-V

VM VM VM VM

Windows Server

VMM

クラスター

• Windows Server上で仮想マシン(VM)を実行するハイパーバイザーが“Hyper-V”

• 複数のHyper-Vを集中管理する管理ツールが“System Center Virtual Machine Manager”(以後、VMM)

7

IIJ GIOのハイパーバイザーとして

Win2008R2を導入する

8

DDTKを使う

2010年5月、弊社のIIJ GIOでWindowsOSの

ベースサーバを提供するにあたり、そのハイパ ー バ イ ザ ー と し て Windows Server2008R2を採用した

短期間で高品質な管理システムを開発するに

あたり、DDTKを使うことで実現できると期待された

9

DDTKの構成

Windows ServerHyper-V

VM VM VM VM

Windows ServerHyper-V

VM VM VM VM

Windows ServerHyper-V

VM VM VM VM

Windows Server

VMM

クラスター

IIS

HyperV制御用

VMM制御用

PowerShellでコントロール

WMIWMIWMI

DDTK(Dynamic Datacenter Toolkit for Hosters)

WCF

クライアント

10

DDTKを使う

DDTK(Dynamic Datacenter Toolkit for Hosters)とは

Hyper-VやSystem Centerを制御し、仮想環境を構築するた

めのベースとなるサンプルコード

C#ベースのソースコードが提供されており、

自由に改変可能

Webサービス(WCFで実装)で外部とのやり取りを行う

弊社の利用開始時点では

Hyper-V制御用とVMM制御用で分かれていた

11

Windowsを使った標準的な仮想環境

Windows ServerHyper-V

VM VM VM VM

Windows ServerHyper-V

VM VM VM VM

Windows ServerHyper-V

VM VM VM VM

Windows Server

VMM

クラスター

12

DDTKの構成

Windows ServerHyper-V

VM VM VM VM

Windows ServerHyper-V

VM VM VM VM

Windows ServerHyper-V

VM VM VM VM

Windows Server

VMM

クラスター

IIS

HyperV制御用

VMM制御用

PowerShellでコントロール

WMIWMIWMI

DDTK

WCF

クライアント

13

WCFとは

• Windows Communication Foundationの略• .NETの通信テクノロジーの一つ• 構成ファイル(*.config)を使ってプロトコルや細かいパラメータ等を定義できる

• DDTKのインタフェースの実装に使用されている

Windows Server

IISWCFクライアントプログラムコード

.NET

WCF

WCFアプリケーション

DDTKはWCFに対応した

サーバアプリケーションとして実装されている

14

DDTKの構成

Windows ServerHyper-V

VM VM VM VM

Windows ServerHyper-V

VM VM VM VM

Windows ServerHyper-V

VM VM VM VM

Windows Server

VMM

クラスター

IIS

HyperV制御用

VMM制御用

PowerShellでコントロール

WMIWMIWMI

DDTK

WCF

クライアント

15

WMIとは

• Windows Management Instrumentationの略でWindowsをプログラムコードで管理する機能

• 本セッションではHyper-Vをプログラムから制御するのに使用

Windows Server

Hyper-V

VM

プログラムコード.NET,VBScript,

PowerShellWMI

VM VM VM

16

WMIのサンプルコード

1:ManagementScope ms = newManagementScope(@"server¥root¥virtualization", co);

2:ManagementObjectSearcher mos = newManagementObjectSearcher(ms, 3: new ObjectQuery(4: "select * from Msvm_ComputerSystem where "+5: "Caption='仮想マシン' and ElementName='VM'"));6:ManagementObjectCollection moc = mos.Get();

virtualization名前空間を使用

vitualization名前空間のMsvm_ComputerSystemクラスからインスタンスを検索

• コンポーネントごとに分類された名前空間の中にいくつかのクラスが定義されており、そのクラスのインスタンスに対してプロパティを読み取ったり、メソッドを実行したりして制御する

• インスタンスの検索にSQLに似た言語が使える

17

WMIの名前空間

• WMIの名前空間は、WMIクラスのフォルダのようなもので、管理対象のコンポーネントごとに分かれている

名前空間:CIMV2

CIM_ActionMSFT_WmiEssEventWin32_DiskPartition

・・・

名前空間:virtualization

Msvm_ComputerSystemMsvm_ConcreteJobMsvm_StorageJob

・・・

WindowsOSを管理 Hyper-V(Windows2008R2以前)を管理

名前空間:MSCluster

MSCluster_ClusterMSCluster_AvailableDiskMSCluster_Event

・・・

Failover Clusterを管理

18

DDTKの構成

Windows ServerHyper-V

VM VM VM VM

Windows ServerHyper-V

VM VM VM VM

Windows ServerHyper-V

VM VM VM VM

Windows Server

VMM

クラスター

IIS

HyperV制御用

VMM制御用

PowerShellでコントロール

WMIWMIWMI

DDTK

WCF

クライアント

19

DDTKの調査

DDTKのマニュアルには、前提とするシステム構成と

インストール方法しか書かれていない

DDTKのソースコードにはほとんどコメントがない

何ができて何ができないのか調査を実施

結果、以下のことが判明

多くの機能が不足している

ISOファイルのDVDマウントVMからVHDファイルへのマウント

VMMの強制更新など

20

不足機能を作りこみ

DDTKに不足している機能を作りこまなければならない不足機能の作りこみで以下のポリシーとした

どちらでも実装可能な機能は「VMM制御用」のDDTKに実装する

動作が安定しないVMM制御用

HyperV制御用

VMMHyper

VWMIPower

Shell

DDTKこちらを採用したら不安定

PowerShellの方がWMIに比べて

実装しやすいため

21

HyperV制御用

IIS

DDTKの構成

Windows ServerHyper-V

VM VM VM VM

Windows ServerHyper-V

VM VM VM VM

Windows ServerHyper-V

VM VM VM VM

Windows Server

VMM

クラスター

VMM制御用

PowerShellでコントロール

WMIWMIWMI

こちらを使用したら不安定クライアント

WCF

22

VMMの更新遅延

原因Hyper-Vの情報がVMMへ反映するのにかなり(数分~数十分)の

タイムラグがある大きなタイムラグがあると、例えば、VMが停止している前提の操作を起動中に行ってしまうことなどの問題が発生する

Refresh-VMという強制的に更新するコマンドで更新することは可

能だが、無闇に使うとVMが壊れることがある

どちらでも実装可能な機能はHyper-V対応に実装する

に方針を変更

VMM制御用

HyperV制御用

VMMHyper

VWMIPower

Shell

DDTK こちらに実装

23

Hyper-V制御用での実装の問題

VMが壊れたとVMMに誤認識されることがある強制的に更新することで解消することもあるが、Hyper-Vのジョブが実行中の場合、VMが本当に壊れることがある

処理が非同期の場合がある前の処理が完了しないうちに次の処理のリクエストを受け付け、前の処理を中断して後の処理を実行することがある

Hyper-Vのジョブの状態を確認しながら

VMを制御する

Hyper-V制御用での実装で以下の問題が発生

VMM制御用

HyperV制御用

VMMHyper

VWMIPower

Shell

DDTK

壊れたと判断される

非同期で処理される

Hyper-Vの処理の単位

24

DDTKの構成

Windows ServerHyper-V

VM VM VM VM

Windows ServerHyper-V

VM VM VM VM

Windows ServerHyper-V

VM VM VM VM

Windows Server

VMM

クラスター

IIS

HyperV制御用

VMM制御用

PowerShellでコントロール

WMIWMIWMI

こちらを使用するただし、ジョブの状態は確認

WCF

クライアント

25

その他の注意点

①英語版のサンプルコードの利用の注意点

②VMMから取れる情報の注意点

26

その他の注意点

①英語版のサンプルコードの利用の注意点

②VMMから取れる情報の注意点

27

①英語版のサンプルコードの利用の注意点

• DDTK自身を始め、サンプルコードを検索すると、海外製で

あることが多いが、動かしても日本語環境では動かないことがある

• WMIやPowerShellなどで取れるキーワードが日本語化されている(“VirtualMachine”→“仮想マシン”など)こと

があり、これキーワードとして検索しているコードは検索に引っかからずに正常に処理されないことがある

• サンプルコードが動かない場合、まずは中で検索しているキーワードが日本語化されていないかを確認し、必要に応じて置換する

ソースコードでキーワードを検索している

箇所に注意!

28

その他の注意点

①英語版のサンプルコードの利用の注意点

②VMMから取れる情報の注意点

29

②VMMから取れる情報の注意点

• VMMからは欲しいタイミングで欲しい情報が取得できないことがある

• 一見、欲しい情報が取得できたかに見えても、古い情報だったり、期待したものと異なる場合がある

• 基本的にはHyper-Vから情報を取得するようにし、

VMMから情報を取得する際にはVMM独自の情報に限るなど、十分注意して使用するようにする(特に順番系は注意!)

DDTK Hyper-V

数分~数十分に一回更新

データベースに情報を保持

古い情報順番が異なる

VMMNICのアタッチの

順番など

30

IIJ GIOのハイパーバイザーを

2008R2から2012へ移行する

31

DDTKからSPFへ移行

2014年1月、パフォーマンスの向上や最大メモリサイズの増加といった新機能を利用すべく、IIJ GIOのWindowsのハイパーバイザーをWindows Server 2008R2からWindowsServer 2012ベースへ移行した

最新の機能を取り入れ、且つ、短期間で高品質なシステムを

開発するため、SPFを使うことにした

WS2008R2Hyper-V 2.0

WS2008R2

VMM 2008R2

WS2012Hyper-V 3.0

WS2012

2012 VMM

32

Windows Server

SPFの構成

Windows ServerHyper-V

VM VM VM VM

Windows ServerHyper-V

VM VM VM VM

Windows ServerHyper-V

VM VM VM VM

Windows Server

System CenterVirtualMachineManager

クラスター

IIS

SPF OData

PowerShellスクリプト

クライアントDDTKと異なり独立したサーバ

33

DDTKからSPFへ移行

SPF(Service Provider Foundation)とは

System Centerを制御し、仮想環境を構築するためのアプリ

ケーションでDDTKの後継とされる(が、サンプルコードではなく、実行可能なアプリケーション)

インタフェースはOData(Open Data Protocol)を使用

処理がPowerShellで記述されており、追加/変更が可能

34

ODataとは

• Open Data Protocolの略で、マイクロソフトが提唱するHTTP/RESTベースのプロトコル

• データの取得/更新などの操作を行うことができる• データの操作にはGet(値の取得) ,Post (リソースの作成),Put(値の更新),Delete(リソースの削除)の4つのHTTPメソッドを実行することにより制御

VMGetメソッド

VMの情報

VMPostメソッド

VMを作成

VMPutメソッド

VMDeleteメソッド

VMを削除VMの設定を変更

OData(SPF)でVMを操作する例

35

Windows Server

SPFの構成

Windows ServerHyper-V

VM VM VM VM

Windows ServerHyper-V

VM VM VM VM

Windows ServerHyper-V

VM VM VM VM

Windows Server

System CenterVirtualMachineManager

クラスター

IIS

SPFOData

PowerShellスクリプト

クライアント

36

SPFを使ったVM操作サンプル( VMのプロパティを更新)

1:Uri uri = newUri("http://server:8091/SC2012/VMM/microsoft.management.odata.svc/");2:VMM vmm = new SPF.VMM(uri);3:4:// 対象のVMを取得する5:var vm = (from v in vmm.VirtualMachines where v.ID == vmId&& v.StampId == stampId select v).Single();6:7:// 値を更新する8:vm.Description = "This is test VM.";9:vmm.UpdateObject(vm);10:vmm.SaveChanges();

37

SPFの大きな問題

①実装済みの機能が不足している

②Hyper-Vを直接制御できない

③fabricが管理する情報が取得できない

38

SPFの大きな問題

①実装済みの機能が不足しているエンドユーザ向けポータルの開発を主眼にした機能体系

クラウド管理者向けの機能がかなり不足している(VMをキーにしたリソース検索など)

②Hyper-Vを直接制御できない

③fabricが管理する情報が取得できない

39

実装済みの機能が不足している問題

不足した機能はPowerShellのスクリプトを改修/追加することで実装

既存の機能を改修する場合はSPFを構成するPowerShellスクリプトを

改修

パラメータの追加や、新しいエンティティを定義する場合にはODataの仕様に従って2つのファイルSubsystem.mofおよびSubsystem.xmlを修正

Subsystem.mof

Subsystem.xml

PowerShellスクリプト

エンティティの定義

具体的な処理

SPFを構成するファイル

ここではオブジェクトクラスのこと

エンティティの振る舞いの定義

40

実装済みの機能が不足している問題

Subsystem.mof

Subsystem.xml

PowerShellスクリプト

エンティティの定義

エンティティの振る舞いの定義

具体的な処理

SPFを構成するファイル

41

エンティティの定義(Subsystem.mof)(抜粋)

class VMM_VirtualHardDisk{

String Accessibility;DateTime AddedTime;String Description;String Directory;Boolean Enabled;[Key, Required, EmbeddedInstance("EDM_GUID")] string ID;[EmbeddedInstance("EDM_GUID")] string JobGroupId;SInt64 MaximumSize;DateTime ModifiedTime;String Name;[EmbeddedInstance("VMM_UserAndRole")] String Owner;

String OwnerSid;[EmbeddedInstance("EDM_GUID")] string ParentDiskId;

以下のようにエンティティを定義する新しいエンティティやプロパティを追加する場合、変更する

42

実装済みの機能が少ない問題に対して

Subsystem.mof

Subsystem.xml

PowerShellスクリプト

エンティティの定義

具体的な処理

SPFを構成するファイル

エンティティの振る舞いの定義

43

エンティティの振る舞いの定義(Subsystem.xml)(抜粋)

<Class><Name>VMM_VirtualHardDisk</Name><CmdletImplementation><Query><Cmdlet>Get-GIOVirtualHardDisk2</Cmdlet><FieldParameterMap><Field><FieldName>ID</FieldName><ParameterName>ID</ParameterName>

</Field><Field><FieldName>VMId</FieldName><ParameterName>VMId</ParameterName>

</Field>

以下のようにXML形式でエンティティごとに呼び出すPowerShellスクリプトとパラメータを定義

定義するエンティティ

Getを定義することを宣言

呼び出すPowerShellスクリプト

この例ではVirtualHardDiskに対して

Getを実行した際に呼ばれるスクリプト

仮想ハードディスクのリソースのエンティティの振る舞いの定義

44

SPFの大きな問題

①実装済みの機能が少ない

②Hyper-Vを直接制御できないVMMからでは制御できない機能もある

③fabricが管理する情報が取得できない

45

Hyper-Vを直接制御できない問題に対して

PowerShellはWMIが使えるので(作りこめば)これを使うことで制御可能

Windows Server

Windows ServerHyper-V

VM VM VM VM

Windows ServerHyper-V

VM VM VM VM

Windows ServerHyper-V

VM VM VM VM

Windows Server

VMM

IIS

SPF

PowerShellスクリプト

WMIWMIWMI

46

SPFの大きな問題

①実装済みの機能が少ない

②Hyper-Vを直接制御できない

③fabricが管理する情報が取得できないfabricはSystem Center 2012で初めて導入された概念で、VMMの仮想環境を

構成するリソースを一括管理する機能

仮想ネットワークアダプタのMACアドレスはfabricのMACアドレスプールから割り当てられているので

MACアドレスも取得できない

47

fabric関連の情報が取得できない問題に対して

C#/VB.NETのDLLをPowerShellから呼び出すことで、情報が取得できる

Windows Server

Windows ServerHyper-V

VM VM VM VM

Windows ServerHyper-V

VM VM VM VM

Windows ServerHyper-V

VM VM VM VM

Windows ServerIIS

SPF

PowerShellスクリプト

WMIWMIWMI

DLL

VMM

fabric

48

その他の問題点

①エンティティに定義されているプロパティが取れない

②WCF(Webサービス)とOData(REST)の差異

③WMIの名前空間が変更されている

49

その他の問題点

①エンティティに定義されているプロパティが取れない

②WCF(Webサービス)とOData(REST)の差異

③WMIの名前空間が変更されている

50

①エンティティに定義されているプロパティが取れない

• エンティティのプロパティの定義はあるのに、取得すると

値が空になっていることがある

• 大抵の場合はPowerShellのスクリプトを修正すれば取れ

るようになるが、fabric系の値のように、単純には取得できない場合がある

• 設計の際には、クラスの仕様からだけでなく、実際に値が

取得できるか、事前に確認する

エンティティ:VirtualNetworkAdapter

ID XXXX-XXX・・・VirtualNetwork ・・・・・・・MACAddress null

SPF

Get

値が取れていない

51

その他の問題点

①エンティティに定義されているプロパティが取れない

②WCF(Webサービス)とOData(REST)の差異

③WMIの名前空間が変更されている

52

②WCF(Webサービス)とOData(REST)の差異

• WCF Webサービスでは、パラメータ付きでAPIを呼び出すだけの単純なモデルであったが、ODataではエンティティに

対して4つの操作を行うモデルであるため、アクセス方法が完全に異なる

• 2008から2012へ移行する場合、まじめに設計すると、

インタフェース部分の改修にかなりの手間がかかることを覚悟する

DDTKの場合

SPFの場合(更新)

接続オブジェクトインスタンス生成

API呼び出し 接続を閉じる

接続オブジェクトインスタンス生成

操作対象のエンティティを取得

エンティティのプロパティ変更 更新の指示 コミット

53

その他の問題点

①エンティティに定義されているプロパティが取れない

②WCF(Webサービス)とOData(REST)の差異

③WMIの名前空間が変更されている

54

③WMIの名前空間が変更されている

• WMIを呼び出す際、Windows2008と2012とでは、名前空間が異なり(virtualization¥v2)、既存の名前空間(virtualization)の使用は推奨されなくなった

• 新規でWindows2012用に開発する場合は問題ないが、2008から移行する場合、virtualization名前空間で(大体は

動くが)動かない場合もあるので、注意が必要

Hyper-V 2.0(WS2008R2)

Hyper-V 3.0(WS2012)

virtualization名前空間

virtualization¥v2名前空間

virtualization名前空間

推奨されない

プログラムコードプログラムコード

55

WMIのサンプルコード

1:ManagementScope ms = new2: ManagementScope(@"server¥root¥virtualization¥v2", co);3:ManagementObjectSearcher mos = new4:ManagementObjectSearcher(ms, 5: new ObjectQuery(6: "select * from Msvm_ComputerSystem where "+7: "Caption='仮想マシン' and ElementName='VM'"));8:ManagementObjectCollection moc = mos.Get();

Windows2012ではvirtualization¥v2名前空間

を使用

56

まとめ~ Windows仮想マシンをソフトウェアで制御するための注意点

① VMMの制御はHyper-Vとのタイムラグに注意する

② Hyper-Vの制御を安全に行うにはジョブを確認する

③ SPFではfabricの値が取得できないので、C#などで書いたDLLをPowerShellから呼び出して取得する

57

参考

Hyper-V WMI Classeshttp://msdn.microsoft.com/en-us/library/cc136986(v=vs.85).aspx

Dynamic Datacenter toolkit for HostersDDTK for Hostersホームページ

http://archive.msdn.microsoft.com/ddc

DDTK for Hostersサンプルコードのダウンロード

http://code.msdn.microsoft.com/DDTKH-Sample-Code-d0cb4152

SPFService Provider Foundationのアーキテクチャの概要

http://technet.microsoft.com/ja-jp/library/jj642897.aspx

VMMコレクションズリファレンス

http://msdn.microsoft.com/ja-JP/library/jj906381.aspx

Virtual PC guyhttp://blogs.msdn.com/b/virtual_pc_guy/

58

ご清聴ありがとうございました

お問い合わせ先 IIJインフォメーションセンターTEL:03-5205-4466 (9:30~17:30 土/日/祝日除く)info@iij.ad.jphttp://www.iij.ad.jp/

top related