kyototycoon レプリケーションテスト

masterの起動

ホットバックアップの時と同じでulogを出力+sid(server id)にユニークな数字をつけて起動することでレプリケーションできる。

ktserver -pid master.pid -ulog master -sid 1 master.kct &

slaveの起動

自動でレプリケーションが始まるか試したいので一旦master側にデータを入れてからslaveを立ち上げる

ktremotemgr set key1 value1
ktserver -pid slave.pid -ulog slave -sid 2 -mhost localhost -mport 1978 -rts slave.rts -port 1979 slave.kct &
※ -mhost, -mportでマスターのホスト、ポートを指定 -rtsはrplication timestamp
ktremotemgr get -port 1979 key1 -> value1

スレーブでも値が取れてるので立ち上げると自動でレプリケーションが走る様子。rtsは一時的にslaveだけ止まった時用に更新位置を保持してるファイルかな。
いくつか気になる点

  • ulogが複数あって最初からじゃなくて中途半端なところからある場合(古いulogを削除した状態)でslaveを立ち上げた時はどうなるか
  • stop slave的な事はできるのか
  • 差分(遅延)の確認はできるのか -> 公式のドキュメント見る限りktremotemgr list -pvして全部のデータを出力して確認してるぽい...

追記

差分は

ktremotemgr report -port 1979

を実行するとrepl_delayという項目がでた。データの更新をしてなくても常に値が変わってるので時間そのもののズレをあらわしてるのだろうか。同じコマンドでアイテム数もチェックできるみたいなので、軽い整合性の確認くらいには使えそう。

追記2

古いulogがない状態でslaveのサーバを新規に作りたい場合は

  • masterのプロセスを一旦とめる
  • master.kch, rtsをコピーして退避
  • 上記2ファイルをsalveに移して起動

の手順を踏むとulogが最初からなくてもクローンが作成できる模様。ktremotemgr reportでdb_total_count値を比較してみると上手く行った場合でもvaccum(GC)の走るタイミングのせいかslave起動直後はdelayが収束してもちょっと値にズレが生じる気がする (KTのバージョンによるかも)