LoginSignup
2
4

More than 5 years have passed since last update.

今更ながらにHyper-vの冗長化 (Hyper-Vレプリケーション 七転八倒編)

Last updated at Posted at 2018-10-13

仮想化ホストを冗長化してみようというテスト。
まずはHyper-Vのレプリケーション機能を使って最低限の冗長性を。
最低限なのでADとか使いません。

!!!注意!!!

この試みは失敗に終わっています。解決編まで見てね。
この試みは失敗に終わっています。解決編まで見てね。
この試みは失敗に終わっています。解決編まで見てね。

テスト環境

テスト環境

Windows Server 2016 + Hyper-Vを導入したサーバーを2台用意。
最低限のネットワークとしてHyperVで使用するホスト用と、サーバー間データ転送に使うストレージ用の2つのネットワークを作成。

HyperV1 HyperV2
ホスト名 castor1 pollux1
fqdn castor.hyperv.local pollux.hyperv.local
eth0 192.168.11.231 192.168.11.232
eth1 10.20.30.10 10.20.30.20

fqdnで証明書を作るのでシステムのプロパティからプライマリDNSサフィックスを登録しておく。

スクリーンショット (43).png

hostsにそれぞれfqdnで接続できるように設定

{system32}\drivers\etc\hosts
10.20.30.10 castor.hyperv.storage
10.20.30.20 pollux.hyperv.storage

192.168.11.231 castor.hyperv.local
192.168.11.232 pollux.hyperv.local

それぞれのネットワークで相互の導通が確認できている状態。

Hyper-Vにレプリケーションを設定

双方のサーバー用のオレオレ証明書2を作る

スクリーンショット (46).png

ADを使わないでレプリケーションをするためには証明書ベースで認証する必要がある。
ところが正式な証明書をきちんと手に入れるためにはADがほしいという再帰構造で非常に面倒くさいのでオレオレ証明書でやっつける。

Windows10 / Windows Server 2016 以降用。
どこの環境で作っても一緒なので適宜。以下castorで作業。

ホスト名保証用のfqdnとストレージネットワーク用のfqdnをサブジェクト代替名に併記しておく。

PS C:\Users\Administrator> New-SelfSignedCertificate -DnsName "castor.hyperv.local","castor.hyperv.storage" CertStoreLocation "cert:\LocalMachine\My" -TestRoot

   PSParentPath: Microsoft.PowerShell.Security\Certificate::LocalMachine\My
Thumbprint                                Subject                                                                                                                                                           
----------                                -------                                                                                                                                                           
6B8F53418C906ACDD707810073F4424C4963447A  CN=castor.hyperv.local                                                                                                                                            

PS C:\Users\Administrator> New-SelfSignedCertificate -DnsName "pollux.hyperv.local","pollux.hyperv.storage" CertStoreLocation "cert:\LocalMachine\My" -TestRoot

   PSParentPath: Microsoft.PowerShell.Security\Certificate::LocalMachine\My
Thumbprint                                Subject                                                                                                                                                           
----------                                -------                                                                                                                                                           
97E639E2F79BCC1ED44431DC48EAE1DACD79646A  CN=pollux.hyperv.local  

それ以前のバージョンだと -TestRootが使えないので先にルート証明書を作る必要があるみたい。

出来た証明書の確認とエクスポート

コンピュータの証明書スナップイン3を開いて確認してみる。

サーバー証明書

スクリーンショット (48).png
証明書作成時に –CertStoreLocation "cert:\LocalMachine\My"と指定しているのでローカルコンピューター/個人/証明書に証明書ができているのでこれをそれぞれエクスポートする。

ウィザードの流れ

スクリーンショット (50).png
ここから
スクリーンショット (51).png
こう
スクリーンショット (52).png
こう
スクリーンショット (53).png
こう
スクリーンショット (54).png
こうして
スクリーンショット (55).png
こうじゃ

ルート証明書

