チャオ!みんな、Kyoto Tycoonライフをエンジョイしてるかい!?
今日はKTライフを満喫してるミーからの運用TIPSアンドソーオンをお届けするYO!
kchashmgrとktremotemgrコマンドの補完
人間の脳活動のピークは22歳の今日このごろ、みなさんいかがおすごし? もうね、ミーは全然コマンドオプションとか覚えられないからシェル(bash)で補完しまくってるYO!
kchashmgrとktremotemgrだけだしオプション網羅してないし補完ルールもアレだけどオープン&シェアなマインドとガッツで気になる人はfork & push!
Nagiosで死活監視
ナギオス!みんな使ってるよね?
ミーはcheck_httpでKTのHTTP RPCのechoにアクセスしてデッドオアアライブの監視してる!
define command { command_name check_kyototycoon command_line $USER1$/check_http -I $HOSTADDRESS$ -p $ARG1$ -u /rpc/echo } define service { use critical-service hostgroup_name kt service_description Kyoto Tycoon server health check check_command check_kyototycoon!1975 } define hostgroup { hostgroup_name kt members kt101, kt102 } define host { use service-only host_name kt101 address 10.19.75.1 } define host { use service-only host_name kt102 address 10.19.75.2 }
レプリケーションの復旧方法
ちょっと再起動しちゃった
ディスクベースのDB使ってるときは再起動は問題ないんだけど、StashDBとかオンメモリDBを使ってるときに再起動するとデータ消えちゃうよね?でもイヤだよね?どう?
そんなときはバックグラウンドスナップショット(自動スナップショット)をとるようにしていればノープロブレムッ!
ktserverのオプションにスナショの出力先ディレクトリの指定(-bgs)と書き出しの間隔秒(-bgsi)を指定するダケ!
ktserverを(再)起動するときは起動したときと同じく-bgsと-bgsiをつけたままでスタート! そすると初期データはスナショから読みこむし、レプリケーションのタイムスタンプを記録しているRTSファイルもそのままあるだろうから、落ちてる間にレプリケーションのペアになされたsetとかもレプられてデータ同期するよ!
これでカジュアルにリスターツできるね!
フルダンプから
KTはホットバックアップをとれるYO!
レプってて片方のサーバのディスクが木っ端微塵にエクスプロードしても、デイリーでホットバックアップをとっていれば、このフルダンプから新しいレプペアをこさえられるのですぞ!
デイリーでとってなくても、片肺状態の生きているktserverからDOKIDOKIしながらその場でフルダンプとってもいいけどね!
だからktserverには↑のドキュメンツにあるように、-cmdとdbbackupスクリプトを置いておくのをドントフォーゲット!
エニウェイ、ホットバックアップをとるのはこんな感じで。
$ ktremotemgr sync -host kt101 -port 1975 -cmd dbbackup
ユーノー、ホットバックの指令はリモートからも発行できるぜ!
ホットバックアップが成功すると、「db.kch.01306840014856000000」というファイルがボーンする。ファイル名の末尾のメニーメニーなナンバーはベリーインポータントだから、デイリーでフルダンプとって別ホストにコピーして保存するときは、このファイル名のまま保存するようにな!
で、このフルダンプを使ってどうやってブランニューレプペアのデータセットを作り上げるかだが、こんな感じだ!
# cd /kt/kt101 # cp -p db.kch.01306840014856000000 db.kch # echo 01306840014856000000 > 101.rts # chown kt:kt 101.rts; chmod 644 101.rts
スナショファイルをktserverが期待するDBファイル名でcpするのはいいとして、ミソはスナショファイル名末尾のメニーなナンバーはスナショをとった時刻なので、それをレプリケーションを再開するタイムスタンプ(rts)としているところダ!rtsがないと、オールデータをレプするので時間とディスクI/Oがメニー発生するからアテンションプリーズな!(このへんの挙動と手順の妥当性は、リトルビッツ自信ないでげす…)
データセットができたらktserverをスターツすればおk。
あとあとバイザウェイ、ホットバックアップをとれるのはディスクベースのDBを使ってるときオンリーな!オンメモリDBのときは(DB*ファイル*が存在しないので)とれないぜ!
バット!ナウなKTなら、前述のバックグラウンドスナップショットにスナショ作成時のタイムスタンプもインクルードされているんで、オンメモリDBでも無駄なく復旧ができるぜ!詳しくは↓を読んでネ
kchファイルを消しちゃった!キャハ★
アルアル!アルよね!ちょっと指がスリップしちゃってKTのデータディレクトリ全部rm -frしちゃったりとか!
レプっていれば前述のとおり、ホットバックアップやバックグラウンドスナップショットから復旧できるのでノープロブレブ!
オールゾー! レプってないとき! フェイスがブルーになるネ!!
そんなときはちょっと強引だけどこんな方法で復元できるよ!(Linux限定)
まず、素数を数えて心を落ち着けよう(エラトステネス、サンクス!)。次に、ktserverのプロセスIDを調べよう。
プロセスIDが分かったら、おもむろにKTの実効ユーザかrootで:
# ls -l /proc/$KT_PID/fd/
ゼン、ktserverのプロセスがオープンしているファイルのファイル記述子(数字)とその実ファイルのパスがリストされるので、kchファイルを探してファイル記述子のナンバーをリメンバー!(たぶん 3)
そしたらば! kchashmgrのcopyコマンドで、さっきのファイル記述子なファイルからデータを読んでダンプする!
# kchashmgr copy -onl /proc/$KT_PID/fd/3 dump.kch
オフコース、copyをとる前にはクライアント(アプリケーションサーバとか)を落したり、iptablesでKTへのリクエストをリジェクトしたりして、更新がかからないようにしたほうがモアベターだぜ!