Tech Sketch Bucket of Technical Chips by TIS Inc.

物理サーバ上のOSをWakame-vdcに移行してみた。

Pocket

運用の効率化やコスト削減のために、システムをクラウドに移行する事例が多くなっている。その際には、既存のオンプレミス環境の物理サーバ上のシステムを併せてクラウドに移行する必要が発生する。完全再構築を行う場合、構築作業やテストの負荷が大きくなるため、物理サーバを最小限の変更で移行が行えるP2V(Physical to Virtual)移行が実施されることも多い。

さらに運用の効率化を図るには、クラウドオーケストレーションツールの利用が必要となる、クラウドオーケストレーションツールで運用可能な状態とするには、物理サーバのOSをクラウドイメージに変換することが必須となる。

昨年の2015年6月にはOpen Standard Cloud Association (OSCA)の活動として OSCA™ 技術分科会ホワイトペーパー「物理マシンから Redhat OpenStack & KVM 上への移行検証」を公開している。本WPは物理サーバからOpenStackのGranceで利用可能なCloud imageへの移行(Physical to Virtua to Cloud image/P2V2C)を行う手順をまとめた。

今回はクラウドオーケストレーションツールとして、あくしゅ社が開発を行ったWakame-vdcを利用した環境上に物理サーバからの移行を行うP2V2W(Physical to Virtua to Wakame image)の検証を行ってみたい。

物理サーバのHDDイメージの取得

物理サーバ上のOSイメージはHDD上のデータをddコマンドで直接RAW形式に抽出する方式を取る。手順の概要は以下となる。

  1. 移行対象元の物理サーバをシャットダウンする。
  2. KnoppixのLive CDでKnoppixを起動する。
  3. HDDイメージを格納する外部ストレージ(NASやUSB HDD等)をマウントする。
  4. ddコマンドでHDDイメージを外部ストレージに書き出す。

本作業の詳細やTIPSは、前述のOSCA™ 技術分科会ホワイトペーパー「別紙1:物理マシンから仮想マシンへの移行ガイド」に記載されているので、こちらもあわせて参考にして頂きたい。

Wakame-vdc+KVM環境の構築手順

Wakame-vdcとOpenVNetを利用し、KVM環境の仮想マシン運用を行える環境の構築を行う手順は、本サイト上のWakame-vdcとOpenVNetでKVM仮想マシンの運用環境を構築してみたとして手順を公開している。構築時のご参考として頂きたい。

Wakame-vdc imageの特長

Wakame-vdcは生成する仮想マシンのネットワーク情報(ホスト名、IPアドレス、デフォルトゲートウェ)、認証情報(管理者権限ユーザ(root/Administrator)のパスワード情報、認証鍵)の設定をOSの初回起動時に実施する。そのホスト名、情報を記述した設定ファイルは/var/lib/wakame-vdc/instances/[インスタンス名]以下に仮想マシンのHDDイメージファイルとともに生成される。
仮想マシンの初回起動時には、その設定ファイルを読み込み、OS内に反映する為にwakame-init (AWSのAMIやOpenStack Cloud imageのcloud-initのようなもの)スクリプトを実行する必要がある。
物理サーバから作成したHDDのRAW形式のイメージファイルをWakame-vdcイメージとして利用するためには、一旦、通常のKVMの仮想マシンとして起動し、wakame-initの組み込みを実施する必要が発生する。その手順は以下となる。

Linux(CentOS 7.2 x86_64)のWakame-vdcイメージへのカスタマイズ

LinuxイメージからのKVM仮想マシンの起動

◆仮想マシンマネージャを利用する方法

1.仮想マシンマネージャを起動し、新しい仮想マシンの作成をクリックする。

wakame-vdc

2.新しい仮想マシンを作成で「名前」を入力しと「◎既存のディスクイメージをインポート」にチェックを入れて進むをクリックする。

wakame-vdc

3.ストレージパスにlinuxサーバのHDDイメージファイルを、OSの種類とバージョンに「Linux/Red Hat Enterprise Linux 7 or late」を指定する。

wakame-vdc

4.CPUとメモリの割り当てを指定する。

wakame-vdc

5.インストールの前に設定をカスタマイズするをチェックし完了をクリックする。
※仮想ネットワークにはkvmのvirbr0を利用するため、仮想ネットワークが停止している場合は、本画面で自動起動をするか、$sudo virsh net-start defaultで起動してから、仮想マシンマネージャを起動するようにする。

