Hyper-V Server 2012 R2 その②


 Microsoft の Hyper-V Server 2012 R2  上で 、ゲストのLinux ( CentOS6 ) のレプリケーションとフェールオーバーを試してみました。 の続編になります。

 前回 でHyper-V Server の構築を実施しましたが、まず、訂正がひとつあります  ><

 Workgroup 環境で試していたのですが、Active Directry 環境に変更しました。

 理由は、仮想マシンを レプリケーションする際に Hyper-V サーバ間で認証(Kerberos 認証 or サーバ証明書を使った認証)が必要になるのですが、

  1.  Kerberos 認証は Active DIrectory 環境のみで使用可能。 (Workgroup ではサーバー証明書を使った認証のみ可能)
  2.  サーバー証明書は作成が面倒。 (X509v3 デジタル証明書が必要。 Windowsで作成(makecert.exe)する場合、 Windows ソフトウェア開発キット(SDK)の入手が必要)
  3.  他にも、Workgroup 環境の場合、 Hyper-V Server をリモートで管理するためにあれこれ設定(Windows Filrewall に穴あけしたりとか)しないといけない。

 といった事が作業中にわかってきました。。。 
 「Workgroup環境で手っ取り早く」 と思っていたのですが、 Active Directory 環境のほうがはるかに早く簡単に検証できそうだ、ということで、環境を変更しております。 ><

 

(2016.1.8 追記)
 AD環境下でも、リモートから 「コンピュータの管理」 をするために、 Windowsファイアウォールに MMCスナップイン の接続許可をする必要があることがわかったので、Hyper-Vサーバー と Hyper-Vマネージャの双方に、下記を設定しました。

