find grep 組み合わせ

find でファイル名検索して、その中身を キーワードで grep して、引っかかったのを一覧表示したい。
qmailエイリアスファイルに書いたアドレスが、何処に書かれてるのか分からない、とかそういう時に使いたくなる。

find [パス] -name [ファイル名] -print | xargs grep [キーワード]

よく使いたくなるのに、忘れちゃってていつも困るからメモ。

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までこの料金)

CDN従量課金

ネットワーク転送量(Out)
IDCF NOAH: 14.7 円/GB
Amazon S3: 15.5 円/1000リクエス

まとめ

価格感はS3に負けず劣らずというところ?
大きな差はついてない感じ。
CDNは単位が違うから比べようが無いかも。
容量大きいファイルをCDNで使う場合は、転送量で計算しないからS3の方がお得か?

使い勝手とかは分からないなぁ。

Mobageを支える技術を読み終わりました。

Mobageを支える技術を読み終わったので、
その感想と、自分の仕事に役立ちそうな事をちょっと調べてみることにする。

Mobageを支える技術 ~ソーシャルゲームの舞台裏~ (WEB+DB PRESS plus)

Mobageを支える技術 ~ソーシャルゲームの舞台裏~ (WEB+DB PRESS plus)

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

はてなブックマーク - データはどこに残るのか | 774::Blog
ブックマークコメントで「やっぱり石に彫るしか ないよね。」って書いたんですけど。
この話が妙に引っかかっていたというか。
どうやったら実現出来るだろうか、的なことを考えていたんです。

自分がとても大切なデータを、ずっと未来まで残したいとか。
そんなデータ無いって気もしますが…。

ネットの海に漂流させる

アニメ的なネタ要素と、現実的な要素の話が混ざった妄想のお話をさせて頂きますと。
peer-to-peerネットワークの中だったらデータも残るんじゃないか、って考えたんですよね。

過去話題になったものでいうと、WinMXWinnyといったpeer-to-peerネットワーク。

専用のソフトウェアがインストールされ、実行している端末の中にデータの欠片やデータそのものがコピーされ伝搬していくネットワーク。


保存されたデータを消去し難いネットワーク

本来の目的はデータの伝達速度を速くすることだと思うのですが。

重要なファイルが流出してしまって話題になったりしましたが、
その後そのファイルを消そうとしても難しいという話を聞いた記憶があります。

それは
”端末が欠片やそのものを保有した後、ソフトウェアを起動しなかったら?”
”どの端末にデータが残っているか追跡しにくい”
とかそういう理由だと思うのですが。(ちゃんと調べたわけじゃないので分かりませんが…。)

逆に言えば、”消えてほしくないデータを保存するには適したネットワーク”と言えるのではないか。

参加する端末の分だけコピー、バックアップが存在するネットワーク。
それだけデータの保全性が高くなるということにならないか。
と考えたのです。(妄想)

peer-to-peerネットワークの寿命

ただ、現実的に考えた時 peer-to-peerネットワークの寿命が問題になると思います。

というのも、WinMXWinnyは不正なファイルの流通路として使われるようになり、
次第に使うユーザが減っていったと思います。(今現在どれくらいの規模か分かりませんが…。)

そして新たに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ネットワークを形成する方法です。

ただ、これは参加する端末が居ない事が問題点です。
WinMXWinnyといったソフトウェアによるpeer-to-peerネットワークは、
ソフトウェアが無料ということで爆発的に参加する端末が増えて行きました。

専用のソフトウェアを作った所で、
誰がインストールしてくれるか分かりません。

究極はボットネット

botnetというのがあります。
これはマルウェアとしてPCに入り込んだソフトウェアが、
遠隔操作によって対象のサーバやネットワークに一斉にトラフィックをかけたりする攻撃手段の一つなんですが。

勝手に入り込んだソフトウェアが、
peer-to-peerネットワークと同じような役目を果たしてくれるなら。
そして感染するPCが増え続けるなら。

もしかしたら、
現在のインターネットが姿形を大きく変えてしまうまで
データを損なう事なく
保存することが出来るかも知れません。

ウィルス対策ソフトウェアなどで消去されずに済めば、ですが。

まとめ

結論としては やっぱり石に彫って残すしかないね。

便利コマンドメモ

apache ログ解析に便利なコマンドを教えてもらったのでメモしておく。

1時間ごとにアクセス数を見る

( cut -f2 -d: | sort | uniq -c ) < access_log

500エラーが出ている時間を調べる

( awk '$9==500{print}' | cut -f2,3 -d: | sort | uniq -c ) < access_log

IPアドレスのアクセス回数上位5個を見る

( awk '{print $1}' | sort | uniq -c | sort --numeric-sort | tail -5 ) < access_log

IPアドレスをすべてアクセス順に見る(結果が多いのでファイルに出力する)

( awk '{print $1}' | sort | uniq -c | sort --n --reverse ) < access_log > ipaddr.txt

15時20分台に来た、ワイルドカードで始まるクエリのリクエストを見る

( grep 2012:15:2 | awk '$7 ~ /^\/search\?q=\*/{print}' ) < access_log