wakame-vdc

6.仮想マシンの詳細設定画面で、Disk 1のAdvanced optionのDisk busにIDE、Strage formatにrawを設定し、適用→インストールの開始をクリックする。

wakame-vdc

7.仮想マシンマネージャのコンソールでOSの起動を確認する。

wakame-vdc

◆コマンドラインから起動する方法

上記と同一の仮想マシンをコマンドラインから起動する場合、以下のコマンドを実行することとなる。省略可能なパラメータも存在し、コマンドの簡易化は可能かもしれないが、仮想マシンマネージャのGUIを利用する方が容易だと考えられる。

LinuxのWakame-vdc imageへのカスタマイズ

1.ベースOS側でarpコマンドを実行し、仮想マシンのIPを確認する。
仮想マシンには192.168.122.0/24のレンジでIPが付与されるため、arpコマンドでは、仮想マシンに付与したMACアドレスが表示されるため、arpの情報で仮想マシンのIPが特定できる。
$ arp

2.仮想マシンにSSHでログインする。
$ ssh 192.168.122.115 -l maintainer

3.Wakame-vdcの公式リポジトリからrhel6用のwakame-initをダウンロードする。

4.wakame-initをCentOS 7用にカスタマイズする
主なカスタマイズのポイントは以下となる。

  • ifconfigが標準インストールされていないため ip/nmcliコマンドへの置き換えを実施する。
  • Wakame-vdc+OpenVNetで仮想マシンに付与したNICを認識するトリガが DHCPリクエストであるため、いったんNICをDHCPからIP取得の設定で起動させ、その後に固定IPを設定する。

$ sudo vi /etc/wakame-init

5.wakame-initの自動起動の処理を追加する。
$ sudo chmod 755 /etc/rc.d/rc.local
$ sudo vi /etc/rc.d/rc.local

6.ループバック(lo)インターフェース以外のネットワークインターフェースの設定ファイルを削除する。
$ cd /etc/sysconfig/network-scripts

$ sudo rm -i ifcfg-eXXXX
XXXX : eth0~9 / ens0~9 / eno999999999 など

7.hostnameをlocalhost.localdomaiに変更する。
$ sudo vi /etc/hostname

8./etc/hostsから既存hostのIP等の不要行を削除する。
$ sudo vi /etc/hosts

9.rootのホームディレクトリから不要ファイルを削除しておく。

  • /root/.ssh以下のファイルは削除しておいた方がよい。

10./etc/ssh/sshd_configを編集し、以下の設定を変更する。

  • rootのリモートからのログインを許可する。
  • 鍵認証によるsshログインを許可する。
  • パスワード認証を不許可にする。
    • 本検証では不具合時の調査対応のため、無効化はしていない。
    • 確実に動くまでは、sudo権限を持つユーザも作成しておいた方がよい。

$ sudo vi /etc/ssh/sshd_config

11.シリアルコンソール接続を有効にする。
CentOS 7.2は標準で有効となっているが、設定されていない場合は以下の手順となる。
$ sudo vi /etc/default/grub

$ sudo grub2-mkconfig -o /boot/grub2/grub.cfg
$ sudo vi /etc/securetty

12.汎用テンプレートにする場合の追加対応

  • コマンドの履歴やログなども初期化(0byteのファイル)にしておく。対象は以下が考えられる。
    • /var/log以下
    • /tmp以下
    • .bash_history

13.仮想マシンをshutdownする
$ sudo shutdown -h now

Linux Wakame-vdc imageのWakame-vdcへの登録

1.HDDのRAW形式のイメージファイルをtarファイルに格納する。
$ sudo tar zcvf /var/lib/wakame-vdc/images/centos-7-p2v2w.raw.tgz ./linux.raw

2.tarファイルのサイズとmd5sumを算出する。
$ sudo ls -l /var/lib/wakame-vdc/images/centos-7-p2v2w.raw.tgz

$ sudo md5sum /var/lib/wakame-vdc/images/centos-7-p2v2w.raw.tgz

3.のWakame-vic image登録用スクリプトを作成する。
$ vi ./install_centos7_wakame.sh

4 Wakame-vdc image登録スクリプトを実行する。
$ ./install_centos7_wakame.sh

5.登録結果をWakame-vdcのWeb画面のimagesの情報で確認する。

wakame-vdc

Linux 仮想マシンの作成

Wakame-vdcの管理画面上で以下の操作を行う。