PS C:\> Enable-NetFirewallRule -DisplayGroup "リモート サービス管理"
PS C:\> Enable-NetFirewallRule -DisplayGroup "リモート ボリューム管理"
PS C:\> Enable-NetFirewallRule -DisplayGroup "リモート イベントのログ管理"

 

 

 では、今回は ゲストOS (Linux/CentOS 6)の導入と、 レプリケーションと フェイルオーバーについての備忘録です。

 (参考サイト①:http://www.slideshare.net/NaokiAbe/hyper-v-24568782

 (参考サイト②:http://www.slideshare.net/junichia/hyperv-windows-powershell

 

 おさらいですが、構成はこんなです。

  • Hyper-V Server が 2台、L2SW経由で 1Gbps で接続。
  • 管理用に別途 Hyper-V Manager を用意。 (← 設定は割愛しますが、この Windows Server 2012 R2 に Activi Directory ドメインサービス の役割を追加、Hyper-V Server をそのドメインに参加させました)
  • ゲストに CentOS 6 を載せて、レプリケーション / フェールオーバーの確認をしてみる。(←これが今回の作業)

 

§ 1. 仮想スイッチの設定

 仮想マシンが外部ネットワークに接続するために、まずは仮想スイッチを設定します。 
 (後から作成してもよいのですが、仮想マシン作成中に 「NIC と仮想スイッチの紐付けドウスル?」 って聞かれるので、先に作ってしまいましょう。)

 Hyper-V Manager (の左側ペイン)から HV001 を選択、右クリックして 「仮想スイッチマネージャ」 を起動します。 (もしくは 右側 「操作」 ペインの仮想スイッチマネージャをクリック)

 

 仮想スイッチマネージャーが起動します。

 「どの種類の仮想スイッチを作成しますか」 で 「外部」 を選択し、「仮想スイッチの作成」 をクリックします。

 

 新しい仮想スイッチのプロパティを設定していきます。

 今回は、名前を 「VSW-001_HV001」 としました。 (HV002 側には 「VSW-001_HV002」 を作成)

 接続先の種類で 「外部ネットワーク」 を選択します。 プルダウンリストから NIC ( 今回はハード側のNIC が 1枚なので、プルダウン選択肢も 1つです) を選択。 

 「適用」ボタンをクリックして仮想スイッチを作成します。

 ネットワーク切断の警告が出ますが、 「はい」 で続行。

 

 仮想スイッチが作成されました。

 

 HV002 側にも同様に 仮想スイッチを作成しておきます。

 

 

§ 2. 仮想マシンの作成 と OSインストール

§2-1. 仮想マシンの作成

 次は仮想マシンの作成です。

 Hyper-V Manager の左側ペインで HV001 を選択、右クリックして 「新規」 > 「仮想マシン」 を選択します。 (右側の操作ペイン、もしくは 上部の「操作」メニューからでも)

 

 仮想マシンの新規作成ウィザードが起動します。 「次へ」 で先に進みます。

 

 仮想マシンの名前と保存場所を設定します。  今回は名前を 「CentOS6_001」 とします。 (保存場所のパスは特に変更せず)

 

 仮想マシンの世代を設定します。 今回は第一世代で。 (第二世代に対応するOSは  technet に記載があります)

 

 メモリの割り当てを行います。 今回は、起動メモリ 512MB、「この仮想マシンに動的メモリを使用します」 にチェックを入れて、「次へ」。

 

 ネットワークの設定です。 先ほど作成した仮想スイッチ 「VSW-001_HV001」 をプルダウンから選択。

 

 仮想ハードディスクの設定です。 今回は 「仮想ハードディスクを作成する」 (デフォルトのまま)で、サイズを 128GB -> 32GB に変更。

 

 インストールオプションの選択。 今回は 「後でオペレーティングシステムをインストールする」 を選択して、「次へ」。

 

 「完了」を押して仮想マシンを作成します。

 

 HV001 上に仮想マシンができました!

 

 ここで、仮想マシンのMACアドレスを固定に変更しておきます。 (規定値では動的 MACアドレス)

 今回は、仮想マシンをレプリケーションするために、MACアドレスを固定にします。
 カーネル 2.6.1.3 以降の Linux は デバイス管理に udev (wikipedia) を使用しているため、MACアドレスが変わると違うデバイスとして認識されて(これまで eth0 だったのが eth 1 とか) ネットワークが使用できなくなる為、仮想マシンのMACアドレスを固定します。

 

  • 仮想マシンを右クリック > 「設定」 を選択します。
    ポップアップした設定画面 左ペインの 「ネットワークアダプター」 > 「高度な機能」を選択、「MAC アドレス」 を 「静的」 にチェックを入れます。

 【MACアドレスの固定について】
 今回は、仮想スイッチが動的に提供するMACアドレスの範囲内から、最初の 10個 を固定用に使うこととしました。(00:15:5D:0A:E6:00 ~ 09 までの 10個)
 ので、↓ 仮想スイッチマネージャで、このMACを除外(00:15:5D:0A:E6:10 から提供開始)にしています。

 MACアドレスは本来一意であることが期待されており、特に同一サブネット内でMACアドレスが重複すると正常に通信できません。
 仮想環境の場合、特に同系統のハイパーバイザを複数使用する場合は、 仮想マシンに提供される MAC アドレスが重複する可能性を考慮する必要があります。
 今回のような小規模な仮想環境であればあまり気にする必要もありませんが、ある程度規模が大きくなる場合、MACアドレスを自動で提供する or 固定にする(払い出し管理やベンダコードをどうするか) 、といった検討が必要ですね。。

 

 

§ 2-2. OSインストール

 作成した仮想マシンに OS (今回は CentOS 6 (minimal))  をインストールします。
 (CentOS のインストーラーのダウンロードは こちら から。 今回は 「CentOS-6.7-x86_64-minimal.iso」 です)

 

 ダウンロードした *.iso を Hyper-V Server (HV001)から参照できる場所におきます。 (ローカルフォルダか共有フォルダ)
 今回は HV001 のローカルフォルダ( C:\99.Work\ )に設置。
(HV001 にはブラウザーがないので、別のPCで *iso をダウンロード、USBメモリ経由で HV001 にコピーしました。今回はやってませんが、共有フォルダ(CIFS)に *.iso を置いて、リモート参照も可能です)

PS C:\> mkdir C:\99.Work
PS C:\> cp D:\CentOS-6.7-x86_64-minimal.iso C:\99.Work

 

 仮想マシンの DVDドライブに、 .iso ファイルをマウントします。
Hyper-V Manager で仮想マシン(CnetOS6_001)を右クリックして、「設定」 を選択。

 

 設定画面 左ペインの ハードウェアから、 IDEコントローラー1 > DVDドライブ を選択します。 右ペインに DVDドライブ の設定が出るので、メディアの 「イメージファイル」 を選択。

 参照ボタンをクリックし、<HV001のIP> -> ローカルディスク > 99.Work と辿っていき、.iso を選択して 「開く」 をクリックします。

 

 仮想マシンの DVDドライブに CentOS6 の .iso ファイルがマウントされました。

 「OK」 を押して画面を閉じます。

 

 Hyper-V Manager 内の CentOS6_001 を右クリック > 接続 をします。

 

 仮想マシンを起動します。 (画面 左上の 起動ボタン(緑色)を押すか、 操作 > 起動 をクリック)

 

 仮想マシンが(DVDから)起動しますので、 CentOS をインストールします。 (インストールについては割愛します)

 OS のインストールが終わったら、IPアドレス等の設定を実施しておきます。(こちらについても詳細は割愛しますが、だいたいこんな設定です -> 以前の備忘録(Linuxサーバ初期設定))

 

 

§ 3. レプリケーション

 HV001 上の 仮想マシン(CentOS6_001) を HV002にレプリケーションしてみます。

 レプリケーションを行うには、① Hyper-V Server 側を設定、② 仮想マシン毎にレプリケーションを設定、 が必要になります。

 

§ 3-1. Hyper-V Server 側の設定

 Hyper-V Manager で 「HV001」 を選択、右クリックして 「Hyper-V の設定」 を起動します。 (下図では HV002 を選択してますが、HV001 / 002 ともに同じ設定が必要になるので、どちらからでも構いません)

 

 Hyper-V の設定画面 左側ペインで 「サーバー」 > 「レプリケーションの構成」 を選択します。
 右側ペインに 「レプリケーションの構成」 が出ますでの、「レプリカサーバーとしてこのコンピュータを有効にする」 にチェックを入れます。
 続いて、「認証とポート」 から 「Kerberos を使用する」 にチェックを入れます。 (認証は必須。 Kerberos と 証明書の併用も可能)

 画面下方の 「承認と記憶域」 は 「認証されたすべてのサーバーからのレプリケーションを許可する」 にします。 (ファイルの格納パスも規定値)

 「適用」 をクリックして設定完了です。

 

 適用したら次のようなポップアップが。。。

 Windows Firewall に穴をあけないとです。(すでに許可している場合でも、このメッセージは表示されます)  

 

 Hyper-V Server (HV001 / HV002 )の Windows Firewall で tcp/80 を許可する設定します。 (リモートからの設定が面倒なので、それぞれの ローカルコンソールから設定) 

 変更操作は PowerShell のコマンドレットで行います。 まずは  cmd.exe を PowerShell に。

C:\> powershell
Windows PowerShell
Copyright (C) 2014 Microsoft Corporation. All rights reserved.

PS c:\> 

 

 現在の Windows Firewall の受信規則を確認。

PS c:\> Get-NetFirewallRule -Direction Inbound

<大量に出力があります>

 

 Hyper-V レプリカに関する設定の確認。

PS c:\> Get-NetFirewallRule -Direction Inbound -Description *レプリカ*


Name                  : VIRT-HVRHTTPL-In-TCP-NoScope
DisplayName           : Hyper-V レプリカ HTTP リスナー (TCP 受信)
Description           : レプリケーションの HTTP 接続を受信する Hyper-V レプリカ
                         リスナーの受信規則です。[TCP]
DisplayGroup          : Hyper-V レプリカ HTTP
Group                 : @%systemroot%\system32\vmms.exe,-251
Enabled               : False
Profile               : Any
Platform              : {}
Direction             : Inbound
Action                : Allow
EdgeTraversalPolicy   : Block
LooseSourceMapping    : False
LocalOnlyMapping      : False
Owner                 :
PrimaryStatus         : OK
Status                : 規則は、ストアから正常に解析されました。 (65536)
EnforcementStatus     : NotApplicable
PolicyStoreSource     : PersistentStore
PolicyStoreSourceType : Local

Name                  : VIRT-HVRHTTPSL-In-TCP-NoScope
DisplayName           : Hyper-V レプリカ HTTPS リスナー (TCP 受信)
Description           : レプリケーションの HTTPS 接続を受信する Hyper-V レプリ
                        カ リスナーの受信規則です。[TCP]
DisplayGroup          : Hyper-V レプリカ HTTPS
Group                 : @%systemroot%\system32\vmms.exe,-253
Enabled               : False
Profile               : Any
Platform              : {}
Direction             : Inbound
Action                : Allow
EdgeTraversalPolicy   : Block
LooseSourceMapping    : False
LocalOnlyMapping      : False
Owner                 :
PrimaryStatus         : OK
Status                : 規則は、ストアから正常に解析されました。 (65536)
EnforcementStatus     : NotApplicable
PolicyStoreSource     : PersistentStore
PolicyStoreSourceType : Local

PS C:\>

 

 HTTPリスナー が false (無効) になっているので、True (有効) にします。  (サーバー証明書を使用するのであれば、HTTPS も true に)

PS C:\> Set-NetFirewallRule -Name "VIRT-HVRHTTPL-In-TCP-NoScope" -Enable True

 

 Hyper-V Server 2台(HV001 / HV002) ともに、上記の設定を行います。

 

 

§ 3-2. 仮想マシン側の設定

 次に、 Hyver-V Manager からHV001 上の CentOS6_001 を選び、右クリック > 「レプリケーションを有効にする」 を選択します。

 

 レプリケーション ウィザードが開始されます。

 

 レプリカサーバーの指定。  「HV002」 を指定して、「次へ」。

 

 接続パラメータの指定。 ここは特に変更せず 「次へ」。

 

 レプリケーション VHD の選択。 ここも規定値のまま 「次へ」。

 

 レプリケーションの頻度。 とりあえず規定値の 「5分」にしておきます。 (30秒、5分、15分、の選択が可能)

 

 追加の回復ポイント。 こちらも規定値(最新のだけ)にしておきます。

 

 初期レプリケーションの方法。 ネットワーク経由ですぐに。

 

 「完了」をクリックしてウィザード終了です。

 

 レプリケーションが正常に有効になりました!

 

 初期コピーが完了後、HV002 上に オフ状態の CentOS6_001 が現れます。

 (検証環境の問題かもしれませんが) 作成されたレプリカ仮想マシンにはネットワークアダプタが接続されていませんでしたので、手動で接続を行っています。

 なお、MACアドレスはレプリカ元と同じ静的になってました。

 

 

 レプリケーションの状況は、仮想マシンを右クリック > 「レプリケーション」 > 「レプリケーションの正常性の表示」 で確認できます。

 

 

§ 4. フェールオーバー

 Hyper-V では 3種類のフェールオーバーがあります。

フェールオーバーの種類 説明 操作するサーバー
テストフェールオーバー

実際にフェールオーバーさせることなく、レプリカ仮想マシンの動作確認が行える。 (規定ではネットワークに未接続)

 レプリカサーバー
計画フェールオーバー

 仮想マシンをプライマリサイトからレプリカサイトに計画的に移動する機能。 

完全なレプリケートが行えるが、移動する仮想マシンは Power OFF にする必要がある。

 プライマリサーバー
フェールオーバー

プライマリサイトの障害時に使用。

強制的にレプリカ側の仮想マシンを回復ポイントから起動する。

 レプリカサーバー

 

§ 4-1. テストフェールオーバー

 レプリカサーバー上に一時的な仮想マシンが (指定した回復ポイントから Power OFF の状態で) 作成されます。 
 PowerON することで、実際にフェールオーバーさせることなく、レプリカ仮想マシンの稼働確認が行えます。   

 ※ 規定ではネットワーク接続はなし(スタンドアローン)。
 ※ テストフェールオーバーを終了すると、一時仮想マシンは削除されます。

 

 HV002 上の CentOS6_001 を右クリック > 「レプリケーション」 > 「テストフェールオーバー」 を選択。

 

 テストフェールオーバーをクリック。

 

 HV002 上に 「CentOS6_001 – テスト」 の名称で仮想マシンが作成されます。

 

 起動してみます。

 

 ネットワークアダプターが接続されていない事を除き、元の仮想マシンと同一です。(のはず)

 

 このテスト仮想マシンで、例えば仮想マシンが開始・一時停止・停止できることや、アプリケーションの起動・稼働確認等が行えます。
(IPアドレスが Duplicate しないように再設定すれば、実際にネットワークを接続してのテストもできます)

 テストが終了したら、HV002 上の CentOS6_001 を右クリック > 「レプリケーション」 > 「テストフェールオーバーの中止」 を選択。

 「テストフェールオーバーの中止」 をクリックすると、一時仮想マシンが削除されます。

 

 

§ 4-2.  計画フェールオーバー

 仮想マシンを計画的にレプリカサイトに移動させる機能です。

 完全なレプリカを作成できますが、仮想マシンを停止する必要があります。

 

 停止済みのプライマリサイトの仮想マシン (今回であれば HV001 上の CentOS6_001) を右クリック > 「レプリケーション」 > 「計画フェールオーバー」 を選択します。

 

 フェールオーバーをクリックします。
 (規定では 「フェールオーバー後に仮想マシンを起動」 するにチェックが入ってますが、外してももちろん構いません。 その場合は後で手動起動。  「フェールオーバー後に・・・反転する」 も、規定ではチェックなしですが、ここで有効にしてもよいですし、あとからでも有効にできます)

 

 前提条件が満たされていれば、下記のように各フェーズが成功して、フェールオーバーが完了します。

 

 HV002 上でレプリカ仮想マシンが稼働します。

 レプリカ仮想マシンの作成時にネットワークを接続していますが、念のため、仮想マシンのネットワーク接続については、もう一度確認したほうがよいでしょう。

 

 

 今回はフェールオーバー実行時にレプリケーションを反転させましたので、レプリカ起動時とともに HV002 から HV001 にレプリケーションが行われています。

 

 HV001 側に戻すには、HV002 上の仮想マシンを停止(シャットダウン)、右クリック > 「レプリケーション」 > 「計画フェールオーバー」 を実行します。

 

 

§ 4-3. フェールオーバー (とフェールバック)

 フェールオーバーは、仮想マシンを強制的にレプリカサーバーに移す機能です。

 プライマリサイトの障害を前提に稼働させる機能ですので、まずはプライマリの仮想マシンを(障害のつもりで)停止して、試してみます。(プライマリ仮想マシンの起動中にフェールオーバーさせたらどうなるかは、この後で試してみたいと思います。)

 

 

  プライマリサイト、レプリカサイトの仮想マシンともに停止状態になっている事を確認し、レプリカサイト(HV002)上の仮想マシンを右クリック >  「レプリケーション」 > 「フェールオーバー」 を選択。

 

 回復ポイントをプルダウンから選択し、「フェールオーバー」 をクリック。

 

 レプリカ側(今回であれば HV002上 )で仮想マシンが稼働しました。 

 回復ポイントが作成されたタイミング次第ですが、「計画フェールオーバー」 や 仮想マシンの移動(ライブマイグレーション) とは違い、最新の状態ではない可能性がありますので、注意が必要ですね。
 ・・・とはいっても、どうしようもないですが。。。

 

 ここで、仮想マシンのレプリケーションの状態を見てみる(右クリック > 「レプリケーション」 > 「レプリケーションの正常性の表示」)と、 フェールオーバー前と変わっていない(HV001 -> HV002 へレプリケーションが継続されている) ことがわかります。

  • HV002 上の仮想マシン(CentOS6_001)で確認したところ。

 

  • HV001 上の仮想マシンで確認したところ。

 

 これだとまずいので、(HV001 が障害から復旧したことを前提に) レプリケーションの方向を 反転(HV002 から HV001 に複製)させます。

 

  • HV002 上の仮想マシンを右クリック > 「レプリケーション」 > 「レプリケーションの反転」 を選択。

 

 ウィザードが開始されます。 指示にしたがってレプリケーションを反転(HV002 から HV001 に向けてレプリケート)します。

 

 レプリカサーバには 「HV001 」 を。

 

 これで、プライマリサイトがひっくり返った以外は、元通りになりました。

 

 最後にフェールバック(プライマリサイトを HV001 に戻す)です。
 (このままでもいいんですが・・・)

  「計画フェールオーバー」 、「フェールオーバー」 のどちらでもフェールバックできますが、仮想マシンの同期などを考慮すると、「計画フェールオーバー」 で戻してあげるのがいいはず。
 (これまでのと被るので、操作記録はなしです)

 

 

【HV001 上の仮想マシンが起動している状態で、フェールオーバーを実行してみました】

 最後に。
 操作間違いや、実際にこういった類の障害が発生しないとも限りませんので、プライマリ仮想マシン(HV001)が起動している状態で、フェールオーバーを行うとどうなるのか、試してみました。

 結論から言うと、フェールオーバー実行 > プライマリサイトの仮想マシンが(自動で)一時停止し、HV001 -> HV002 のレプリカも停止しました。

  • HV001 上の仮想マシン: (自動で)一時停止
  • HV002 上の仮想マシン: 稼働
  • レプリケーション: 停止

 なのですが、おそらく、自動停止するまでの時間 = レプリケーション間隔(今回だと 5分)、のように見受けられます。
 HV001 上の仮想マシンが自動停止するまでの間、IP アドレス/MACアドレスが Duplicate になってしまうので、通信が混乱します(するはず)。
 ですので、プライマリ側は やはり事前に停止しておくのが無難ですね。。。 (実際の障害ではそんな余地もないかもしれませんが)

 この検証ですが、一回目は上記のような状況だったのですが、次に同じことをしたところ、下記のように電源OFFしろと怒られました。。。

 

 では、 HV001 のLANケーブルを抜いて、HV002 にフェールオーバーさせてから、HV001 が復帰(LANケーブルを挿す)したらどうなるだろう、と思って試したところ、

 最初の検証と同じ状態になりました。(HV001 上の仮想マシンが自動で一時停止、レプリケーションも停止)

 ちゃんと整合性とるような仕組みが実装されるようです。。。

 

 

 以上で、今回の備忘録は終了です。
 無料でここまでできるとは、Hyper-V のレプリカ機能、かなりイイですね。 別サブネットでもレプリカ動かせるそうなので(今回は検証してませんが)DRにもってこいかも。

 Hyper-V には、今回試してみたレプリケーション以外にも、ライブマイグレーション(仮想マシンが起動した状態で、他の Hyper-V Server に移動する) もできますので、レプリケーションとの併用も気になるところです。 こちらについては、また別の機会にでも備忘録したいと思います。

 

 

 

コメントを残す

メールアドレスが公開されることはありません。 * が付いている欄は必須項目です