2013/07/26

Windows Server 2012 > Linux 仮想マシンでフェールオーバー TCP/IP (OK)

Windows Server 2012 Hyper-V から利用できるようになった Hyper-V レプリカは、ゲスト OS に関係なく仮想マシンのレプリケーションが可能です。ちょっと確認するだでなら、空の仮想マシンを使うと早いです。

Hyper-V レプリカには、別のサブネットでレプリカ仮想マシンを開始する際に、仮想マシンに設定されていた固定の IP アドレスをそのサブネットにあわせて上書きする、フェールオーバーの TCP/IP 機能を利用できます。この機能は KVP (Key Value Pair) データ交換サービスが利用できる Windows ゲストに限られていましたが、Linux ゲスト (の一部) でも利用可能になりました。

昨日は Hyper-V KVP Daemon (hv_kvp_daemon) に実装されたはずのフェールオーバー TCP/IP が期待どおりに動かなくて悩みましたが、本日、簡単に解決しました。Windows Server 2012 R2 Preview Hyper-V で試していたのがいけなかったようです。Windows Server 2012 Hyper-V でやってみたら、すんなりできました。


Windows Server 2012 R2 Preview ではなく、Windows Server 2012 Hyper-V の仮想マシンに SUSE Linux Enterprise Server (SLES) 11 SP3 をインストールしてみました。インストール完了後にすぐに気が付いたのは、SLES 11 SP2 の場合、Hyper-V マネージャーに IP アドレスが表示されなかったのに、SLES 11 SP3 はちゃんと表示されていること。(SLES 11 SP2 に更新プログラムをインストールすれば出るようになると思いますが、更新できない評価版のため確認していません)。

特別なことは考えずに、Windows ゲストの場合と同じように Hyper-V レプリカを設定して、フェールオーバー TCP/IP を構成しました。IP アドレスは固定 (192.168.10.91) で静的に割り当てしています。

レプリカ仮想マシンでフェールオーバー TCP/IP を構成し、フェールオーバー時に 192.168.20.91 に上書きするように構成します。テスト フェールオーバー用の仮想スイッチを割り当て、テスト フェールオーバーを実行してみました。

Hyper-V マネージャーで仮想マシンの「ネットワーク」タブを見ると、ちゃんと IP アドレスが上書きされているのがわかります。

ゲストの /var/log/messages を見ると、eth1 デバイスに対して hv_set_ifconfig が実行されたのが記録されています。また、/var/lib/hyperv のディレクトリに ifcfg-eth1 が作成されていました。この ifcfg-eth1 は hv_set_ifconfig の引数として渡されたもので、hv_set_ifconfig は OS の機能を使ってデバイスを構成し、/etc/sysconfig/network-scripts 下に ifcfg-eth1 や ifroute-eth1 を作成してました。このようにして、フェールオーバー TCP/IP の設定は揮発ではなく、システム設定として保存されるようになっています。


ここで疑問。NetworkManager で構成されている Linux の場合はどうなるのでしょうか? hv_set_ifconfig スクリプトの内容を見る限り、対応できないような気がします。Windows Azure 仮想マシン用の Linux ゲストを準備する場合、NetworkManager は NG というのは、このあたりが関係しているのかもしれません。

Prepare a Linux Virtual Machine for Azure
" The Windows Azure Linux Agent (Waagent) is not compatible with NetworkManager"

SLES 11 SP3 以外でも、hv_set_ifconfig が実装されたバージョンの hv_kvp_daemon が利用できる場合は、たぶん Windows Server 2012 Hyper-V  で Hyper-V レプリカのフェールオーバー TCP/IP が使えると思います。strings /usr/sbin/hv_kvp_daemon (または該当するバイナリ) | grep hv_set_ifconfig を実行して、文字列が見つかれば実装済みだと思います。SLES 11 SP2 は更新プログラムで既に対応しているはずです。CentOS 6.4 で確認したところ、KVP デーモンが既定でインストールされていなかったため、手動で追加したところ、hv_set_ifconfig 実装済みバージョンでした。


また、hv_set_ifconfig 実装済みの hv_kvp_daemon が動いている場合、Hyper-V マネージャーの「ネットワーク」タブにゲストの IPv4 および IPv6 アドレスが表示されるみたいです。

・・・

Windows Server 2012 R2 Preview Hyper-V ではと言うと、Hyper-V マネージャーは SLES 11 SP3 仮想マシンの IPv4/IPv6 アドレスを表示してくれません。Linux 統合サービスが Windows Server 2012 Hyper-V に追いついてきたと思ったら、Windows Server 2012 R2 Preview Hyper-V でまた先に行かれてしまったという感じです。

・・・

Linux 仮想マシンの Hyper-V レプリカ対応 (フェールオーバー TCP/IP のサポート) のように、Hyper-V における Linux 対応は知らぬ間にどんどん進んでいます。オープンソースならではです。一方で、対応しているのか否か、いつ対応したのか、どう使うのかといった情報が乏しいのが残念なところ。

ところで、Linux 仮想マシンは、System Center Virtual Machine Manager のサービス展開機能を利用したイメージ展開 (ゲスト OS のホスト名と IP アドレスの自動設定) も可能になっています。こちらは、たぶん System Center 2012 SP1 からの対応です。

System Center 2012 SP1 > テンプレートからの Linux 仮想マシンの自動展開

1 件のコメント:

山市 良 さんのコメント...

Windows Server 2012 R2 Hyper-V環境でも、SLES 11 SP3のMicrosoft Hyper-V toolsを更新すれば、フェールオーバーのTCP/IP動きます。

Windows Server 2012 > Linux 仮想マシンでフェールオーバー TCP/IP (OK)
http://yamanxworld.blogspot.jp/2013/07/windows-server-2012-linux-tcpip-ok.html