1.Machine imagesの画面でCentOS 7の仮想マシンイメージを選択し、Launch Instanceをクリックする。

wakame-vdc

2.割り当てるリソース量、使用するネットワークを選択してLaunchをクリックする。

wakame-vdc

3.instancesの画面で仮想マシンの起動を確認する。
仮想マシンイメージのファイルが大きいため、解凍に時間がかかるので数分待ってから確認する。

wakame-vdc

4.instancesの画面上での起動を確認したら、VNCでOSのコンソールに接続し、正常に起動していることを確認する。

wakame-vdc

5.リモート端末からSSHコマンドで仮想マシンに接続する。
ログインに成功し、IPアドレスが付与されていれば、構築成功となる。


Windows server 2012のWakame-vdcイメージへのカスタマイズ

WindowsイメージからのKVM仮想マシンの起動

◆仮想マシンマネージャを利用する方法

1.仮想マシンマネージャを起動し、新しい仮想マシンの作成をクリックする。

wakame-vdc

2.新しい仮想マシンを作成で「名前」を入力しと「◎既存のディスクイメージをインポート」にチェックを入れて進むをクリックする。

wakame-vdc

3.ストレージパスにlinuxサーバのHDDイメージファイルを、OSの種類とバージョンに「Windows/Microsoft Windows Server 2008 or late」を指定する。

wakame-vdc

4.CPUとメモリの割り当てを指定する。
Windows serverなので可能な限り多くメモリを割り当てることを推奨する。

wakame-vdc

5.インストールの前に設定をカスタマイズするをチェックし完了をクリックする。
※仮想ネットワークにはkvmのvirbr0を利用するため、仮想ネットワークが停止している場合は、本画面で自動起動をするか、$sudo virsh net-start defaultで起動してから、仮想マシンマネージャを起動するようにする。

wakame-vdc

6.仮想マシンの詳細設定画面で、Disk 1のAdvanced optionのDisk busにIDE、Strage formatにrawを設定し、適用→インストールの開始をクリックする。

wakame-vdc

7.仮想マシンマネージャのコンソールでOSの起動を確認する。

wakame-vdc

◆コマンドラインから起動する方法

WindowsのWakame-vdc imageへのカスタマイズ

1.ベースOS側でarpコマンドを実行し、仮想マシンのIPを確認する。
仮想マシンには192.168.122.0/24のレンジでIPが付与されるため、arpコマンドでは、仮想マシンに付与したMACアドレスが表示されるため、arpの情報で仮想マシンのIPが特定できる。
$ arp

2.仮想マシンに仮想マシンマネージャのコンソールからログインする。

wakame-vdc

3.PoweShellを管理者権限で移動し、以下のコマンドでWindows用のwakame-initのスクリプト群をダウンロードする。

4.各スクリプトを編集する。
4-1.SetupComplete-firstboot.cmd

  • 初回OS起動時に実行されるコマンド、初回起動用のPower Shellのスクリプトの呼び出しを行う。
  • 2回目以降の通常起動時に起動しないように、"Wakame Init"をの登録をトリガーに起動を抑止する処理を追加している。

4-2.wakame-init-every-boot.cmd

  • 2回目以降の通常起動時に実行されるコマンド。通常起動用のPower Shellのスクリプトの呼び出しを行う。
  • カスタマイズは行っていない。

4-3.wakame-init-first-boot.ps1

  • 初回起動時のOS内の設定を行うPower shellスクリプト。
  • 一旦、ネットワークをDHCPの状態で起動させるために、初回起動時の固定IPの設定処理をコメントアウトしている。
  • さらに、Zabbixの設定処理と、Administratorのパスワード変更もコメントアウトしている。
  • 設定処理後にOSをShutdownしていた部分をRebootに変更している。

4-4.wakame-init-every-boot.ps1

  • 2回目以降の通常起動時のOS内の設定を行うPower shellスクリプト。
  • カスタマイズは、Zabbixの設定および、初回起動時に本スクリプトが呼び出された場合のAdministratorのパスワード変更とShutdownの処理をコメントアウトしている。

4-5.wakame-functions.ps1

  • 初回起動時、通常起動時に共通で使用されるPower shellスクリプト。
  • ホスト名変更、固定IP付与、Administratorパスワード変更等は本スクリプト内で行っている。
  • カスタマイズは行っていない。

