WIN1@Codename

Codename

スポンサーサイト

上記の広告は1ヶ月以上更新のないブログに表示されています。
新しい記事を書く事で広告が消せます。

委任設定が必要なLive Migration

今回解説するのは、Hyper-Vの目玉機能の一つ、Live Migrationです。通常のLive Migrationであれば、Hyepr-Vマネージャーから簡単に操作できますが、ここではもう少し踏み込んで、プログラムマチックにLive Migrationの実行方法をご紹介いたします。簡単におさらいとして、WidnwosServer2012R2のLive Migrationの実行方法からご説明いたします。
■Live Migrationの実行方法

Hyper-VマネージャーからLive Migrationを実行する仮想マシンを選択して、ウィザードを起動します。





Live Migrationにはいくつか種類があり、仮想マシンを移動する場合と、仮想マシンのディスクのみを移動する方法があります。仮想マシンを移動する場合は、ディスクごと移動することもできますし、Hyper-Vをクラスタ構成して、共有ストレージに仮想マシンのディスクを配置している場合などは、仮想マシンの構成情報のみ移動することが可能です。





    ウィザードに従って実行すると、簡単にLive Migrationが実行できます。







    さて、以上がHyper-Vマネージャーを使って、自分自身のサーバーから他のサーバーに移動する方法です。

    では、外部からサーバー間のLive Migrationを実行するにはどのような手段があるでしょうか。第3のサーバーのHyper-Vマネージャーに対象となるサーバー2つを登録して実行する方法があります。しかし、そのままLive Migrationを実行すると「0x8009030E」というアクセス権のエラーが出現してしまいます。





    PowerShellやWMI経由で実行する場合も同様のエラーが発生します。プログラムから実行した場合はこのようなエラーが起こります。

    「'VM001' の仮想マシン移行操作が失敗しました。
    仮想マシン管理サービスは、ホストとの仮想マシンの移行のための接続を確立できませんでした: セキュリティ パッケージで利用できる資格情報がありません (0x8009030E)。
    ソース ホストで接続を認証できませんでした: 適切な資格情報がありません。」


    この場合、回避するために、ドメインに参加した状態でKerberos認証 の委任設定を行う必要があります。詳細な設定方法はこちらです。

    ■Kerberos認証 の委任設定方法

    まず、ドメインコントローラーの「Active Directory ユーザーとコンピューター」から、Live Migrationを実行するサーバー2台を選択します。





    サーバー名を右クリックして「プロパティ」を開きます。「委任」タブを選択します。「指定されたサービスへの委任でのみこのコンピューターを信頼する」を選択し、「Kerberos のみを使う」を選択します。





    この状態で「追加」ボタンをクリックし、「サービスの追加」から「ユーザーまたはコンピューター」を選択します。「ユーザーまたはコンピューター の選択」ダイアログにて、「オブジェクトの種類」から「コンピューター」を選択します。そしてLive Migrationを実行する相手方の対象となるサーバー名を入力します。





    すると「利用可能なサービス」に一覧が表示されますので、その中から「cifs」と「Microsoft Virtual System Migration Service」の2つのサービスをCtrlキーを押しながら選択して、「OK」ボタンをクリックして追加します。








    サーバーのプロパティダイアログに戻り「OK」ボタンをクリックして完了します。





    同様に、もう一方のサーバーのプロパティダイアログからも、「cifs」と「Microsoft Virtual System Migration Service」の2つのサービスを追加しておきます。Live Migrationを実行しようとしている2つのサーバーが、お互いに相手となるサーバーを「cifs」と「Microsoft Virtual System Migration Service」サービスに関してKerberosを使用して信頼して委任するという設定です。

    この設定の後、あらためてLive Migrationを実行してみると、無事完了することができました。
    また、この委任の設定ですが、委任設定を行っても、同様のアクセス権エラーが発生した場合は、委任設定の反映に時間がかかる場合があるようです。その場合、しばらく時間を置き、再度Live Migrationを実行する事をおすすめいたします。

    GMO最新ネット業界レポートらしく、WMIを使ったLive Migrationのサンプルコードもご紹介いたします。

       1:  Imports System.Management
       2:   
       3:  Module GMOReport
       4:      Sub Main()
       5:          Dim strUser As String = ""
       6:          Dim strPass As String = ""
       7:          Dim objManagementScope As ManagementScope = ConnectManagementScope("win2012.local", strUser, strPass)
       8:          objManagementScope.Connect()
       9:   
      10:         Dim strVMName As String = "VM001"
      11:         Call MigratVM(objManagementScope, strVMName,  "Dist_WinSvr2012R2", "D:\Hyper-V\VM01")
      12:     End Sub
      13:   
      14:     Function ConnectManagementScope(ByVal strServer As String, ByVal strAccount As String, ByVal strPassword As String) As ManagementScope
      15:         Dim objConnectionOptions As New ConnectionOptions()
      16:         objConnectionOptions.Impersonation = ImpersonationLevel.Impersonate 'WMI への接続に使用される偽装レベルを設定
      17:         objConnectionOptions.EnablePrivileges = True 'WNI経由の操作のためにユーザー特権を有効にする
      18:         objConnectionOptions.Username = strAccount
      19:         objConnectionOptions.Password = strPassword
      20:         Dim objManagementScope As New ManagementScope("\\" + strServer + "\root\virtualization\v2", objConnectionOptions)
      21:         objManagementScope.Connect()
      22:         Return (objManagementScope)
      23:     End Function
      24:   
      25:     Function MigratVM(ByVal objManagementScope As ManagementScope, strVMName As String, strDestinationHost As String, ByVal strRootPath As String) As Boolean
      26:   
      27:         Dim objComputerSystem As ManagementObject = Nothing
      28:         For Each objManagementObject As ManagementObject In New ManagementObjectSearcher(objManagementScope, New ObjectQuery( "SELECT * FROM Msvm_ComputerSystem WHERE ElementName = '" & strVMName & "'" )).Get
      29:          objComputerSystem = objManagementObject 
      30:         Next
      31:   
      32:         Dim objVirtualSystemsettingData As ManagementObject = Nothing
      33:         For Each objManagementObject As ManagementObject In objComputerSystem.GetRelated("Msvm_VirtualSystemSettingData")
      34:             If String .Compare(objManagementObject( "ElementName").ToString, strVMName, True  ) = 0 Then
      35:                 objVirtualSystemsettingData = objManagementObject 
      36:                 If Not strRootPath = ""  Then
      37:                     objVirtualSystemsettingData("ConfigurationDataRoot") = strRootPath 
      38:                     objVirtualSystemsettingData("SnapshotDataRoot") = strRootPath 
      39:                     objVirtualSystemsettingData("SwapFileDataRoot") = strRootPath 
      40:                 End If 
      41:              End If
      42:          Next
      43:   
      44:          Dim objVirtualSystemMigrationSettingData As New ManagementClass(objManagementScope, New ManagementPath("Msvm_VirtualSystemMigrationSettingData"), Nothing)
      45:          Dim objVirtualSystemMigrationSettingDataInstance As ManagementObject = objEthernetPortAllocationSettingData.CreateInstance
      46:          objVirtualSystemMigrationSettingDataInstance("MigrationType") = 32771 'VirtualSystem:32768 Storage:32769 Staged:32770 VirtualSystemAndStorage:32771
      47:          objVirtualSystemMigrationSettingDataInstance("TransportType") = 5 'TransportType.Tcp
      48:          objVirtualSystemMigrationSettingDataInstance("EnableCompression") = True
      49:   
      50:          Dim i As Integer = 0 
      51:          Dim strStorageAllocationSettingData() As String
      52:          Dim objHardDisk As ManagementObject = Nothing
      53:          For Each objManagementObject As ManagementObject = In objVirtualSystemsettingData.GetRelated("Msvm_StorageAllocationSettingData")
      54:              If objManagementObject("ResourceSubType") = "Microsoft:Hyper-V:Virtual Hard Disk" Then
      55:                  objHardDisk = objManagementObject
      56:                  If Not strRootPath = "" Then
      57:                      Dim strVhdPath As String = objHardDisk("HostResource")(0)
      58:                      objHardDisk("HostResource") = New String() {strRootPath & "\" & System.IO.Path.GetFileName(strVhdPath)}
      59:                  End If
      60:                  ReDim Preserve strStorageAllocationSettingData(i)
      61:                  strStorageAllocationSettingData(i) = objHardDisk.GetText(TextFormat.CimDtd20)
      62:                  i += 1
      63:              End If
      64:          Next
      65:   
      66:          For Each objVirtualSystemManagementService As ManagementObject In New ManagementObjectSearcher(objManagementScope, New ObjectQuery("SELECT * FROM Msvm_VirtualSystemMigrationService")).Get
      67:              Dim objParams As ManagementBaseObject = objVirtualSystemManagementService.GetMethodParameters("MigrateVirtualSystemToHost")
      68:              objParams("ComputerSystem") = objComputerSystem.Path.Path
      69:              objParams("DestinationHost") = strDestinationHost
      70:              objParams("MigrationSettingData") = objVirtualSystemMigrationSettingDataInstance.GetText(TextFormat.CimDtd20)
      71:              objParams("NewSystemSettingData") = objVirtualSystemsettingData.GetText(TextFormat.CimDtd20)
      72:              objParams("NewResourceSettingData") = strStorageAllocationSettingData
      73:              Dim objManagementBaseObject As ManagementBaseObject = objVirtualSystemManagementService.InvokeMethod("MigrateVirtualSystemToHost", objParams, Nothing)
      74:              Return JobComplete(objManagementBaseObject, objManagementScope)
      75:          Next
      76:      End Function
      77:   
      78:      Function JobComplete(ByVal objManagementBaseObject As ManagementBaseObject, ByVal objManagementScope As ManagementScope) As Boolean
      79:          'JobState New = 2  Starting = 3  Running = 4  Suspended = 5  ShuttingDown = 6  Completed = 7  Terminated = 8  Killed = 9  Exception = 10  Service = 11
      80:          If objManagementBaseObject("ReturnValue") <> 0 Then
      81:              Dim strJobPath As String= objManagementBaseObject("Job")
      82:              Dim objJob As New ManagementObject(objManagementScope, New ManagementPath(strJobPath), Nothing)
      83:              objJob.Get())
      84:              Do While objJob("JobState") = 3 Or objJob("JobState") = 4
      85:                  System.Threading.Thread.Sleep(1000)
      86:                  objJob.Get()
      87:              Loop
      88:              If objJob("JobState") <> 7 Then
      89:                  Console.WriteLine("ErrorCode="& objJob("ErrorCode") & " JobState=" & objJob("JobState"))
      90:                  Return False
      91:              Else
      92:                  Return True
      93:              End If
      94:          Else
      95:              Return True
      96:          End If
      97:      End Function
      98:  End Module



    今回はPowerShellのコードもご紹介いたします。
    自分自身から他のサーバーへのLive Migrationは、



    Move-VM -Name "VM001" -DestinationHost "Dist_WinSvr2012R2" -IncludeStorage -DestinationStoragePath "D:\Hyper-V\VM001"



    (参考)外部からサーバー間のLive Migrationを実行するには



     1: $AdminPassword = ConvertTo-SecureString "password" - AsPlainText - Force
     2: $RremotingCreds = New-Object -TypeName System.Management.Automation.PSCredential -ArgumentList "DOMAIN\Administrator", $AdminPassword
     3: $Session = New-PSSession -Authentication Credssp -Credential $remotingCreds -ComputerName " WinSvr2012R2"
     4: Invoke-Command -Session $Session -ScriptBlock {Move-VM -Name "VM001" -DestinationHost "Dist_ WinSvr2012R2" -IncludeStorage -DestinationStoragePath "D:\hyper-V\VM001"}



    といったサンプルコードです。
    以上、今回は委任設定が必要なLive Migrationをご紹介いたしました。





    Hyper-Vをみんなで使いやすくするためのオープンコミュニティーをスタートしました

    WMIのサンプルコードやTipなど幅広く情報共有してゆきたいと思います。

    Hyper-Vというキーワードにピンときたら、是非メンバーとしてご参加ください。


    → 日本初のHyper-V オープンコミュニティー 「InvokeV」


    スポンサーサイト

    SPLAの新しいライセンス形態 「Cloud Platform Suite」

    今年から新しいSPLAのライセンス形態「Cloud Platform Suite」が提供されました。

    これまで、サービス提供を行うには、SPLAではWindows Server 2012R2 Datacenter Edition のライセンスを物理CPU分の月払いというもので、Hyper-V上のVM数は無制限というものでした。

    「Cloud Platform Suite」では、ホストとなるWindows Server 2012R2 Datacenter Editionの価格を数百円程度に下げ、そのHyper-V上に稼働するWindows Server 2012R2のVMごとに課金するといった形式のものです。

    また、「Cloud Platform Suite」にはSystem Center 2012 R2、Windows Azure Pack(+SQLServer Standard)のライセンスまで含まれているもとのなります。

    もし、Hyper-V上にLinuxのVMのみ稼働させるのであれば、ホスト分の数百円程度のライセンス費用で、System Centerまで使えるといった破格のものとなります。

    概算では、System Centerのライセンスまで踏まえると、Windows Server 2012R2のVMが10程度台稼働しているようなHyper-Vホストの場合は「Cloud Platform Suite」の方がこれまでの、Windows Server 2012R2 Datacenter Editionよりお得感があるようです。

    Hyper-Vのサービサーとしては、選択肢が広がるナイスな情報ですね!

    詳細はこちら
    https://mspartner.microsoft.com/en/mt/pages/licensing/downloads/windows-server-2012-r2-and-cloud-platform-suite-faq.aspx

    InvokeV

    このたび、日本初のHyper-Vユーザーのためのコミュニティー

    InvokeV

    を発足しました。

    Hyper-Vユーザーのための情報共有と、Hyper-V Provisioning のためのオープンソースの公開が主な目的です。

    FBのグループが現在の起点となっておりますので、皆様のご参加をお待ちしております。

    https://www.facebook.com/groups/749187091776055/

    よろしくお願いします!

    20142312080235

    FC2Ad

    上記広告は1ヶ月以上更新のないブログに表示されています。新しい記事を書くことで広告を消せます。