あとルート証明書が-TestRootによって
スクリーンショット (47).png
中間証明機関/証明書にできているのでこれもエクスポート。

ウィザードの流れ

スクリーンショット (56).png
こう
スクリーンショット (57).png
こう
スクリーンショット (58).png
こう
スクリーンショット (59).png
はい。

証明書を双方のサーバー4にインストールする。

スクリーンショット (60).png
ここまででこのファイルが出来ているので、これをそれぞれのサーバーにコピーする。

(今回は証明書をcastorで作ったので証明書の登録はpolluxでやる。)

ルート証明書のインストール

スクリーンショット (65).png
こうやって
スクリーンショット (62).png
こう
スクリーンショット (63).png
こう
スクリーンショット (64).png

サーバー証明書のインストール

スクリーンショット (66).png
こうやって
スクリーンショット (67).png
こう
スクリーンショット (68).png
こう
スクリーンショット (69).png
こう
スクリーンショット (70).png
こう
スクリーンショット (71).png
はい。

これを2サーバー分繰り返す
これを2サーバー分繰り返す
これを2サーバー分繰り返す

大事なことなので3回(ry

HyperVサーバー上で証明書を作っていたらルート証明書を信頼できるとこに置く

ほかのPCで証明書作った場合は関係ないです。

スクリーンショット (72).png

信頼されたルート証明機関/証明書にドラッグ&ドロップでポイっとする。

Hyper-Vにレプリケーションの設定をする

スクリーンショット (73).png
ここまでで両方のサーバーで双方の証明書が登録されてるはずなのでここからHyperVに設定していく。

念の為オレオレ証明書の失効チェックを外しておく

ここまでの流れで作った証明書は1年で失効するので念の為。
「このテスト環境なんてすぐ捨てるから関係ねーよ」って人は無視してOK

reg add "HKLM\SOFTWARE\Microsoft\Windows NT\CurrentVersion\Virtualization\Replication" /v DisableCertRevocationCheck /d 1 /t REG_DWORD /f

レプリケーションの設定

レプリケーションには方向があってVMが動作する方のサーバーをプライマリ、プライマリの情報を逐次同期して備えておくほうのサーバーをレプリカと呼ぶ。

まずはcastorをプライマリ、polluxをレプリカとして設定してみる。
Untitled (1).png

レプリカサーバー(pollux)で受け入れ準備

スクリーンショット (75).png

レプリケーションの構成からチェックボックス2個チェックして証明書を選択。でOK。
ここでエラーが出たら証明書のインストールが終わってないかルート証明書が信頼できないか、そのあたり。

スクリーンショット (76).png
VMのレプリケーションにはSSL(443)を使用するのでファイアーウォールに穴をあける。

スクリーンショット (77).png

これでOK。

プライマリサーバー(castor)のVMにレプリケーションの設定

プライマリで稼働しているVMにレプリケーションの設定をする。
スクリーンショット (78).png
VMからウィザード開いて
スクリーンショット (79).png
こうして
スクリーンショット (80).png
こう
スクリーンショット (81).png
こうなって
スクリーンショット (82).png
こう
スクリーンショット (88).png
できた!

スクリーンショット (88)1.png

\(^o^)/

七転八倒

試しにhyperv.localネットワークでレプリケーションしてみる

スクリーンショット (93).png

スクリーンショット (94).png

てめぇ!

これなんかの原因で間違ったNIC使ってるわ。

ルーティングでNICを縛る

C:\Users\Administrator>route print -4
===========================================================================
インターフェイス一覧
  7...00 25 90 2d 80 a9 ......Intel(R) 82576 Gigabit Dual Port Network Connection
  6...00 25 90 2d 80 a8 ......Hyper-V Virtual Ethernet Adapter
  1...........................Software Loopback Interface 1
  3...00 00 00 00 00 00 00 e0 Microsoft ISATAP Adapter
 11...00 00 00 00 00 00 00 e0 Teredo Tunneling Pseudo-Interface
 17...00 00 00 00 00 00 00 e0 Microsoft ISATAP Adapter #3
===========================================================================

IPv4 ルート テーブル
===========================================================================
アクティブ ルート:
ネットワーク宛先        ネットマスク          ゲートウェイ       インターフェイス  メトリック
          0.0.0.0          0.0.0.0     192.168.11.1   192.168.11.231    291
       10.20.30.0    255.255.255.0            リンク上       10.20.30.10    291
      10.20.30.10  255.255.255.255            リンク上       10.20.30.10    291
     10.20.30.255  255.255.255.255            リンク上       10.20.30.10    291
        127.0.0.0        255.0.0.0            リンク上         127.0.0.1    331
        127.0.0.1  255.255.255.255            リンク上         127.0.0.1    331
  127.255.255.255  255.255.255.255            リンク上         127.0.0.1    331
     192.168.11.0    255.255.255.0            リンク上    192.168.11.231    291
   192.168.11.231  255.255.255.255            リンク上    192.168.11.231    291
   192.168.11.255  255.255.255.255            リンク上    192.168.11.231    291
        224.0.0.0        240.0.0.0            リンク上         127.0.0.1    331
        224.0.0.0        240.0.0.0            リンク上       10.20.30.10    291
        224.0.0.0        240.0.0.0            リンク上    192.168.11.231    291
  255.255.255.255  255.255.255.255            リンク上         127.0.0.1    331
  255.255.255.255  255.255.255.255            リンク上       10.20.30.10    291
  255.255.255.255  255.255.255.255            リンク上    192.168.11.231    291
===========================================================================
固定ルート:
  ネットワーク アドレス          ネットマスク  ゲートウェイ アドレス  メトリック
          0.0.0.0          0.0.0.0     192.168.11.1     既定
          0.0.0.0          0.0.0.0     192.168.11.1     既定
===========================================================================

C:\Users\Administrator>route add -p 10.20.30.0 mask 255.255.255.0 10.20.30.1 metric 1
OK!
C:\Users\Administrator>route print -4
()
===========================================================================
固定ルート:
  ネットワーク アドレス          ネットマスク  ゲートウェイ アドレス  メトリック
          0.0.0.0          0.0.0.0     192.168.11.1     既定
          0.0.0.0          0.0.0.0     192.168.11.1     既定
       10.20.30.0    255.255.255.0       10.20.30.1       1
===========================================================================

で、再実行。

スクリーンショット (95).png

なぜだ!

名前解決が間違えるなら名前を変えればいいじゃない

WindowsのNICの選び方の罠 - Qiita

{system32}\drivers\etc\hosts
10.20.30.10 castor-LB , castor-LB.hyperv.storage
10.20.30.20 pollux-LB , pollux-LB.hyperv.storage

192.168.11.231  castor , castor.hyperv.local
192.168.11.232  pollux , pollux.hyperv.local

スクリーンショット (106).png
証明書も作り直し

スクリーンショット (107).png

あばばばばばば

0x00002EFE でぐぐぐぐる

When Hyper-V Replica fails to initialize ← MIRU.CH
スクリーンショット (108).png

これ認証系のエラーだなぁ。

もう開き直ってレプリカ側の名前を変えてやる!

スクリーンショット (109).png

で、こうじゃ!
スクリーンショット (110).png

あっ。

スクリーンショット (111).png

ああっ。

今更ながらにHyper-vの冗長化 (Hyper-Vレプリケーション 解決編) - Qiitaにつづく

今日の反省会場

よくよく考えればレプリカ受付のHTTPSは名前ベースの仮想ホスト(ApacheのVirtualHost的な)なんだから、そのベース名はシステムのFQDNしかないよな。ないですよね。ちくしょう。

参考


  1. カストルとポルックスは双子座のもととなったギリシャ神話の兄弟 

  2. 自己署名証明書のこと 

  3. ファイル名を開いて実行からcertlm.msc 

  4. 双方にインポートしておかないと双方向レプリケーションが使えないの。 

2
4
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
2
4