5.PowerShellを管理者権限で起動し、"Wakame Init First"のOS起動時の自動実行のタスクを登録する。

6.コントロールパネル→システムのプロパティの画面で、コンピュータ名とワークグループに初期値を設定する。

wakame-vdc

  • 再起動を要求されるが、後で再起動をするを選択する。

wakame-vdc

7.汎用テンプレートにする場合の追加対応

  • 不要なアプリメーションをアンインストールする。
  • さらに不要なユーザやファイルや情報を削除する。考えられる対象は以下となる。
    • Windowsログファイル
    • イベントログ
    • ブラウザキャッシュ  * Proxy設定
    • 不要アカウント
    • 個人フォルダ内の不要データ
    • 保存されているパスワード情報

8.管理者権限でPower shellを起動し、shutdownコマンドを実行する。

Windows Wakame-vdc imageのWakame-vdcへの登録

1.HDDのRAW形式のイメージファイルをtarファイルに格納する。
$ sudo tar zcvf /var/lib/wakame-vdc/images/windows-2012-p2v2w.raw.tgz ./win2012.raw

2.tarファイルのサイズとmd5sumを算出する。
$ ls -l /var/lib/wakame-vdc/images/windows-2012-p2v2w.raw.tgz

$ sudo md5sum /var/lib/wakame-vdc/images/windows-2012-p2v2w.raw.tgz

3.のWakame-vic image登録用スクリプトを作成する。
$ vi ./install_windows_wakame.sh

4 Wakame-vdc image登録スクリプトを実行する。
$ ./install_windows_wakame.sh

5.登録結果をWakame-vdcのWeb画面のimagesの情報で確認する。

wakame-vdc

Windows 仮想マシンの作成

Wakame-vdcの管理画面上で以下の操作を行う。

1.Windows Server 2012の仮想マシンイメージを選択し、Launch Instanceをクリックする。

wakame-vdc

2.割り当てるリソース量、使用するネットワークを選択してLaunchをクリックする。

wakame-vdc

3.instancesの画面で仮想マシンの起動を確認する。
仮想マシンイメージのファイルが大きいため、解凍に時間がかかるので数分待ってから確認する。

wakame-vdc

4.instancesの画面上での起動を確認したら、VNCでOSのコンソールに接続し、正常に起動していることを確認する。

wakame-vdc

5.リモート端末からリモートデスクトップで仮想マシンに接続する。
ログインに成功し、デスクトップが利用できれば、接続成功となる。

wakame-vdc


接続できない場合の対処方法

仮想マシンが起動し、コンソールに接続してNICにIPが付与されている状態にもかかわらず、通信が行えない場合は以下のコマンドを実行し、状況の確認を行う。

1.以下のコマンドを実行し、openvswitchに仮想NICが登録されていることを確認する。
$ ovs-ofctl show br0

仮想NICのインターフェース名のレコードが存在することを確認する。
存在しない場合、openvswitchとopenvnetのサービスを再起動し、1.のコマンドを再実行する。

2.openvswitchのFlowテーブルに暫定のFlowを追加する。
in_port / out_port のポート番号は1.のコマンドで取得したポート番号を設定する。

コマンド実行後に接続が可能となった場合、Wakame-vdc→OpenVNetへの連携に失敗している可能性が高い。
サービスが正常に起動しているか、Wakame-vdc→OpenVNetへの連携処理が行われいるかをログ等で確認することが必要となる。

検証結果

1.物理サーバからWakame-vdcへの移行
今回はハードディスクが1台だけのシンプルな構成だったこともあり、仮想マシンとして起動させるだけであれば、特別に大きな問題は発生しなかった。ただ、Wakame-vdc→OpenVNetへの連携を行うためにWakame-initをカスタマイズする部分に若干苦戦した。新規の仮想マシンを起動させる場合、仮想マシンのNICをIPをDHCP取得で起動させる処理を必ず実施する必要があるのが大きな注意点である。

2.通信ができない場合の対処方法
実際に通信ができない問題が発生している場合、Wakame-vdc、OpenVNet、openvswitchのどこで問題がおきているのかを切り分ける必要があるが、各製品のインターフェースや構造を理解するとともに、設定や処理状況をを参照するコマンドを駆使する必要がある。Wakame-vdc + OpenVNetの環境を運用する上で必要なTIPSとなるため、次回は通信障害を中心に調査と対応方法について解説を行いたい。

エンジニア採用中!私たちと一緒に働いてみませんか?