ニフクラ ブログ

ニフクラやクラウドの技術について、エンジニアが語るブログです。

ニフティクラウド探検隊 ニフティクラウドにサーバを持ち込んでみた。

こんにちは。
ニフティでインフラを守るお仕事をしている五月女です。
Photo_2
08/22に実施された機能追加で待望のコンソール接続機能が提供されました!ヽ(*´∀`)ノ
前々から「提供して欲しい!」と言い続けてきた機能なのでとても嬉しいです。

コンソール接続によって様々な事が実現可能になりました。
コンソール接続は、対象サーバのネットワーク設定状態に依存しないため、iptablesやsshといったサーバのネットワーク周りの設定に失敗してしまった場合も「設定を元に戻してサーバを救う」といった事が出来ます。
また、アクセス過多でssh経由のログイン出来なくなってしまったサーバをコンソールから状態を確認したり、前々回紹介した「カーネルアップデート」の様なサーバの根幹に関わる作業も、コンソール画面を確認しながら実施する事で、より確実に実施出来る様になりました。

こんなにも便利なコンソール接続機能ですが、今回はさらに便利な使い方として、コンソール接続機能を利用した「手元のサーバをニフティクラウドに持ち込む方法」を紹介します。

※内容は、2011年09月現在時点の情報です。

■ニフティクラウドに手元のサーバを持ち込みたい!

ニフティクラウドは「サーバが欲しい!」と思ってから約5分でサーバを提供してくれます。
しかし、当然の事ながら、提供されたサーバの環境構築は自分で実施しなければなりません。

一旦、ニフティクラウド上に環境構築してしまえば、後はコピー機能を使って同じ環境を無限に増やす事が可能ですが、どうしても最初の環境構築作業は外せません。
ワンライナーで構築出来るような簡単な環境なら良いのですが、複雑な作業が求められたり、大量の設定確認が必要な場合、環境構築は多くの作業時間を必要とします。

さらに、担当者が退社しており、構築手順書も無いサーバだったりする場合、ニフティクラウド上にもう一度同じ環境を構築する事は困難を極めるでしょう。
W_hand_up_01_g_bl 最近の電力事情やBCP対応で「社内にあるサーバをクラウドに移行しよう!」なんてプロジェクトを進めてる人で、頭を抱えてる人もいるのでは無いでしょうか。

自分自身、そんな事をしていた時「手元のサーバをそのままニフティクラウドに持ち込めたら楽なのになぁ」と思っていました。

そこで、そんな悩みを解消する「サーバのイメージ化」「ニフティクラウドへの持ち込み」について考えてみました。

■サーバ持ち込みに必要な要素の確認

ニフティクラウドが提供するコンソール機能とサーバのイメージ化について

ニフティクラウドが提供するコンソール機能は、ISOイメージのマウントとISOイメージからのサーバブート機能を備えています。
この機能を使い、ISOイメージとして手元のサーバを「バックアップ」し、コンソール接続を介してニフティクラウドへ「リストア」すれば、手元のサーバをニフティクラウドに持ち込む事が出来ます。

サーバをまるごとイメージとしてバックアップするツールは、有償・無償を含めて様々なツールが提供されていますが、今回は、サービスを提供中のサーバを電断せずにイメージ化する手段として、実績あるOSSプロダクトである「Mondo Rescue」を利用してみたいと思います。

持ち込むサーバについて
  • 今回、ニフティクラウドへ持ち込むサーバはVMware vSphere Hypervisor(ESXi4.1)上に作成したCentOS5.5な仮想マシンでやってみました。


Home_service_2

  • 持ち込むサーバ(仮想マシン)
    OSCentOS5.5(x86_64)
    CPU2CPU
    Mem4GB
    HDD40GB
    NIC1枚
  • ホスト
    HypervisorVMware vSphere Hypervisor(ESXi4.1)
    CPU*Core2Quad Q9550
    Mem16GB
    ストレージNFS接続

■サーバをイメージ化する

Mondo Rescueのセットアップ
(1)yumからインストールする方法

Mondo RescueはCentOS標準のパッケージでは提供されていませんが、サードパーティリポジトリを追加することで、yumを利用してインストールする事が出来ます。


  • パッケージの確認
    [root@localhost ~]# yum --enablerepo=rpmforge info mondo
    Loaded plugins: fastestmirror
    Loading mirror speeds from cached hostfile
    * base: mirror.yongbok.net
    * epel: ftp.iij.ad.jp
    * extras: mirrors.ta139.com
    * rpmforge: apt.sw.be
    * updates: mirror.yongbok.net
    Excluding Packages in global exclude list
    Finished
    Available Packages
    Name       : mondo
    Arch       : x86_64
    Version    : 2.2.9.4
    Release    : 1.el5.rf
    Size       : 1.2 M
    Repo       : rpmforge
    Summary    : Create system image for bare-metal disaster recovery from CD, DVD or tape
    URL        : http://www.mondorescue.org/
    License    : GPL
    Description: Mondo is a GPL disaster recovery solution to create backup media
    : (CD, DVD, tape, network images) that can be used to redeploy the
    : damaged system, as well as deploy similar or less similar systems.
    [root@localhost ~]#
    
  • パッケージのインストール
    [root@localhost ~]# yum --enablerepo=rpmforge install mondo
    Loaded plugins: fastestmirror
    Loading mirror speeds from cached hostfile
    * base: mirrors.ta139.com
    * epel: ftp.kddilabs.jp
    * extras: mirrors.ta139.com
    * rpmforge: fr2.rpmfind.net
    * updates: mirrors.ta139.com
    Excluding Packages in global exclude list
    Finished
    Setting up Install Process
    Resolving Dependencies
    --> Running transaction check
    ---> Package mondo.x86_64 0:2.2.9.4-1.el5.rf set to be updated
    --> Processing Dependency: mindi >= 2.0.7 for package: mondo
    --> Processing Dependency: cdrecord for package: mondo
    --> Processing Dependency: buffer for package: mondo
    --> Processing Dependency: afio for package: mondo
    --> Processing Dependency: mkisofs for package: mondo
    --> Running transaction check
    ---> Package afio.x86_64 0:2.5-2.el5.rf set to be updated
    ---> Package buffer.x86_64 0:1.19-2.el5.rf set to be updated
    ---> Package cdrecord.x86_64 9:2.01-10.7.el5 set to be updated
    ---> Package mindi.x86_64 0:2.0.7.5-1.el5.rf set to be updated
    --> Processing Dependency: mindi-busybox for package: mindi
    ---> Package mkisofs.x86_64 9:2.01-10.7.el5 set to be updated
    --> Running transaction check
    ---> Package mindi-busybox.x86_64 0:1.7.3-1.el5.rf set to be updated
    --> Finished Dependency Resolution
    Dependencies Resolved
    =================================================================================
    Package                               Arch                           Version                                  Repository                        Size
    =================================================================================
    Installing:
    mondo                                 x86_64                         2.2.9.4-1.el5.rf                         rpmforge                         1.2 M
    Installing for dependencies:
    afio                                  x86_64                         2.5-2.el5.rf                             rpmforge                          79 k
    buffer                                x86_64                         1.19-2.el5.rf                            rpmforge                          23 k
    cdrecord                              x86_64                         9:2.01-10.7.el5                          base                             594 k
    mindi                                 x86_64                         2.0.7.5-1.el5.rf                         rpmforge                         199 k
    mindi-busybox                         x86_64                         1.7.3-1.el5.rf                           rpmforge                         280 k
    mkisofs                               x86_64                         9:2.01-10.7.el5                          base                             608 k
    Transaction Summary
    =================================================================================
    Install       7 Package(s)
    Upgrade       0 Package(s)
    Total download size: 3.0 M
    Is this ok [y/N]:y ※yを押下
    Downloading Packages:
    ・
    ・
    省略
    ・
    ・
    Complete!
    [root@localhost ~]#
    

インストール完了

(2)RPMパッケージからインストールする方法
  • Mondo Rescueのインストールに必要なパッケージを準備
    [root@localhost ~]# yum install mkisofs cdrecord
    Loaded plugins: fastestmirror
    Loading mirror speeds from cached hostfile
    * base: mirror.yongbok.net
    * epel: ftp.iij.ad.jp
    * extras: mirrors.ta139.com
    * updates: mirror.yongbok.net
    Excluding Packages in global exclude list
    Finished
    Setting up Install Process
    Resolving Dependencies
    --> Running transaction check
    ---> Package cdrecord.x86_64 9:2.01-10.7.el5 set to be updated
    ---> Package mkisofs.x86_64 9:2.01-10.7.el5 set to be updated
    --> Finished Dependency Resolution
    Dependencies Resolved
    =================================================================================
    Package                            Arch                             Version                                     Repository                      Size
    =================================================================================
    Installing:
    cdrecord                           x86_64                           9:2.01-10.7.el5                             base                           594 k
    mkisofs                            x86_64                           9:2.01-10.7.el5                             base                           608 k
    Transaction Summary
    =================================================================================
    Install       2 Package(s)
    Upgrade       0 Package(s)
    Total download size: 1.2 M
    Is this ok [y/N]:y ※yを押下
    Downloading Packages:
    ・
    ・
    省略
    ・
    ・
    Complete!
    [root@localhost ~]#
    
  • Mondo Rescueのダウンロード
    Mondo Rescue公式サイトからパッケージをダウンロードします。
    FTPから最新のパッケージをダウンロードします。
[root@localhost ~]# wget ftp://ftp.mondorescue.org/rhel/5/x86_64/mondo-2.2.9.7-1.rhel5.x86_64.rpm
[root@localhost ~]# wget ftp://ftp.mondorescue.org/rhel/5/x86_64/afio-2.5-1.rhel5.x86_64.rpm
[root@localhost ~]# wget ftp://ftp.mondorescue.org/rhel/5/x86_64/buffer-1.19-4.rhel5.x86_64.rpm
[root@localhost ~]# wget ftp://ftp.mondorescue.org/rhel/5/x86_64/mindi-2.0.7.8-1.rhel5.x86_64.rpm
[root@localhost ~]# wget ftp://ftp.mondorescue.org/rhel/5/x86_64/mindi-busybox-1.7.3-1.rhel5.x86_64.rpm
  • ダウンロードしたファイルの確認
    [root@localhost ~]# ls
    .   afio-2.5-1.rhel5.x86_64.rpm     mindi-2.0.7.8-1.rhel5.x86_64.rpm        mondo-2.2.9.7-1.rhel5.x86_64.rpm
    ..  buffer-1.19-4.rhel5.x86_64.rpm  mindi-busybox-1.7.3-1.rhel5.x86_64.rpm
    [root@localhost ~]#
    
  • Mondo Rescueのインストール
    [root@localhost ~]# rpm -Uvh *.rpm
    警告: mindi-2.0.7.8-1.rhel5.x86_64.rpm: ヘッダ V4 DSA signature: NOKEY, key ID 37db9883
    準備中...                ########################################### [100%]
    1:mindi-busybox          ########################################### [ 20%]
    2:buffer                 ########################################### [ 40%]
    3:afio                   ########################################### [ 60%]
    4:mindi                  ########################################### [ 80%]
    5:mondo                  ########################################### [100%]
    [root@localhost ~]#
    

インストール完了

ディスク構成の確認
  • バックアップイメージ作成時に指定する必要があるのでメモしておいて下さい
    [root@localhost ~]# df -kh
    Filesystem          サイズ  使用  残り 使用% マウント位置
    /dev/sda3              27G  2.3G   23G   9% /
    /dev/sda1             494M   23M  446M   5% /boot
    tmpfs                 502M     0  502M   0% /dev/shm
    [root@localhost ~]#
    
  • ※上記の構成なら「/」配下をバックアップすれば良さそうですね。
バックアップイメージ作成

Mondo Rescueを利用したバックアップイメージの作成方法はいくつか方法がありますが、今回は対話式インターフェースを使います。

Mondo Rescueの対話インターフェース起動
  • 下記コマンドで対話インターフェースが起動します
[root@localhost ~]# mondoarchive

Mondo_rescue_archive01

バックアップイメージ作成先ディバイスの選択
  • 今回はローカルHDDの空き領域内にバックアップイメージを作成するので「Hard disk」を選択して「Enter」

Mondo_rescue_archive02

  • ※注意)十分な空き領域のあるディバイスを選択する事
バックアップイメージ作成先ディレクトリを設定
  • 適当に開いてそうな領域として「/mnt」を入力して「Enter」

Mondo_rescue_archive03

圧縮方法を選択
  • 「bzip2」を選択して「Enter」

Mondo_rescue_archive04

圧縮率の選択
  • 圧縮率が高ければバックアップイメージのサイズは小さくなりますが、イメージ作成・展開に時間がかかってしまいます。
    今回は「Average」を選択して「Enter」

Mondo_rescue_archive05

ISOファイルの最大サイズを設定
  • 標準の「4480」のまま「Enter」

Mondo_rescue_archive06

ISOファイルのファイル名先頭文字を設定
  • 標準の「mondorescue」のまま「Enter」

Mondo_rescue_archive07

対象のパスを設定
  • 事前に調べておいたディスク構成から、今回は「/」を入力して「Enter」

Mondo_rescue_archive08

対象外のパスを設定
  • 今回は「/mnt」配下にバックアップイメージを作成するので、バックアップ対象外にしたい「/mnt」と入力して「Enter」

Mondo_rescue_archive09

テンポラリ領域を設定
  • こちらも「/mnt」配下を利用したいので「/mnt/mondo.tmp」と入力して「Enter」

Mondo_rescue_archive10

スクラッチ領域を設定
  • こちらも「/mnt」配下を利用したいので「/mnt/mondo.scratch」と入力して「Enter」

Mondo_rescue_archive11

拡張属性のバックアップ可否を選択
  • このまま「Yes」を選択して「Enter」

Mondo_rescue_archive12

作業後の検証実施を実施するか選択
  • このまま「Yes」を選択して「Enter」

Mondo_rescue_archive13

対象OSのカーネルタイプを選択
  • 今回は対象OSがCentOSなので「Yes」を選択して「Enter」

Mondo_rescue_archive14

最終確認
  • バックアップイメージ作成を実行して良いか聞いてくるので「Yes」を選択して「Enter」

Mondo_rescue_archive15

  • ※注意)イメージ作成中はIdleが0%になることもしばしば起こります。サービス提供中のサーバに対して実行する場合は、システムは負荷が低い時間を見計らって実行すると良いと思います。


  • バックアップイメージ作成開始

Mondo_rescue_archive16

  • バックアップイメージ作成完了

Mondo_rescue_archive17

作成されたバックアップイメージの確認
  • それなりのサイズのISOファイルが作成されていればバックアップイメージ作成成功です。
    [root@localhost ~]# ls -lt /mnt
    合計 1287440
    drwxr-xr-x  4 root root       4096  9月 19 18:53 .
    -rw-r--r--  1 root root 1317023744  9月 19 18:39 mondorescue-1.iso
    drwxr-xr-x 25 root root       4096  9月 19 18:24 ..
    drwxr-xr-x  2 root root       4096  9月 19 15:29 cdrom
    drwxr-xr-x  2 root root       4096  9月 15 23:38 hgfs
    [root@localhost ~]#
    

■サーバをニフティクラウドに持ち込む

ニフティクラウドで受け入れ用サーバを作成する
  • ニフティクラウドのコントロールパネルにログインして、受け入れ用サーバを作成します。
    作業に失敗した際のリスクを最小限にするため、ここでは「CentOS 5.6 64bit Plain」で「mini(1vCPU 512MB)」を「従量課金」で作成します。

Niftycloud_restore01

受け入れ用サーバにバックアップイメージの展開
コンソール接続

Niftycloud_restore02

バックアップイメージのISOのマウント
  • コンソールメニューの「Devices」から「CD/DVDドライブ1」内の「Connect to Disk Image File(iso)..」を選択し、バックアップイメージのISOファイルを指定します

Niftycloud_restore03
Niftycloud_restore04

ISOから起動
  • コンソールメニューの「VMware Remote Console」から「Reset」を選択しサーバを再起動させます。
  • Niftycloud_restore05
  • 起動中にコンソール内で素早く「Esc」を押し「Boot Menu」を表示させ「CD-ROM Drive」を選択して「Enter」

Niftycloud_restore06

  • ※注意)複数回「Esc」を押すと「Boot Menu」が閉じてしまうので、素早く確実に一度だけ押す事
バックアップイメージ展開実行
  • Mondo Rescueのリストアメニューが表示されるので「nuke」と入力し「Enter」
  • Niftycloud_restore07_01
  • 途中経過
  • Niftycloud_restore08
  • 展開完了!
  • Niftycloud_restore09

  • コンソールメニューの「VMware Remote Console」から「Reset」を選択しサーバを再起動させます。
  • 動作確認
    カーネルで「準仮想化ドライバ」が読み込まれているか確認
    [root@localhost ~]# modprobe -l | grep vm
    
    Niftycloud_restore10
    ネットワークの確認
    • IPアドレスがDHCPによる自動取得になっているか確認
    [root@localhost ~]# vi /etc/sysconfig/network
    
    Niftycloud_restore11
    [root@localhost ~]# vi /etc/sysconfig/network-scripts/ifcfg-eth0
    
    Niftycloud_restore12
    [root@localhost ~]# vi /etc/sysconfig/network-scripts/ifcfg-eth1
    
    Niftycloud_restore13
    OS初期化スクリプト適用
    [root@localhost ~]#  wget http://cloud.nifty.com/doc/cloudinit_linux.tar.gz
    [root@localhost ~]#  tar vzxf cloudinit_linux.tar.gz
    [root@localhost ~]#  cp niftycloud_update /etc/rc.d/init.d/
    [root@localhost ~]#  cp niftycloud_init /etc/rc.d/init.d/
    [root@localhost ~]#  chmod 755 /etc/rc.d/init.d/niftycloud_*
    [root@localhost ~]#  ln -s /etc/rc.d/init.d/niftycloud_update /etc/rc3.d/S04niftycloud_update
    [root@localhost ~]#  ln -s /etc/rc.d/init.d/niftycloud_init /etc/rc3.d/S05niftycloud_init
    [root@localhost ~]#  date; shutdown -r now
    
    Niftycloud_restore14
    コントロールパネルで異常が出てないか確認
    • 特にエラーやワーニング等が出力されていなければ作業完了。
    • お疲れ様でした。

    ■まとめ

    無事、手元のサーバをまるごとニフティクラウドに持ち込む事が出来ました。

    今回は手元にあったvSphereHypervisor上の仮想マシンの持ち込みを紹介しましたが、もう一工夫すれば、XenServerやKVM、Hyper-vといった別のHyperviser上の仮想マシンの持ち込みや、物理サーバですらイメージ化によって持ち込む事が可能です。

    また、今回、サーバのイメージ化ツールとして利用したMondo rescueは、サーバを動作させたままイメージ化出来るのが魅力的なツールですが、他にもAcronisNorton Ghostといった商用ソフトやClonezillaといったOSSもサーバのイメージ化に使える大変便利なツールです。
    それぞれのツールに特徴があるので、環境によって使い分けるのが良いかと思います。

    実際のサーバ移行には、ここで触れなかった様々な問題が出るかもしれません。
    しかし、手元のサーバをそのままニフティクラウドに載せる事で環境構築で楽が出来るのは確実です!
    是非チャレンジしてみて下さい。

    ※本記事は全ての環境からのサーバ持ち込みを保証する物ではありません。
    また、サーバーにデフォルトで設置されているVMware toolsに変更が入った時点でサポートが対象外になりますので、ご了承の上、お試しください。

    => 「ニフティクラウド 禁止事項」