ghettoVCB が動作せず、バックアップできない問題
今、VMware ESXi を使って仮想サーバをいくつか動作させています。
ghettoVCBと言うスクリプトを使ってVM稼動中のバックアップを行っているのですが、
先日新しく構築した VMwareESXiのホストで スクリプトが上手く動作しなかったので、
その経緯や、修正方法などを備忘。
この記事をもとにスクリプトの修正をされる方は自己責任でお願い致します。
前提条件
ghettoVCBのバージョン
ESXi5.0にも対応した最新版
Created Date: 11/17/2008のもの。
動作しなかったESXiのバージョン
4.1.0 721871
動作していたESXiのバージョン
4.1.0 260247 / 4.1.0 348481
現象内容
以前から使用していたスクリプトを、そのまま新しいVMwareESXiホストにコピーして使おうとする。
が、動作しない。
ghettoVCBが実行されると、対象仮想マシンのスナップショットが作成されます
そしてスナップショットが作成されてからの仮想ディスクへの変更は本来のファイルには書き込まれず、
スナップショットファイルに書き込まれていきます。
そのおかげで本体の仮想ディスクファイルをコピーすることが可能となります。
仮想ディスクファイルのコピーが始まり、完了するとスナップショットを削除する処理が実行されます。
今回動作しなかったのは このスナップショットを削除する処理でした。
結果として スナップショットを削除する処理が延々と実行されている状況のまま止まってしまい、
次の仮想マシンバックアップに移らず、全体のバックアップ処理も終わらないという状態に陥っていました。
修正内容
ghettoVCBの削除処理が終わらないといった話題が VMwareのコミュニティに投稿されていたため、
読んでみるとスナップショットを削除するコマンドが変わったので動作しないというような書き込みがされていました。
(英語なんで意味合いが合っているかどうか、自信は無いです)
ghettoVCB.sh hangs when trying to remove the sn... |VMware Communities
vmsvc/snapshot.remove で良かったものが、4.1.0 721871 では動作せず。
vmsvc/snapshot.removeall に修正したところ、動作するようになりました。
以前からスクリプトを使用していた 4.1.0 260247 / 4.1.0 348481 といったバージョンでは問題なく動作していたのですが、
コマンドの仕様変更があったと言う事なんでしょうかね。
修正前
if ${SNAP_SUCCESS} -eq 1 && [[ ! ${POWER_VM_DOWN_BEFORE_BACKUP}
${VMWARE_CMD} vmsvc/snapshot.remove ${VM_ID} > /dev/null 2>&1
#do not continue until all snapshots have been committed
logger "info" "Removing snapshot from ${VM_NAME} ..."
while ls "${VMX_DIR}" | grep -q "\-delta\.vmdk";
do
sleep 5
done
fi
修正後
if ${SNAP_SUCCESS} -eq 1 && [[ ! ${POWER_VM_DOWN_BEFORE_BACKUP}
${VMWARE_CMD} vmsvc/snapshot.removeall ${VM_ID} > /dev/null 2>&1
#do not continue until all snapshots have been committed
logger "info" "Removing snapshot from ${VM_NAME} ..."
while ls "${VMX_DIR}" | grep -q "\-delta\.vmdk";
do
sleep 5
done
fi
IDCF NOAH クラウドストレージはどうなの。
IDCFのサービスにストレージサービスが追加されたので比較検討。
やっぱり比較対象はAmazon S3。
ドルから円への換算はグーグル先生に頼みました。
2012年9月14日時点での価格を参照して比較。
参照元URL
Amazon S3 東京リージョンのストレージを選択
Amazon S3(拡張性と耐久性を兼ね揃えたクラウドストレージ)|AWS
IDCF NOAH
クラウドサービスならIDCFクラウド -使いやすく、パワフル
ストレージ利用料
IDCF NOAH: 10.0 円/GB
Amazon S3: 10.06円/GB
ストレージ従量課金
ネットワーク転送量(Out)
IDCF NOAH: 15.75 円/GB
Amazon S3: 15.5 円/GB(最初の1GB無料/10TBまでこの料金)
Mobageを支える技術を読み終わりました。
Mobageを支える技術を読み終わったので、
その感想と、自分の仕事に役立ちそうな事をちょっと調べてみることにする。
Mobageを支える技術 ~ソーシャルゲームの舞台裏~ (WEB+DB PRESS plus)
- 作者: DeNA
- 出版社/メーカー: 技術評論社
- 発売日: 2012/06/13
- メディア: 単行本(ソフトカバー)
- 購入: 31人 クリック: 737回
- この商品を含むブログを見る
MyDNSを用いたDNSラウンドロビン
まず使えそうだな、と思ったのがMyDNS。
VIPを使うロードバランスはVIPの分IPアドレスを消費するけど。
DNSラウンドロビンなら余計なIPアドレスは使わない。
MyDNSはそれぞれのレコードに重み付けも出来るから、
Hot/Standbyのような構成も出来る。
あとは異常を検知した監視ソフトウェアから、
レコード操作するコマンドを発行出来ればすぐサービスアウトできるってところ。
(あっ、TTLを早めにしないと即時反映しないな・・・。)
障害があってレコード消しても、
キャッシュからたどり着いた人は前のIPを使っちゃうだろうから、即時反映できないな。
WEBサーバのロードバランスには使えない・・・?
MyDNSを用いた内部DNS
サーバファーム内の名前解決に使ってもいいかな、と考えてる。
これは管理の問題ではあるのだけど、
ホスト名が長くて分かりにくいサーバが居たりする。
そいつらにエイリアス的なホスト名をつけたい時ってあるんですよね。
でも、それやろうとするとhostsに書くしかないから、
アクセスしたいサーバには全部書いてあげないといけなくなっちゃう。
hogehogehoge.hoge.jpみたいなホスト名 長いよ!
ってことで
fuga
でアクセス出来るようにする。とか。
MyDNSの情報
少ない感じがする・・・。
DynamicDNSサービスのMyDNSの方が先に出てきてしまう・・・。
使いどころが難しいものであることは確かだと思うので、
あんまり使われてないのかな・・・?
その他のところ
MySQLHandlerSocket というのは使えそう、って思ってたんですが。
これはMySQLをNoSQL的に使うためのプラグインだったので用途がなさそう。
MHAも そんなにスレーブが居るわけではないので、
1台消費してコントローラー作るほどじゃないかな、と。
あとは運用管理のあたり。
サーバの管理情報を全てDB管理するってのは驚き。
でも使いやすそう。
監視からサーバデプロイツールまで全てDBからの情報で動くってのが驚き。
今サーバ管理のやり方が 一意じゃない情報を元にして整理してるから、
見直して整理したいなー、という事を思った。
ログ管理のやり方とか読んでて、
ApacheやらCronなんかの日々出てくるログの管理なんかも考え直した方がいいね、って思ったよ。
バイナリログの削除
MySQLを運用しているとバイナリログがたまってHDDを圧迫していることがあるのですが。
その際、バイナリログをMySQL側から削除するコマンドを調べたので覚書。
PURGE MASTER LOGS TO 'hoge-bin.001948';
こう書くと hoge-bin.001948 よりも前のバイナリログを削除してくれる。
他にも
PURGE MASTER LOGS BEFORE 'YYYY-MM-DD HH:MM:SS';
と書くと 指定された日付以前のバイナリログを削除してくれる。
バイナリログをスレーブ側が読み込んでいる途中なら、コマンドを実行してもエラーになる。
MySQLのレプリケーションを組んでいる場合ば、
スレーブ側が何処までバイナリログを読んでいるか確認した上で削除するのが良い。
http://dev.mysql.com/doc/refman/4.1/ja/purge-master-logs.html
どうでもいいけど ログをパージするって言い方格好いいよね。
ネットを漂流するデータ
以前、この記事を読んで。
はてなブックマーク - データはどこに残るのか | 774::Blog
ブックマークコメントで「やっぱり石に彫るしか ないよね。」って書いたんですけど。
この話が妙に引っかかっていたというか。
どうやったら実現出来るだろうか、的なことを考えていたんです。
自分がとても大切なデータを、ずっと未来まで残したいとか。
そんなデータ無いって気もしますが…。
ネットの海に漂流させる
アニメ的なネタ要素と、現実的な要素の話が混ざった妄想のお話をさせて頂きますと。
peer-to-peerネットワークの中だったらデータも残るんじゃないか、って考えたんですよね。
過去話題になったものでいうと、WinMXやWinnyといったpeer-to-peerネットワーク。
専用のソフトウェアがインストールされ、実行している端末の中にデータの欠片やデータそのものがコピーされ伝搬していくネットワーク。
保存されたデータを消去し難いネットワーク
本来の目的はデータの伝達速度を速くすることだと思うのですが。
重要なファイルが流出してしまって話題になったりしましたが、
その後そのファイルを消そうとしても難しいという話を聞いた記憶があります。
それは
”端末が欠片やそのものを保有した後、ソフトウェアを起動しなかったら?”
”どの端末にデータが残っているか追跡しにくい”
とかそういう理由だと思うのですが。(ちゃんと調べたわけじゃないので分かりませんが…。)
逆に言えば、”消えてほしくないデータを保存するには適したネットワーク”と言えるのではないか。
参加する端末の分だけコピー、バックアップが存在するネットワーク。
それだけデータの保全性が高くなるということにならないか。
と考えたのです。(妄想)
peer-to-peerネットワークの寿命
ただ、現実的に考えた時 peer-to-peerネットワークの寿命が問題になると思います。
というのも、WinMXやWinnyは不正なファイルの流通路として使われるようになり、
次第に使うユーザが減っていったと思います。(今現在どれくらいの規模か分かりませんが…。)
そして新たにpeer-to-peerネットワークを形成するソフトウェアやプロトコルが開発され、ユーザは移民していく。
これを考えると一つのpeer-to-peerネットワークに、
一つのデータを存在し続けさせることは難しそうです。
というのも、そのpeer-to-peerネットワーク自体が寿命を迎え死んでしまった場合、
そのデータを取り出す方法も、コピーされる端末もなくなってしまうからです。
進化するpeer-to-peerネットワーク
ここで考えたのが、新しいpeer-to-peerネットワークに移り続ける端末を作るという方法です。
WinMXが死んだら、Winnyに。といった具合にpeer-to-peerネットワークを乗り移る。
かつて自分が求めるファイルを探すために、移民していったユーザのように。
専用のpeer-to-peerネットワーク
もしくはデータを残すためだけに専用のpeer-to-peerネットワークを形成する方法です。
ただ、これは参加する端末が居ない事が問題点です。
WinMXやWinnyといったソフトウェアによるpeer-to-peerネットワークは、
ソフトウェアが無料ということで爆発的に参加する端末が増えて行きました。
専用のソフトウェアを作った所で、
誰がインストールしてくれるか分かりません。
究極はボットネット?
botnetというのがあります。
これはマルウェアとしてPCに入り込んだソフトウェアが、
遠隔操作によって対象のサーバやネットワークに一斉にトラフィックをかけたりする攻撃手段の一つなんですが。
勝手に入り込んだソフトウェアが、
peer-to-peerネットワークと同じような役目を果たしてくれるなら。
そして感染するPCが増え続けるなら。
もしかしたら、
現在のインターネットが姿形を大きく変えてしまうまで
データを損なう事なく
保存することが出来るかも知れません。
ウィルス対策ソフトウェアなどで消去されずに済めば、ですが。
まとめ
結論としては やっぱり石に彫って残すしかないね。
便利コマンドメモ
apache ログ解析に便利なコマンドを教えてもらったのでメモしておく。
1時間ごとにアクセス数を見る
( cut -f2 -d: | sort | uniq -c ) < access_log
IPアドレスのアクセス回数上位5個を見る
( awk '{print $1}' | sort | uniq -c | sort --numeric-sort | tail -5 ) < access_log