Kyoto Tycoonの運用TIPSなどなど

チャオ!みんな、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へのリクエストをリジェクトしたりして、更新がかからないようにしたほうがモアベターだぜ!

おわりに

ザッツオール!こんなすてきなKyoto Tycoonをデベロップしてくれた[twitter:@fallabs]サンにベリーサンクス!&アディオス!


こんかいちょっと文体を変えたのにお気づきになられたでしょうか? 差し支えなければ向学のため、おもしろセンテンスがもしあればそこを選択してはてなスターつけてもらえると幸甚です。