2012年12月16日日曜日

私が田胡研サーバを仮想化したわけ : |┃

みんなー!! 文化して (ry

こんにちわ,何故か2度目の登場 sakura です.
田胡研アドベントカレンダーも 16日目 となりました.

本来であれば,2度目は田胡研ファイル鯖のファイルシステムについて書こうかなーと思っていたのですが,前回の記事が長くなってしまったので,前回 (7日目:私が田胡研サーバを仮想化したわけ:序) の続きを書いていきます.

もう一度前回の記事を読んでもらえればわかると思いますが,前回 「バックアップの簡略化」 について書いていないので,今回はそれに関係する事を主に書いていきます,


必要なバックアップとは


みなさんは PC のバックアップはどのようにしていますか?
Dropbox にファイルを突っ込む? バックアップの時だけ HDD を接続してバックアップ?
それとも,そもそも RAID[1-5] 構成のファイル鯖にデータを保存してあるから心配ない?

色々と方法はあると思います.
自分自身のデータなので,重要度に応じて好きにするのが正解だと思います.


しかし,サーバとなるとどうでしょう?
普通の PC もそうですが,サーバというものも数々のソフトウェア (プログラム) の組み合わせで成り立っています.

そのため,例えばウェブサーバ (Apache) の場合,コンテンツだけを保存していてもコンフィグを保存していなかったら障害が発生時に発生前と同じ動作をさせる事は出来ません.(静的ページ only なら動きますが・・・)

そんな事は当然です.

ましてや,昨今の Web において Apache 単体で運用されてるページの方が少ないでしょう.
単純に動いていると思われがちな httpd のバックグラウンドには,PHP があったり,Servlet があったり,CGI があるのが当然となっています.

そんなサーバのバックアップに最適な方法は何でしょうか.

各コンフィグを cron で rsync する? 各コンフィグを NFS 上のシンボリックリンクにする?

まぁ,強いて言うなら私は rsync が妥当な選択肢だと思います.
( 規模によりますが・・・ )

しかし,前回の記事に書いたこんな事が起きたら・・・?

しかし,物理ノードが停止した場合はどうすればいいのでしょうか?電源やメモリが壊れたなら交換すれば良い話です.では,OS のインストールストレージ (HDD or SSD) が壊れたら・・・・?

上記の方法では,インストールストレージが壊れた場合,どのみち OS を再インストールする必要があります. (RAID1とかで多重化してる場合は除いて)

では,サービスを運用しているサーバで1分でも早くサービスを復旧させなければならない時に OS をインストールしている時間があるでしょうか?

ないですよね.
( ふぇぇ・・・ 早く復旧しないと文句言われちゃうよぉ・・・・ 状態の場合 )

ちっちゃなサービスなら少しくらい止まってても問題ないかもしれませんが,早く復旧出来るに越したことはないはずです.

さらに,何らかの障害が発生する度に OS を入れ直し,同じ環境になるようにセットアップし直すなんて面倒くさがりの私にはたまらなく嫌な事なのです.


そういった点を考えると,最も楽なバックアップは "OSごとバックアップしてしまえ!" という結論に至ります.
え? そんな結論に至らない? けど,少なくとも私はそういう結論に至りました.

その際に仮想化は最も実用的かつ,手軽だったのです.


仮想マシンのバックアップ


前回の記事にステマじみた仮想化のメリットを色々と書きましたが,要するに "本当に 私が田胡研サーバを仮想化したわけ" は これ です.

では,仮想マシンのバックアップはどのように行うのか.

まず,サーバのバックアップを取るに当たって,最低限必要な条件が一つあります.

それは 「サービスを止める事なくバックアップが取れる事」 です.
これは簡単そうに聞こえますが,"OSを丸ごとバックアップする" というバックアップ方法で考えるとすごく厄介な条件です.

通常,仮想マシンをコピーする際には "仮想マシン設定ファイル" ・ "仮想ディスクファイル" の2つをコピーします.
しかし,それらのデータは仮想マシンが動作している最中にコピーすると整合性が取れなくなる可能性がある為,コピーできないように設定されているのです.




では,仮想マシンを起動したままバックアップを取るにはどうすればいいのでしょうか.

これを実現する技術に 「スナップショット」 があります.

スナップショットとは


仮想マシンにおけるスナップショットとは,ある時点での仮想マシンの状態 ・ 仮想ディスクの状態を保存する機能です.
ESXi の場合 VMware Tools をインストールしておけば,スナップショットを実行した時点でのファイルシステムの状態を完全に記憶・復元する事が可能です.

このスナップショットを用いる事で,下記の図のようにファイル鯖に仮想マシンを丸ごとバックアップする事が可能となります.




バックアップ手順


バックアップを取る手順としては,次のような手順となります.

  1. バックアップしたい仮想マシンのスナップショットを取る
  2. スナップショットのデータをファイル鯖のデータ領域にコピーする
  3. スナップショットのデータを削除する
  4. バックアップしたい仮想マシンの数だけ 1~3 を繰り返す

これらの手順を手動でやるのはアホらしいので,VMware のフォーラムで公開されているスクリプトを使用し,手順を自動化します.
ghettoVCB : https://github.com/lamw/ghettoVCB
上記の Github から tar.gz をダウンロードすると,バックアップスクリプトなどが同梱されています.

それを ESXi ノードに転送し,バックアップの設定ファイルである " ghettoVCB.conf " を下記のように編集します.

VM_BACKUP_VOLUME=/vmfs/volumes/Backup/VM_Backup  # バックアップ先
DISK_BACKUP_FORMAT=thin
VM_BACKUP_ROTATION_COUNT=10                      # バックアップの世代数
(以下デフォルト)

編集後,バックアップをしたい仮想マシンの一覧を "backup.txt" などのファイル名のファイルに書き出します.

# echo "t-lab_web" >> backup.txt
# echo "t-lab_IRC" >> backup.txt
# echo "t-lab_DNS" >> backup.txt

ここまでで基本的な準備は全て終わりです.
あとは,下記のようにスクリプトを実行する事でバックアップが開始されます.

# cd [ghettoVCBのディレクトリ]

# ./ghettoVCB.sh -f ./backup.txt -g ./ghettoVCB.conf

しばらくするとバックアップが終了するので,実際にバックアップが作成されているか確認します.

# ls /vmfs/volumes/Backup/VM_Backup
t-lab_web     t-lab_IRC     t-lab_DNS

はい,簡単にバックアップが取れましたね!


実際の田胡研サーバでは


実際の田胡研サーバのバックアップでは,上記のバックアップを一週間に二回,自動的に実行されるようにしています.

これによって何か障害が起きた場合,一番近い日付のバックアップから仮想マシンを丸ごと復元する事が可能となっています.

これらの事から,序で書いた
「面倒くさがりでヘナチョコなお前が管理しやすいのは分かったけど,サーバの稼働率とかどこが増えてんだよ!逆に ESXi 動かしてる物理ノードが死んだら多くのサービスが死ぬだろうが!」
と言った "ESXi ノードが破損する" という状況に陥った場合,別の ESXi にバックアップから復元した仮想マシンのデータをインポートする事で,ほぼ同じ状態でサービスが再開できるようになっているわけです.
( もちろん,障害発生時用の ESXi ノードも存在します )


終わりに


最後に

「バックアップ先の田胡研ファイル鯖が死んだらどうすんの?」

って思う人もいると思います. 私もそう思います.

それについては,本当は今回のアドベントカレンダーで書くつもりだったのですが,
簡単に言うと "ファイル鯖だけど RAID6 だから関係ないよねっ" って感じです.

田胡研のファイル鯖は RAID6 で冗長化し,さらにその中で特に重要な一部のデータは別の筐体のストレージへレプリケーションされている為,簡単な RAID6+1 状態になっています.

さらに,RAID6 の RAIDアレイ の一部ストレージが破損すると管理者に通知が送られ,なるべく早くストレージの入れ替え ・ リビルドが行えるようになっています.

また,ファイル鯖が破損した場合,別の筐体に RAID6 をインポートする事が可能となっています.

上記に書いた "関係ないよねっ" は言い過ぎかもしれませんが,研究室内の環境にしてはすごく冗長化されている方だと思うので,「まぁ,このくらいしとけば大丈夫やろ」 と言うのが本音です.

まぁ,そんな感じ☆ミ  ウフフ☆おっけー♪


なんだか長くなってしまったなー.
なんかアドベントカレンダーっぽくはないかもしれないけど,どんな改修をしたのかを改めて整理できたので,わたし的には良かったです.

この記事をきっかけにあなたも自宅鯖を仮想化してみてはいかがでしょうか!


以上!

また,この記事の内容について何か気になる点や意見などがあれば sakura まで気軽にどうぞ.

1 件のコメント:

  1. Mohon ijin berpromosi. service Ac segala jenis merk. kami service Ac mencakup wilayah coverage seluruh Surabaya, Gresik, Sidoarjo. kami juga menerima jasa service perbaikan AC bongkar dan pasang AC. pekerjaan kami cepat, tepat, profesional, harga kompetitif di banding harga jasa luaran.
    service ac split sidoarjo
    tukang service ac sidoarjo
    service ac surabaya sidoarjo
    service ac surabaya selatan
    service ac surabaya timur
    service ac surabaya barat
    service ac surabaya utara
    service ac kota surabaya

    SPLIT-TYPE AIR CONDITIONERS
    MULTI-SPLIT AIR CONDITIONERS
    CHILLED WATER FAN COIL UNITS
    VRF AIR CONDITIONERS
    CHILLERS
    WINDOW-TYPE AIR CONDITIONERS

    http://jualjasaacsurabaya.blogspot.com
    Segera hubungi kami, dan kami akan datang kerumah Anda 24 Jam Non Stop.
    (Hari Sabtu / Minggu / Hari Libur buka)
    PIN BBM : 54BE0B4B / 5474CD93 / TELP : 085645475574

    返信削除