SlideShare ist ein Scribd-Unternehmen logo
1 von 42
Downloaden Sie, um offline zu lesen
Kyoto Tycoon導入ガイド




                    FAL Labs
                   http://fallabs.com/
               mailto:info@fallabs.com
概要編
製品コンセプト
●   軽量データベースサーバ
    ●   軽量
        –   関係演算を省略 → "Key Value Store"
        –   クエリ言語も省略 → "NoSQL"
    ●   高性能
        –   数万クライアント同時接続
        –   秒間数10万リクエスト処理
        –   Kyoto Cabinet内蔵
●   永続的キャッシュサーバ
    ●   memcachedの永続化
        –   ファイルDBに記録 → 再起動や移設が可能
    ●   耐障害性(HA)機能搭載
        –   ホットバックアップ、更新ログ、レプリケーション
基本機能
●   連想配列
    ●   key-value構造
        –   ハッシュ表系:キーの完全一致で操作
        –   B+木系:キーの完全一致や範囲一致で操作
    ●   set, remove, get, increment, cas, clear, ...
●   時限削除
    ●   各レコードにexpiration time(xt)を設定
    ●   xtを過ぎたレコードは勝手に消える
        –   DBサイズを一定に保てる
●   クライアント/サーバ方式
    ●   TCP(HTTP)で通信
        –   IDC内での利用を想定。セキュリティ機能は省略
    ●   複数プロセス、複数マシンで単一DBを共有
        –   KC単体では不可能
主想定ユースケース
●   memcachedの代替
    ●   リアルタイム性に加えて永続性が欲しい
        –   Webサービスのセッションストレージ
        –   アクセスカウンタ、足あと
    ●   オンメモリでも、メモリ使用量を減らしたい
        –   小さいレコードなら60%くらいに削減
    ●   キャッシュでも落ちるとRDBMS側が詰まって困る
        –   レプリケーション&スナップショット付きのmemcachedとして
●   RDBMSの補助
    ●   関係演算が必要なく、キーの完全一致でよい場合
        –   ソーシャルグラフやレコメンド等の非正規化データ
        –   ログ等の「write=99% & read=バッチ」なデータ
        –   ただし、InnoDBも十分高速。 cf. HandlerSocket
プロトコル
●   HTTP
    ●   全主要言語でクライアントライブラリ利用可能
    ●   監視やロードバランスなど既存機構を流用可能
    ●   サーバの実装や保守が楽。拡張も容易
    ●   冗長なので通信量は大きい → IDC利用ならOK
    ●   パーザも非効率 → ボトルネックじゃないならOK
●   その他
    ●   一部コマンドはバイナリプロトコルもサポート
        –   バルク操作の効率化
        –   noreplyによるレイテンシ削減
    ●   memcachedプラグイン
        –   既存アプリを変更せずにマイグレーション
HTTPの例
RPC方式でレコードを格納                             RPC方式でレコードを検索
POST /rpc/set HTTP/1.1                    POST /rpc/get HTTP/1.1
Content-Length: 22                        Content-Length: 10
Content-Type: text/tab-separated-values   Content-Type: text/tab-separated-values

key     japan                             key     japan
value   tokyo
                                          HTTP/1.1 200 OK
HTTP/1.1 200 OK                           Content-Length: 12
Content-Length: 0                         Content-Type: text/tab-separated-values

                                          value   tokyo


RESTful方式でレコードを格納                         RESTful方式でレコードを検索
PUT /japan HTTP/1.1                       GET /japan HTTP/1.1
Content-Length: 5
Content-Type: application/octet-stream    HTTP/1.1 200 OK
                                          Content-Length: 5
tokyo                                     Content-Type: application/octet-stream

HTTP/1.1 201 Created                      tokyo
Content-Length: 0
性能
●   パフォーマンス(レイテンシ)
    ●   典型的にはTCPの1パケットのRTTに依存
        –   ローカルでも早くて0.1ms(10000qps)程度
        –   レイテンシに限定して考えれば、1パケットに収まればプロ
            トコルは多少冗長でも許容範囲
●   スループット
    ●   ネットワーク層とDB層の総合力
        –   epoll/kqueue利用により、同時接続1万以上でもOK
        –   DBが十分に早ければ10万qps以上
        –   バルク操作で100万qps以上
    ●   DB層(KC)の性能は規模とアクセスパターンに依存
        –   ファイルシステムキャッシュに乗る規模なら100万qps以上
        –   乗らない規模なら、ストレージデバイス(HDD/SSD)に依存
ネットワーク層の構成
   listen          register the
                   server socket


     accept
                       Event Notifier
detect new                                                    Task Queue
connection      deposit      observed objects
                              observed events
                                                                    queue
                  undo                                  add

                  wait                                         signal      condition
                                                                           variable
                withdraw                                        wait
                             notified objects
                              notified events                                      consume each
                                                                                   request

                                                               signal
                                                               process     worker thread
                                   register a request
                                   from a client               process
                                                               signal      worker thread
                                                                         process each
                                                                         request
         reuse or discard
         the connection                                        process
                                                               signal      worker thread
API
●   コアAPI
    ●   C++によるクライアントライブラリ
    ●   HTTPまたはバイナリプロトコル
    ●   RemoteDB(クライアント層)とTimedDB(サーバ層)
    ●   コマンドラインツールも標準添付
●   各種スクリプト言語
    ●   開発は各言語の有志に委任
        –   Perl: http://search.cpan.org/~tokuhirom/Cache-KyotoTycoon-0.09/
        –   PHP: http://openpear.org/package/Net_KyotoTycoon
        –   Ruby: https://github.com/uu59/kyototycoon-ruby
        –   Python: https://github.com/tmaesaka/python-kyototycoon
        –   node.js: https://github.com/swdyh/node-kyoto-tycoon
    ●   それ以外の環境では、RESTfulインターフェイスかmemcachedクラ
        イアントを推奨
        –   既存のHTTP/memcachedクライアントライブラリで利用可能
コンポーネント構成

                          applications
                           applications

  database client
   database client        database server
                           database server          Lua processor
                                                     Lua processor
   TSV-RPC client
    TSV-RPC client                   TSV-RPC server
                                      TSV-RPC server
    HTTP client
     HTTP client                          HTTP server
                                           HTTP server

   client socket
    client socket                  threaded TCP server
                                    threaded TCP server
networking utilities
 networking utilities      server socket
                            server socket          event notifier
                                                    event notifier

          Kyoto Cabinet (database, threading utilities)
           Kyoto Cabinet (database, threading utilities)
      Operating Systems (POSIX, Win32)
       Operating Systems (POSIX, Win32)           C++03 && TR1 libs
                                                   C++03    TR1 libs
付加価値
●   KCの機能性を継承
    ●   9種のDB型を選択。複数DBの同時起動
    ●   Visitor、カーソル、トランザクション、正規表
        現、MapReduceなどなど
●   HA機能群
    ●   ホットバックアップ = 無停止でバックアップ作成
    ●   更新ログ = 「行レベル」の更新情報を随時記録
    ●   非同期レプリケーション
        –   更新ログの他サーバへの転送と即時再生
        –   デュアルマスタもサポート
●   スクリプト言語拡張
    ●   Lua言語処理系を内蔵(オプション)
    ●   任意のユーザ定義操作を実装可能
9種のデータベース型
class name    persistence   algorithm        complexity   sequence        lock unit

ProtoHashDB   volatile      hash table       O(1)         undefined       whole (rwlock)

ProtoTreeDB   volatile      red black tree   O(log N)     lexical order   whole (rwlock)

StashDB       volatile      hash table       O(1)         undefined       record (rwlock)

CacheDB       volatile      hash table       O(1)         undefined       record (mutex)

GrassDB       volatile      B+ tree          O(log N)     custom order    page (rwlock)

HashDB        persistent    hash table       O(1)         undefined       record (rwlock)

TreeDB        persistent    B+ tree          O(log N)     custom order    page (rwlock)

DirDB         persistent    undefined        undefined    undefined       record (rwlock)

ForestDB      persistent    B+ tree          O(log N)     custom order    page (rwlock)
レプリケーションの構成例
                                        master server           master server
                                           (active)               (standby)

                                           database                database
   client


                                           update                  update
                                            logs                    logs
     load balancing

                                                           two way replication
                                                           (dual-master)


                                    slave servers
                        slave servers
            slave servers
slave servers
                                       database
                           database
               database                         one way replication
   database                                     (master-slave)
プラガブルモジュール
●   共有ライブラリによる動的機能追加
    ●   サーバ起動時に任意のsoファイルをロード
●   プラガブルサーバ
    ●   任意のプロトコルを追加可能
        –   memcachedプラグイン標準添付
             ●   既存のmemcachedアプリから無変更でマイグレーション可能
        –   有志がMessagePack-RPCプラグインを公開
●   プラガブルデータベース
    ●   任意のストレージを追加可能
        –   ボイドデータベースプラグイン標準添付
             ●   no-opなマスタでレプリケーションを効率化
        –   Tokyo Cabinet、Berkeley DB、LevelDBなど搭載可能
プラガブルモジュール構成
            Kyoto Tycoon server process
     Lua            plug-in
   script

              Lua processor
                                   PolyDB
                  HTTP            ProtoHashDB ProtoTreeDB
client           server
                                    StashDB
                pluggable
                                    CacheDB    GrassDB       shared
                  server
                                                            library
   shared                           HashDB      TreeDB
  library          plug-in           DirDB     ForestDB

                                    pluggable database       plug-in
 slave
server
                 update
                 logger
slave
agent
ライセンス
●   KCとKTはGPL製品だが…、
    典型的なWebサービス企業では商用ライセンスは不要
    ●   KT/KCの改変も再配布もしないから
        –   IDC内での利用は配布にあたらない  cf. AGPL
    ●   ネットワーク的に通信するクライアントはそもそもKC/KTとリン
        クしないから
        –   各クライアントライブラリのライセンスのみに影響される
●   Web屋さんから金を取らないとの割り切り
    ●   MySQLを真似たデュアルライセンスビジネス
        –   Web屋さんに使ってもらうと大いに宣伝になる
        –   もし役に立ったら、ブログ等に書いていただけると幸い
●   KCの商用ライセンス販売中
    ●   インストール本数無限、利用目的無制限、無期限の包括契約
    ●   年間売上高3億円未満の企業は100万円、それ以上は応相談
まとめ
●   永続的キャッシュサーバ
    ●   高機能なmemcachedとして
●   軽量データベースサーバ
    ●   RDBMSの補助として
●   プロトコル
    ●   HTTPとバイナリとユーザ定義
●   性能
    ●   数万クライアント同時接続&10万QPSでもOK
●   付加価値
    ●   各種API、9種のDB型、カーソル等、HA機能群
    ●   スクリプト言語拡張、プラガブルモジュール
●   ライセンス
    ●   GPL+商用のデュアル。再配布しなければ商用ライセンス不要。
参考資料
●   公式サイト
    ●   http://fallabs.com/kyototycoon/
●   まずは、基本仕様書
    ●   doc/spex.html
    ●   チュートリアルとTIPSを読めばだいたい分かる
●   コマンドライン仕様書
    ●   doc/command.html
    ●   ktserverとktremotemgrとkttimedmgrだけ読めばOK
●   API文書
    ●   doc/api/index.html
    ●   KT自体に興味がある場合にどうぞ
●   KCの基本仕様書
    ●   KCの、doc/spex.html
    ●   データベースチューニングに関してはこちら
●   開発者のブログ
    ●   http://fallabs.com/blog/promenade.cgi?act=search
    ●   最新の情報はこちら
運用編
インストール
●   要件
    ●   Linux 2.6以上かMac OS X 10.6以上
        –   新しめのFreeBSDでも多分OK。Solarisでも多分OKだが、selectなので遅い
        –   Windowsは現状では未対応
    ●   GCC 4.2.1以上
        –   C++標準ライブラリTR1の関係上、4.1系だと無理
    ●   zlib 1.2.3以上
        –   zlibをバイナリパッケージで入れる場合、zlib-develなどでヘッダファイルも入れること
●   KCのインストール
    ●   ./configure ; make ; sudo make install
●   KTのインストール
    ●   ./configure ; make ; sudo make install
●   注意点
    ●   debやrpmのパッケージは古いかも。最新版のソースパッケージ推奨。
    ●   デフォルトだとプログラム群は/usr/local以下にインストールされるの
        で、LD_LIBRARY_PATH(MacだとDYLD_LIBRARY_PATH)に/usr/local/libを含めること
    ●   KCのLZMA圧縮オプションやLZO圧縮オプションが必要なら、それらのライブラリを入れた
        上で、--enable-lzmaや--enable-lzoをつける
    ●   KTのLua拡張が必要なら、Luaを入れた上で、--enable-luaをつける
コマンドラインツール
●   ktserver
    ●   サーバ用のコマンド
    ●   サーバを起動する
        –   デーモンにもなれる
        –   daemontools等を使ってもOK
    ●   シグナルを送って停止
        –   端末からCtrl-Cを入力するか、kill系コマンドを実行
●   ktremotemgr
    ●   クライアント用のコマンド
    ●   コアAPIを使ってサーバにコマンドを投げる
●   kttimedmgr
    ●   サーバ側でDBを管理するコマンドだが、あまり使わない
    ●   ktserverを停止させた状態で利用
ktserverの実行
●   引数でDB名を指定。複数指定可能
    ●   ktserver red.kch blue.kch yellow.kch
        –   3つのファイルDBを開いて起動
    ●   DB名を指定しない場合はデフォルト設定のオンメモリDBを開く
    ●   DB名の拡張子はKCのPolyDBの命名規則に従う
●   ネットワーク設定
    ●   ktserver -host localhost -port 2001
        –   ループバックからのみ接続可能な2001番を開く
    ●   デフォルトは全NICの1978番を開く
●   ログ設定
    ●   ktserver -log hoge -ls
        –   hogeというファイルにシステムレベルのログのみを書く
    ●   デフォルトは全種類のログを標準出力に表示
DBの命名規則
●   記号か拡張子でDBの種類が決まる
    ●   ":":スタッシュDB(デフォルト、省メモリDB)
    ●   "*":オンメモリハッシュDB
    ●   "%":オンメモリツリーDB
    ●   ".kch":ファイルハッシュDB
    ●   ".kct":ファイルツリーDB
    ●   ".kcd":ディレクトリハッシュDB
    ●   ".kcf":ディレクトリツリーDB
●   "#" でつなげてチューニングパラメータを書く
    ●   "casket.kch#bnum=1000000#msiz=8g"
        –   100万バケット、8GBのマップメモリを指定
    ●   数値には"k", "m", "g" などの単位指定も可
軽くいじってみよう
●   サーバ起動
    ●   ktserver casket.kch
        –   なんかログがだらだら出るはず
●   クライアント環境からレコードの投入
    ●   ktremotemgr set tako ika
    ●   ktremotemgr set uni kani
●   クライアント環境からレコードの検索
    ●   ktremotemgr get tako
●   サーバの停止
    ●   サーバの端末でCtrl-C入力
●   サーバ側管理ツールでDBの内容を確認
    ●   kttimedmgr list -pv casket.kch
時限削除
●   レコード挿入時に削除時刻(xt)を指定
    ●   set("tako", "ika", 3600)
        –   現在時刻から1時間後に削除
    ●   set("tako", "ika", -1234567890)
        –   UNIX時間が1234567890の時に削除
●   遅延削除
    ●   get等の際にxtを過ぎたものは非存在とみなす
        –   countメソッドの戻り値には誤差
    ●   各種操作でカウンタを上げ、一定になった時にGC発動
        –   DB内を部分的にスキャンして、非存在領域を本当に削除
        –   記憶領域の断片化を防ぐために、自動デフラグの併用を推奨
        –   操作が行われないidle時間にもGCを実行
●   容量制限
    ●   時限削除だけでDBサイズが一定に保てない時のワークアラウンド
        –   キャッシュDBの場合:ストレージ層のLRU削除機能。「#capsiz=...」
        –   それ以外のDBの場合:サーバ層の強制GC機能。「#ktcapsiz=...」
シグナル駆動処理
●   名前付きシグナル
    ●   全てのRPCは処理前に任意の名前のシグナルを待てる
    ●   全てのRPCは処理後に任意の名前のシグナルを送れる
●   ライタとリーダの明示的協調処理
    ●   ライタはシグナル送信設定を伴う
        –   db.set_signal_sending("hello", true);
        –   db.set("hello", "world");
    ●   リーダはシグナル待機設定を伴う
        –   db.set_signal_waiting("hello", 60)
        –   db.get("hello", &result);
        ※ 実際のAPIはクライアントライブラリ毎に異なる
●   ジョブキュー
    ●   B+系のDBを用いて、タイムスタンプを各レコードのキーにする
        –   そうするとタイムスタンプ順にレコードが並ぶ
    ●   ライタはジョブを書きこんでシグナル送信
    ●   リーダはシグナルを受信して先頭レコードを取り出して処理
デーモン化
●   -dmnオプションでデーモン化
    ●   ktserver -dmn -pid /var/kt/pid
        –   PIDファイルを/var/kt/pidとして指定してデーモン化
    ●   PIDファイルにプロセスIDが書かれる
        –   停止する時はそのIDを読んでシグナルを飛ばす
    ●   カレントディレクトリが / になるので、コマンドに現れる全てのパス
        は絶対パスで書くこと
●   シグナル
    ●   SIGTERMかSIGINTで停止
    ●   デーモンにSIGHUPを送るとサーバが再起動
        –   DBを開き直すわけではないので、オンメモリDBの内容は消えない
●   ログローテート
    ●   デフォルトではログは単一ファイルに延々と追記
    ●   書き込み中のログファイルをmvなどで別名に変更
    ●   SIGHUPを送って再起動すると、書き込み先が元のファイルに戻る
ホットバックアップ
●   バックアップ作成用スクリプトの準備
    ●   /ktbin/dbbackup として保存        #! /bin/sh
    ●   引数はDB名とタイムスタンプ               srcfile="$1"
●   起動時にパスを通す                        destfile="$1.$2"
                                     cp -f "$srcfile"
    ●   ktserver -cmd /ktbin ...     "$destfile"
●   syncコマンドで呼び出す
    ●   ktremotemgr sync -cmd dbbackup
●   サーバ側にバックアップファイルができる
    ●   casket.kch.1234567890123456789 などのファイル名
        –   数字部分はタイムスタンプ
●   バックアップ作成中は更新系クエリはブロックされる
    ●   DB全体の整合性を保証。参照系クエリはブロックされない
    ●   OSのスナップショット機能でバックアップするのも妙案
更新ログ
●   バックアップファイルからのリストアの問題点
    ●   バックアップ時点のデータしか復元できない
●   更新ログにより補完
    ●   バックアップファイルに更新ログを適用してリカバー
    ●   DBが最新状態に復元できることを保証
    ●   時限削除による更新は更新ログに残らないが、時限削除時刻は更新ログの値に含む
●   -ulogオプションで更新ログを有効化
    ●   ktserver -ulog 0001-ulog -sid 1 ...
    ●   更新ログの置き場のディレクトリを指定。デフォルトでは256MB毎にローテート
    ●   サーバIDを数値で指定
●   バックアップファイルへの更新ログの適用
    ●   mv casket.kch.1234567890123456789 casket.kch
    ●   kttimedmgr recover -ts 1234567890123456789 casket.kch
    ●   ktserverが止まった状態で実行し、その後、casket.kchを指定してktserverを起動
●   古い更新ログファイルの削除
    ●   各ファイルのタイムスタンプは、ktremotemgr slave -uf で確認
    ●   削除する最大タイムスタンプを指定し、ktremotemgr slave -ur -ts xxxx を実行
非同期レプリケーション
●   バックアップ+更新ログの問題点
    ●   最新の更新ログは稼働サーバ上から移せず、HDDの故障は即データ損失
●   非同期レプリケーション
    ●   更新ログを別サーバ(スレーブ)に送ってすぐに再生
    ●   スレーブが元サーバ(マスタ)から更新ログをpullする
●   マスタの設定
    ●   ktserver -ulog 0001-ulog -sid 1 ...
    ●   更新ログをとる
●   スレーブの設定
    ●   ktserver -mhost serv1 -rts 2.rts -riv 0.04 ...
    ●   マスタとタイムスタンプファイルと取得間隔を指定
    ●   スレーブを複数台設置して負荷分散してもよい
●   デュアルマスタ
    ●   マスタを二つ設置して、相互にスレーブとなるように設定
    ●   それぞれ、サーバIDをユニークにすること
    ●   更新操作はどちらかのサーバに集約させること
バックグラウンドスナップショット
●   オンメモリDBの特性
    ●   サーバプロセスが終われば全てのレコードが消える
    ●   実メモリに乗るデータ規模で利用可能
    ●   圧倒的に高速
●   スナップショットによる永続化
    ●   定期的およびサーバ終了時にオンメモリDB内の全レコードをファイルに記録
    ●   次回起動時に上記ファイルを読み込んでDBの状態を復元
    ●   正常終了時には最新の、不慮の終了時には最後の定期スナップショット時の状態に復元
    ●   スナップショット作成はforkした子プロセスが実行
        –   forkした瞬間のメモリ状態をcopy-on-writeで維持
        –   スナップショット作成中も親プロセスの処理はブロックしない
●   -bgsオプションで自動スナップショットを有効化
    ●   ktserver -bgs /var/kt/ss -bgsi 180 ...
    ●   保存先のディレクトリを指定
    ●   180秒毎にスナップショットを自動作成
    ●   -bgsc zlib/lzo/lzma でオンザフライ圧縮も可能。lzoがオススメ
●   レプリケーションのスレーブ増設に使える
    ●   kttimedmgr bgsinform /var/kt/ss で得たタイムスタンプをRTSファイルとして用いる
DB設定例:普通のキャッシュサーバ
●   前提
    ●   memcachedのような省メモリなキャッシュサーバが欲しい
    ●   だいたい1000万レコードを保持予定
    ●   キャッシュ用にメモリ10GB利用
        –   マシンの搭載メモリ16GBなら10GBくらいまで使える
●   設定
    ●   ktserver ... ':#bnum=20000000#ktcapsiz=10g'
    ●   最も省メモリなスタッシュDBを利用
    ●   バケット数はレコード数の2倍で2000万
    ●   最大メモリ使用量を10GBに指定
        –   実際の物理メモリ使用量(RSS)は指定値より大きくなる
        –   サイズ制限を越えると、GCが無作為にレコードを削除
             ●   サイズ制限に到達しないようにアプリ側でxtを制御すべき
             ●   サイズ制限はスワップを防ぐための保険的な位置づけ
        –   LRU削除が必要なら、'*:#bnum=2000000#capsiz=8g' とする
DB設定例:永続的キャッシュサーバ
●   前提
    ●   memcachedのようだが永続化したキャッシュサーバが欲しい
    ●   だいたい1000万レコードを保持予定
    ●   メモリマップ用にメモリ12GB利用
        –   マシンの搭載メモリ16GBなら12GBくらいまで使える
●   設定
    ●   ktserver ...
        'casket.kch#opts=l#bnum=2000000#msiz=12g#dfunit=8'
    ●   ファイルハッシュDBを利用
    ●   線形オプションを指定
        –   バケット数がきちんと設定できればデフォルトの二分探索木は不要
    ●   バケット数はレコード数の2倍で2000万
    ●   メモリマップサイズを12GBに指定
    ●   動的デフラグ単位を8に指定
DB設定例:メタデータサーバ
●   前提
    ●   データを永続化し、時限削除は利用しない
    ●   だいたい1000万レコードを保持予定
    ●   メモリマップ用にメモリ12GB利用
        –   マシンの搭載メモリ16GBなら12GBくらいまで使える
●   設定
    ●   ktserver ...
        'casket.kch#opts=l#bnum=2000000#msiz=12g#dfunit=8#ktopts=p'
    ●   ファイルハッシュDBを利用
    ●   線形オプションを指定
        –   バケット数がきちんと設定できればデフォルトの二分探索木は不要
    ●   バケット数はレコード数の2倍で2000万
    ●   メモリマップサイズを12GBに指定
    ●   動的デフラグ単位を8に指定
    ●   永続化オプションにより、時刻情報の保持を省略し、GCを抑制
        –   CPU使用率がかなり下がるのでぜひ付けたほうがいい
サーバ設定例:memcachedプロトコル
●   前提
    ●   memcachedを使った既存のアプリでKTを使いたい
    ●   アプリケーションは一切変更したくない
●   設定
    ●   ktserver ... -th 1 -plsv
        /usr/local/libexec/ktplugservmemc.so -plex
        "opts=f" ...
    ●   コアサーバのスレッド数を1に抑制
    ●   memcachedプラグインをロード
    ●   プラグイン設定文字列でflags対応オプションを指定
        –   HTTPでレコードを読むとゴミが入る
サーバ設定例:memcachedジョブキュー
●   前提
    ●   memcachedプロトコルでジョブキューが使いたい
    ●   各レコードをキューに見立てて複数のキューを同時に扱いたい
    ●   空のキューをgetするとブロックし、新しいジョブが来たら即座に処理を再開
        したい。
●   設定
    ●   ktserver ... -th 1 -plsv /usr/local/libexec/ktplugservmemc.so -plex
        "opts=qf" "casket.kct#ktopt=p"
    ●   キューオプションとflagsオプションを指定
    ●   ファイルツリーDBを永続オプション付きで指定
●   ジョブ依頼側クライアント
    ●   ジョブ名をキー、ジョブデータを値に指定してset
●   ジョブワーカ側コード
    ●   ジョブ名をキーにしてget。値が取得できたら、ジョブを実行。
    ●   ジョブが成功したら、同じキーでdelete。
        –   もしdeleteしないで接続を切ると、サーバ側で暗黙的にジョブが復活。
サーバ設定例:ボイドデータベース
●   前提
    ●   表示用データを多数のスレーブで分散したい
    ●   更新が激しいのでマスタは空に保ちたい
●   設定
    ●   ktserver ... -ulog 0001-ulog -sid 1 -pldb
        /usr/local/libexec/ktplugdbvoid.so ...
    ●   更新ログをとる
    ●   ボイドデータベースプラグインをロード
    ●   上記サーバに多数のスレーブをつなげる
        –   スレーブでは通常のデータベースを用いる
サーバ設定例:スレーブエージェント
●   前提
    ●   KTからKT以外のストレージにレプリケーションしたい
    ●   KTのスレーブとして動作して任意の処理を適用
    ●   マスタから吸い出した更新ログをパイプで受け取って後処理を行うスクリプトを実装
●   マスタを起動
    ●   ktserver ... -ulog 0001-ulog -sid 1 ...
●   スレーブエージェントを起動
    ●   ktremotemgr slave -ts 1234567890123456 -uw | yourcommand
    ●   前回取得した最後のタイムスタンプを指定
    ●   最新データを待ち続ける-uwオプション
    ●   後処理コマンドは任意の実装
    ●   各更新ログを改行で区切って以下のフィールドを持つTSVデータを読む
        –   タイムスタンプ、サーバID、DB番号、コマンド名、Base64データのリスト
        –   コマンド名は、setかremoveかclear
        –   setの値の先頭5バイトはビッグエンディアンのexpiration date
    ●   読んだ更新ログのタイムスタンプをファイルに格納し、次回起動時に指定
    ●   デュアルマスタの各々で別のエージェントを起動する場合、-sidと-uxをつけて、自分
        の更新のみを扱うようにする
サーバ設定例:デュアルマスタ
●   host1でアクティブマスタ、host2でスタンバイマスタ起動
    ●   ktserver ... -ulog /path/to/ulog -sid 1 -mhost host2
        -rts /path/to/rts casket.kch
    ●   ktserver ... -ulog /path/to/ulog -sid 2 -mhost host1
        -rts /path/to/rts casket.kch
    ●   更新ログ、サーバID、マスタのホスト名、RTSファイルを指定
●   定期的にホットバックアップを作成
    ●   ktremovemgr sync -host host2 -cmd mybackup.sh
    ●   バックアップ作成はスタンバイマスタで行うと、更新操作のブ
        ロックを気にしなくて済む
    ●   作成したデータベースファイルとタイムスタンプファイルを別
        サーバに退避
    ●   バックアップのタイムスタンプ以前の更新ログは消してよい
        –   ktremogemgr slave -ur -ts ...
デュアルマスタの障害対応
●   host1(アクティブマスタ)が落ちた場合
    ●   host2をアクティブマスタとし、全クライアントの接続先をhost2に変更
    ●   直近のバックアップにおけるデータベースファイルとタイムスタンプファイ
        ルをhost3に転送
    ●   host1と同じコマンドでhost3にてスタンバイマスタ起動
    ●   host2のマスタをhost3に変更
        –   ktremotemgr tunerepl -host host2 -ts now host3
    ●   host3のレプリケーション遅延がなくなったら、必要に応じて接続先を戻す
        –   レプリケーション遅延は、ktremotemgr report -host host3 で確認
        –   host2をアクティブマスタとして使いつづけた方が楽かも
●   host2(スタンバイマスタ)が落ちた場合
    ●   直近のバックアップにおけるデータベースファイルとタイムスタンプファイ
        ルをhost3に転送
    ●   host2と同じコマンドでhost3にてスタンバイマスタ起動
    ●   host1のマスタをhost3に変更
        –   ktremotemgr tunerepl -host host1 -ts now host3
ご清聴ありがとうございました。

Weitere ähnliche Inhalte

Was ist angesagt?

Prestoで実現するインタラクティブクエリ - dbtech showcase 2014 Tokyo
Prestoで実現するインタラクティブクエリ - dbtech showcase 2014 TokyoPrestoで実現するインタラクティブクエリ - dbtech showcase 2014 Tokyo
Prestoで実現するインタラクティブクエリ - dbtech showcase 2014 TokyoTreasure Data, Inc.
 
Ansible 2.8 アップデート情報 -機能追加と注意点-
Ansible 2.8 アップデート情報 -機能追加と注意点-Ansible 2.8 アップデート情報 -機能追加と注意点-
Ansible 2.8 アップデート情報 -機能追加と注意点-akira6592
 
Java EE から Quarkus による開発への移行について
Java EE から Quarkus による開発への移行についてJava EE から Quarkus による開発への移行について
Java EE から Quarkus による開発への移行についてShigeru Tatsuta
 
PostgreSQLアーキテクチャ入門(INSIGHT OUT 2011)
PostgreSQLアーキテクチャ入門(INSIGHT OUT 2011)PostgreSQLアーキテクチャ入門(INSIGHT OUT 2011)
PostgreSQLアーキテクチャ入門(INSIGHT OUT 2011)Uptime Technologies LLC (JP)
 
CDNの仕組み(JANOG36)
CDNの仕組み(JANOG36)CDNの仕組み(JANOG36)
CDNの仕組み(JANOG36)J-Stream Inc.
 
Ceph アーキテクチャ概説
Ceph アーキテクチャ概説Ceph アーキテクチャ概説
Ceph アーキテクチャ概説Emma Haruka Iwao
 
AWS Black Belt Online Seminar 2016 AWS CloudFormation
AWS Black Belt Online Seminar 2016 AWS CloudFormationAWS Black Belt Online Seminar 2016 AWS CloudFormation
AWS Black Belt Online Seminar 2016 AWS CloudFormationAmazon Web Services Japan
 
Hadoop/Spark で Amazon S3 を徹底的に使いこなすワザ (Hadoop / Spark Conference Japan 2019)
Hadoop/Spark で Amazon S3 を徹底的に使いこなすワザ (Hadoop / Spark Conference Japan 2019)Hadoop/Spark で Amazon S3 を徹底的に使いこなすワザ (Hadoop / Spark Conference Japan 2019)
Hadoop/Spark で Amazon S3 を徹底的に使いこなすワザ (Hadoop / Spark Conference Japan 2019)Noritaka Sekiyama
 
AWSで作る分析基盤
AWSで作る分析基盤AWSで作る分析基盤
AWSで作る分析基盤Yu Otsubo
 
分散ストレージ技術Cephの最新情報
分散ストレージ技術Cephの最新情報分散ストレージ技術Cephの最新情報
分散ストレージ技術Cephの最新情報Emma Haruka Iwao
 
負荷テストを行う際に知っておきたいこと 初心者編
負荷テストを行う際に知っておきたいこと 初心者編負荷テストを行う際に知っておきたいこと 初心者編
負荷テストを行う際に知っておきたいこと 初心者編まべ☆てっく運営
 
containerdの概要と最近の機能
containerdの概要と最近の機能containerdの概要と最近の機能
containerdの概要と最近の機能Kohei Tokunaga
 
ブレソルでテラバイト級データのALTERを短時間で終わらせる
ブレソルでテラバイト級データのALTERを短時間で終わらせるブレソルでテラバイト級データのALTERを短時間で終わらせる
ブレソルでテラバイト級データのALTERを短時間で終わらせるKLab Inc. / Tech
 
Dockerセキュリティ: 今すぐ役に立つテクニックから,次世代技術まで
 Dockerセキュリティ: 今すぐ役に立つテクニックから,次世代技術まで Dockerセキュリティ: 今すぐ役に立つテクニックから,次世代技術まで
Dockerセキュリティ: 今すぐ役に立つテクニックから,次世代技術までAkihiro Suda
 
本当は恐ろしい分散システムの話
本当は恐ろしい分散システムの話本当は恐ろしい分散システムの話
本当は恐ろしい分散システムの話Kumazaki Hiroki
 
ActionCableのクライアントはRails外から利用できるのか
ActionCableのクライアントはRails外から利用できるのかActionCableのクライアントはRails外から利用できるのか
ActionCableのクライアントはRails外から利用できるのかYoichi Toyota
 

Was ist angesagt? (20)

Prestoで実現するインタラクティブクエリ - dbtech showcase 2014 Tokyo
Prestoで実現するインタラクティブクエリ - dbtech showcase 2014 TokyoPrestoで実現するインタラクティブクエリ - dbtech showcase 2014 Tokyo
Prestoで実現するインタラクティブクエリ - dbtech showcase 2014 Tokyo
 
Glibc malloc internal
Glibc malloc internalGlibc malloc internal
Glibc malloc internal
 
Em synchrony について
Em synchrony についてEm synchrony について
Em synchrony について
 
Ansible 2.8 アップデート情報 -機能追加と注意点-
Ansible 2.8 アップデート情報 -機能追加と注意点-Ansible 2.8 アップデート情報 -機能追加と注意点-
Ansible 2.8 アップデート情報 -機能追加と注意点-
 
Java EE から Quarkus による開発への移行について
Java EE から Quarkus による開発への移行についてJava EE から Quarkus による開発への移行について
Java EE から Quarkus による開発への移行について
 
PostgreSQLアーキテクチャ入門(INSIGHT OUT 2011)
PostgreSQLアーキテクチャ入門(INSIGHT OUT 2011)PostgreSQLアーキテクチャ入門(INSIGHT OUT 2011)
PostgreSQLアーキテクチャ入門(INSIGHT OUT 2011)
 
ゼロからはじめるKVM超入門
ゼロからはじめるKVM超入門ゼロからはじめるKVM超入門
ゼロからはじめるKVM超入門
 
CDNの仕組み(JANOG36)
CDNの仕組み(JANOG36)CDNの仕組み(JANOG36)
CDNの仕組み(JANOG36)
 
Ceph アーキテクチャ概説
Ceph アーキテクチャ概説Ceph アーキテクチャ概説
Ceph アーキテクチャ概説
 
AWS Black Belt Online Seminar 2016 AWS CloudFormation
AWS Black Belt Online Seminar 2016 AWS CloudFormationAWS Black Belt Online Seminar 2016 AWS CloudFormation
AWS Black Belt Online Seminar 2016 AWS CloudFormation
 
Hadoop/Spark で Amazon S3 を徹底的に使いこなすワザ (Hadoop / Spark Conference Japan 2019)
Hadoop/Spark で Amazon S3 を徹底的に使いこなすワザ (Hadoop / Spark Conference Japan 2019)Hadoop/Spark で Amazon S3 を徹底的に使いこなすワザ (Hadoop / Spark Conference Japan 2019)
Hadoop/Spark で Amazon S3 を徹底的に使いこなすワザ (Hadoop / Spark Conference Japan 2019)
 
AWSで作る分析基盤
AWSで作る分析基盤AWSで作る分析基盤
AWSで作る分析基盤
 
分散ストレージ技術Cephの最新情報
分散ストレージ技術Cephの最新情報分散ストレージ技術Cephの最新情報
分散ストレージ技術Cephの最新情報
 
負荷テストを行う際に知っておきたいこと 初心者編
負荷テストを行う際に知っておきたいこと 初心者編負荷テストを行う際に知っておきたいこと 初心者編
負荷テストを行う際に知っておきたいこと 初心者編
 
containerdの概要と最近の機能
containerdの概要と最近の機能containerdの概要と最近の機能
containerdの概要と最近の機能
 
ブレソルでテラバイト級データのALTERを短時間で終わらせる
ブレソルでテラバイト級データのALTERを短時間で終わらせるブレソルでテラバイト級データのALTERを短時間で終わらせる
ブレソルでテラバイト級データのALTERを短時間で終わらせる
 
Dockerセキュリティ: 今すぐ役に立つテクニックから,次世代技術まで
 Dockerセキュリティ: 今すぐ役に立つテクニックから,次世代技術まで Dockerセキュリティ: 今すぐ役に立つテクニックから,次世代技術まで
Dockerセキュリティ: 今すぐ役に立つテクニックから,次世代技術まで
 
nginx入門
nginx入門nginx入門
nginx入門
 
本当は恐ろしい分散システムの話
本当は恐ろしい分散システムの話本当は恐ろしい分散システムの話
本当は恐ろしい分散システムの話
 
ActionCableのクライアントはRails外から利用できるのか
ActionCableのクライアントはRails外から利用できるのかActionCableのクライアントはRails外から利用できるのか
ActionCableのクライアントはRails外から利用できるのか
 

Ähnlich wie Kyoto Tycoon Guide in Japanese

Web Operations and Perl kansai.pm#14
Web Operations and Perl kansai.pm#14Web Operations and Perl kansai.pm#14
Web Operations and Perl kansai.pm#14Masahiro Nagano
 
第11回ACRiウェビナー_東工大/坂本先生ご講演資料
第11回ACRiウェビナー_東工大/坂本先生ご講演資料第11回ACRiウェビナー_東工大/坂本先生ご講演資料
第11回ACRiウェビナー_東工大/坂本先生ご講演資料直久 住川
 
IIJlab seminar - Linux Kernel Library: Reusable monolithic kernel (in Japanese)
IIJlab seminar - Linux Kernel Library: Reusable monolithic kernel (in Japanese)IIJlab seminar - Linux Kernel Library: Reusable monolithic kernel (in Japanese)
IIJlab seminar - Linux Kernel Library: Reusable monolithic kernel (in Japanese)Hajime Tazaki
 
GUI&基本操作、CLI編
GUI&基本操作、CLI編GUI&基本操作、CLI編
GUI&基本操作、CLI編Go Chiba
 
Trema の紹介とネットワーク仮想化への応用
Trema の紹介とネットワーク仮想化への応用Trema の紹介とネットワーク仮想化への応用
Trema の紹介とネットワーク仮想化への応用kazuyas
 
C16 45分でわかるPostgreSQLの仕組み by 山田努
C16 45分でわかるPostgreSQLの仕組み by 山田努C16 45分でわかるPostgreSQLの仕組み by 山田努
C16 45分でわかるPostgreSQLの仕組み by 山田努Insight Technology, Inc.
 
20101018 JJUG CCC10 WindowsAzure
20101018 JJUG CCC10 WindowsAzure20101018 JJUG CCC10 WindowsAzure
20101018 JJUG CCC10 WindowsAzureShinichiro Isago
 
Atc15_reading_networking_session
Atc15_reading_networking_sessionAtc15_reading_networking_session
Atc15_reading_networking_session紘也 金子
 
さくらのDockerコンテナホスティング-Arukasの解説とインフラを支える技術(July Tech Festa 2016 『IoTxAIxインフラ時代...
さくらのDockerコンテナホスティング-Arukasの解説とインフラを支える技術(July Tech Festa 2016 『IoTxAIxインフラ時代...さくらのDockerコンテナホスティング-Arukasの解説とインフラを支える技術(July Tech Festa 2016 『IoTxAIxインフラ時代...
さくらのDockerコンテナホスティング-Arukasの解説とインフラを支える技術(July Tech Festa 2016 『IoTxAIxインフラ時代...さくらインターネット株式会社
 
Handlersocket etc. 20110906
Handlersocket etc. 20110906Handlersocket etc. 20110906
Handlersocket etc. 20110906akirahiguchi
 
Lagopus Router v19.07.1
Lagopus Router v19.07.1Lagopus Router v19.07.1
Lagopus Router v19.07.1Tomoya Hibi
 
fluentd を利用した大規模ウェブサービスのロギング
fluentd を利用した大規模ウェブサービスのロギングfluentd を利用した大規模ウェブサービスのロギング
fluentd を利用した大規模ウェブサービスのロギングYuichi Tateno
 
Open vSwitchソースコードの全体像
Open vSwitchソースコードの全体像 Open vSwitchソースコードの全体像
Open vSwitchソースコードの全体像 Sho Shimizu
 
Neutron Icehouse Update (Japanese)
Neutron Icehouse Update (Japanese)Neutron Icehouse Update (Japanese)
Neutron Icehouse Update (Japanese)Akihiro Motoki
 
WindowsAzureの長所を活かすクラウド アプリ開発(PDF版)
WindowsAzureの長所を活かすクラウド アプリ開発(PDF版)WindowsAzureの長所を活かすクラウド アプリ開発(PDF版)
WindowsAzureの長所を活かすクラウド アプリ開発(PDF版)Shinichiro Isago
 
KubeCon Recap for Istio and K8s network performance @Kubernetes Meetup #11
KubeCon Recap for Istio and K8s network performance @Kubernetes Meetup #11KubeCon Recap for Istio and K8s network performance @Kubernetes Meetup #11
KubeCon Recap for Istio and K8s network performance @Kubernetes Meetup #11Masaya Aoyama
 
Introduction of Rancher at OSC Tokyo 17 Spring
Introduction of Rancher at OSC Tokyo 17 SpringIntroduction of Rancher at OSC Tokyo 17 Spring
Introduction of Rancher at OSC Tokyo 17 SpringGo Chiba
 

Ähnlich wie Kyoto Tycoon Guide in Japanese (20)

Web Operations and Perl kansai.pm#14
Web Operations and Perl kansai.pm#14Web Operations and Perl kansai.pm#14
Web Operations and Perl kansai.pm#14
 
第11回ACRiウェビナー_東工大/坂本先生ご講演資料
第11回ACRiウェビナー_東工大/坂本先生ご講演資料第11回ACRiウェビナー_東工大/坂本先生ご講演資料
第11回ACRiウェビナー_東工大/坂本先生ご講演資料
 
IIJlab seminar - Linux Kernel Library: Reusable monolithic kernel (in Japanese)
IIJlab seminar - Linux Kernel Library: Reusable monolithic kernel (in Japanese)IIJlab seminar - Linux Kernel Library: Reusable monolithic kernel (in Japanese)
IIJlab seminar - Linux Kernel Library: Reusable monolithic kernel (in Japanese)
 
serverless
serverlessserverless
serverless
 
GUI&基本操作、CLI編
GUI&基本操作、CLI編GUI&基本操作、CLI編
GUI&基本操作、CLI編
 
Trema の紹介とネットワーク仮想化への応用
Trema の紹介とネットワーク仮想化への応用Trema の紹介とネットワーク仮想化への応用
Trema の紹介とネットワーク仮想化への応用
 
C16 45分でわかるPostgreSQLの仕組み by 山田努
C16 45分でわかるPostgreSQLの仕組み by 山田努C16 45分でわかるPostgreSQLの仕組み by 山田努
C16 45分でわかるPostgreSQLの仕組み by 山田努
 
20101018 JJUG CCC10 WindowsAzure
20101018 JJUG CCC10 WindowsAzure20101018 JJUG CCC10 WindowsAzure
20101018 JJUG CCC10 WindowsAzure
 
Atc15_reading_networking_session
Atc15_reading_networking_sessionAtc15_reading_networking_session
Atc15_reading_networking_session
 
さくらのDockerコンテナホスティング-Arukasの解説とインフラを支える技術(July Tech Festa 2016 『IoTxAIxインフラ時代...
さくらのDockerコンテナホスティング-Arukasの解説とインフラを支える技術(July Tech Festa 2016 『IoTxAIxインフラ時代...さくらのDockerコンテナホスティング-Arukasの解説とインフラを支える技術(July Tech Festa 2016 『IoTxAIxインフラ時代...
さくらのDockerコンテナホスティング-Arukasの解説とインフラを支える技術(July Tech Festa 2016 『IoTxAIxインフラ時代...
 
Handlersocket etc. 20110906
Handlersocket etc. 20110906Handlersocket etc. 20110906
Handlersocket etc. 20110906
 
Lagopus Router v19.07.1
Lagopus Router v19.07.1Lagopus Router v19.07.1
Lagopus Router v19.07.1
 
20120423 hbase勉強会
20120423 hbase勉強会20120423 hbase勉強会
20120423 hbase勉強会
 
fluentd を利用した大規模ウェブサービスのロギング
fluentd を利用した大規模ウェブサービスのロギングfluentd を利用した大規模ウェブサービスのロギング
fluentd を利用した大規模ウェブサービスのロギング
 
Open vSwitchソースコードの全体像
Open vSwitchソースコードの全体像 Open vSwitchソースコードの全体像
Open vSwitchソースコードの全体像
 
Neutron Icehouse Update (Japanese)
Neutron Icehouse Update (Japanese)Neutron Icehouse Update (Japanese)
Neutron Icehouse Update (Japanese)
 
WindowsAzureの長所を活かすクラウド アプリ開発(PDF版)
WindowsAzureの長所を活かすクラウド アプリ開発(PDF版)WindowsAzureの長所を活かすクラウド アプリ開発(PDF版)
WindowsAzureの長所を活かすクラウド アプリ開発(PDF版)
 
Nginx
NginxNginx
Nginx
 
KubeCon Recap for Istio and K8s network performance @Kubernetes Meetup #11
KubeCon Recap for Istio and K8s network performance @Kubernetes Meetup #11KubeCon Recap for Istio and K8s network performance @Kubernetes Meetup #11
KubeCon Recap for Istio and K8s network performance @Kubernetes Meetup #11
 
Introduction of Rancher at OSC Tokyo 17 Spring
Introduction of Rancher at OSC Tokyo 17 SpringIntroduction of Rancher at OSC Tokyo 17 Spring
Introduction of Rancher at OSC Tokyo 17 Spring
 

Kürzlich hochgeladen

[DevOpsDays Tokyo 2024] 〜デジタルとアナログのはざまに〜 スマートビルディング爆速開発を支える 自動化テスト戦略
[DevOpsDays Tokyo 2024] 〜デジタルとアナログのはざまに〜 スマートビルディング爆速開発を支える 自動化テスト戦略[DevOpsDays Tokyo 2024] 〜デジタルとアナログのはざまに〜 スマートビルディング爆速開発を支える 自動化テスト戦略
[DevOpsDays Tokyo 2024] 〜デジタルとアナログのはざまに〜 スマートビルディング爆速開発を支える 自動化テスト戦略Ryo Sasaki
 
スマートフォンを用いた新生児あやし動作の教示システム
スマートフォンを用いた新生児あやし動作の教示システムスマートフォンを用いた新生児あやし動作の教示システム
スマートフォンを用いた新生児あやし動作の教示システムsugiuralab
 
論文紹介:Content-Aware Token Sharing for Efficient Semantic Segmentation With Vis...
論文紹介:Content-Aware Token Sharing for Efficient Semantic Segmentation With Vis...論文紹介:Content-Aware Token Sharing for Efficient Semantic Segmentation With Vis...
論文紹介:Content-Aware Token Sharing for Efficient Semantic Segmentation With Vis...Toru Tamaki
 
論文紹介:Automated Classification of Model Errors on ImageNet
論文紹介:Automated Classification of Model Errors on ImageNet論文紹介:Automated Classification of Model Errors on ImageNet
論文紹介:Automated Classification of Model Errors on ImageNetToru Tamaki
 
TSAL operation mechanism and circuit diagram.pdf
TSAL operation mechanism and circuit diagram.pdfTSAL operation mechanism and circuit diagram.pdf
TSAL operation mechanism and circuit diagram.pdftaisei2219
 
Open Source UN-Conference 2024 Kawagoe - 独自OS「DaisyOS GB」の紹介
Open Source UN-Conference 2024 Kawagoe - 独自OS「DaisyOS GB」の紹介Open Source UN-Conference 2024 Kawagoe - 独自OS「DaisyOS GB」の紹介
Open Source UN-Conference 2024 Kawagoe - 独自OS「DaisyOS GB」の紹介Yuma Ohgami
 
Postman LT Fukuoka_Quick Prototype_By Daniel
Postman LT Fukuoka_Quick Prototype_By DanielPostman LT Fukuoka_Quick Prototype_By Daniel
Postman LT Fukuoka_Quick Prototype_By Danieldanielhu54
 
【早稲田AI研究会 講義資料】3DスキャンとTextTo3Dのツールを知ろう!(Vol.1)
【早稲田AI研究会 講義資料】3DスキャンとTextTo3Dのツールを知ろう!(Vol.1)【早稲田AI研究会 講義資料】3DスキャンとTextTo3Dのツールを知ろう!(Vol.1)
【早稲田AI研究会 講義資料】3DスキャンとTextTo3Dのツールを知ろう!(Vol.1)Hiroki Ichikura
 
SOPを理解する 2024/04/19 の勉強会で発表されたものです
SOPを理解する       2024/04/19 の勉強会で発表されたものですSOPを理解する       2024/04/19 の勉強会で発表されたものです
SOPを理解する 2024/04/19 の勉強会で発表されたものですiPride Co., Ltd.
 
論文紹介:Semantic segmentation using Vision Transformers: A survey
論文紹介:Semantic segmentation using Vision Transformers: A survey論文紹介:Semantic segmentation using Vision Transformers: A survey
論文紹介:Semantic segmentation using Vision Transformers: A surveyToru Tamaki
 

Kürzlich hochgeladen (10)

[DevOpsDays Tokyo 2024] 〜デジタルとアナログのはざまに〜 スマートビルディング爆速開発を支える 自動化テスト戦略
[DevOpsDays Tokyo 2024] 〜デジタルとアナログのはざまに〜 スマートビルディング爆速開発を支える 自動化テスト戦略[DevOpsDays Tokyo 2024] 〜デジタルとアナログのはざまに〜 スマートビルディング爆速開発を支える 自動化テスト戦略
[DevOpsDays Tokyo 2024] 〜デジタルとアナログのはざまに〜 スマートビルディング爆速開発を支える 自動化テスト戦略
 
スマートフォンを用いた新生児あやし動作の教示システム
スマートフォンを用いた新生児あやし動作の教示システムスマートフォンを用いた新生児あやし動作の教示システム
スマートフォンを用いた新生児あやし動作の教示システム
 
論文紹介:Content-Aware Token Sharing for Efficient Semantic Segmentation With Vis...
論文紹介:Content-Aware Token Sharing for Efficient Semantic Segmentation With Vis...論文紹介:Content-Aware Token Sharing for Efficient Semantic Segmentation With Vis...
論文紹介:Content-Aware Token Sharing for Efficient Semantic Segmentation With Vis...
 
論文紹介:Automated Classification of Model Errors on ImageNet
論文紹介:Automated Classification of Model Errors on ImageNet論文紹介:Automated Classification of Model Errors on ImageNet
論文紹介:Automated Classification of Model Errors on ImageNet
 
TSAL operation mechanism and circuit diagram.pdf
TSAL operation mechanism and circuit diagram.pdfTSAL operation mechanism and circuit diagram.pdf
TSAL operation mechanism and circuit diagram.pdf
 
Open Source UN-Conference 2024 Kawagoe - 独自OS「DaisyOS GB」の紹介
Open Source UN-Conference 2024 Kawagoe - 独自OS「DaisyOS GB」の紹介Open Source UN-Conference 2024 Kawagoe - 独自OS「DaisyOS GB」の紹介
Open Source UN-Conference 2024 Kawagoe - 独自OS「DaisyOS GB」の紹介
 
Postman LT Fukuoka_Quick Prototype_By Daniel
Postman LT Fukuoka_Quick Prototype_By DanielPostman LT Fukuoka_Quick Prototype_By Daniel
Postman LT Fukuoka_Quick Prototype_By Daniel
 
【早稲田AI研究会 講義資料】3DスキャンとTextTo3Dのツールを知ろう!(Vol.1)
【早稲田AI研究会 講義資料】3DスキャンとTextTo3Dのツールを知ろう!(Vol.1)【早稲田AI研究会 講義資料】3DスキャンとTextTo3Dのツールを知ろう!(Vol.1)
【早稲田AI研究会 講義資料】3DスキャンとTextTo3Dのツールを知ろう!(Vol.1)
 
SOPを理解する 2024/04/19 の勉強会で発表されたものです
SOPを理解する       2024/04/19 の勉強会で発表されたものですSOPを理解する       2024/04/19 の勉強会で発表されたものです
SOPを理解する 2024/04/19 の勉強会で発表されたものです
 
論文紹介:Semantic segmentation using Vision Transformers: A survey
論文紹介:Semantic segmentation using Vision Transformers: A survey論文紹介:Semantic segmentation using Vision Transformers: A survey
論文紹介:Semantic segmentation using Vision Transformers: A survey
 

Kyoto Tycoon Guide in Japanese

  • 1. Kyoto Tycoon導入ガイド FAL Labs http://fallabs.com/ mailto:info@fallabs.com
  • 3. 製品コンセプト ● 軽量データベースサーバ ● 軽量 – 関係演算を省略 → "Key Value Store" – クエリ言語も省略 → "NoSQL" ● 高性能 – 数万クライアント同時接続 – 秒間数10万リクエスト処理 – Kyoto Cabinet内蔵 ● 永続的キャッシュサーバ ● memcachedの永続化 – ファイルDBに記録 → 再起動や移設が可能 ● 耐障害性(HA)機能搭載 – ホットバックアップ、更新ログ、レプリケーション
  • 4. 基本機能 ● 連想配列 ● key-value構造 – ハッシュ表系:キーの完全一致で操作 – B+木系:キーの完全一致や範囲一致で操作 ● set, remove, get, increment, cas, clear, ... ● 時限削除 ● 各レコードにexpiration time(xt)を設定 ● xtを過ぎたレコードは勝手に消える – DBサイズを一定に保てる ● クライアント/サーバ方式 ● TCP(HTTP)で通信 – IDC内での利用を想定。セキュリティ機能は省略 ● 複数プロセス、複数マシンで単一DBを共有 – KC単体では不可能
  • 5. 主想定ユースケース ● memcachedの代替 ● リアルタイム性に加えて永続性が欲しい – Webサービスのセッションストレージ – アクセスカウンタ、足あと ● オンメモリでも、メモリ使用量を減らしたい – 小さいレコードなら60%くらいに削減 ● キャッシュでも落ちるとRDBMS側が詰まって困る – レプリケーション&スナップショット付きのmemcachedとして ● RDBMSの補助 ● 関係演算が必要なく、キーの完全一致でよい場合 – ソーシャルグラフやレコメンド等の非正規化データ – ログ等の「write=99% & read=バッチ」なデータ – ただし、InnoDBも十分高速。 cf. HandlerSocket
  • 6. プロトコル ● HTTP ● 全主要言語でクライアントライブラリ利用可能 ● 監視やロードバランスなど既存機構を流用可能 ● サーバの実装や保守が楽。拡張も容易 ● 冗長なので通信量は大きい → IDC利用ならOK ● パーザも非効率 → ボトルネックじゃないならOK ● その他 ● 一部コマンドはバイナリプロトコルもサポート – バルク操作の効率化 – noreplyによるレイテンシ削減 ● memcachedプラグイン – 既存アプリを変更せずにマイグレーション
  • 7. HTTPの例 RPC方式でレコードを格納 RPC方式でレコードを検索 POST /rpc/set HTTP/1.1 POST /rpc/get HTTP/1.1 Content-Length: 22 Content-Length: 10 Content-Type: text/tab-separated-values Content-Type: text/tab-separated-values key japan key japan value tokyo HTTP/1.1 200 OK HTTP/1.1 200 OK Content-Length: 12 Content-Length: 0 Content-Type: text/tab-separated-values value tokyo RESTful方式でレコードを格納 RESTful方式でレコードを検索 PUT /japan HTTP/1.1 GET /japan HTTP/1.1 Content-Length: 5 Content-Type: application/octet-stream HTTP/1.1 200 OK Content-Length: 5 tokyo Content-Type: application/octet-stream HTTP/1.1 201 Created tokyo Content-Length: 0
  • 8. 性能 ● パフォーマンス(レイテンシ) ● 典型的にはTCPの1パケットのRTTに依存 – ローカルでも早くて0.1ms(10000qps)程度 – レイテンシに限定して考えれば、1パケットに収まればプロ トコルは多少冗長でも許容範囲 ● スループット ● ネットワーク層とDB層の総合力 – epoll/kqueue利用により、同時接続1万以上でもOK – DBが十分に早ければ10万qps以上 – バルク操作で100万qps以上 ● DB層(KC)の性能は規模とアクセスパターンに依存 – ファイルシステムキャッシュに乗る規模なら100万qps以上 – 乗らない規模なら、ストレージデバイス(HDD/SSD)に依存
  • 9. ネットワーク層の構成 listen register the server socket accept Event Notifier detect new Task Queue connection deposit observed objects observed events queue undo add wait signal condition variable withdraw wait notified objects notified events consume each request signal process worker thread register a request from a client process signal worker thread process each request reuse or discard the connection process signal worker thread
  • 10. API ● コアAPI ● C++によるクライアントライブラリ ● HTTPまたはバイナリプロトコル ● RemoteDB(クライアント層)とTimedDB(サーバ層) ● コマンドラインツールも標準添付 ● 各種スクリプト言語 ● 開発は各言語の有志に委任 – Perl: http://search.cpan.org/~tokuhirom/Cache-KyotoTycoon-0.09/ – PHP: http://openpear.org/package/Net_KyotoTycoon – Ruby: https://github.com/uu59/kyototycoon-ruby – Python: https://github.com/tmaesaka/python-kyototycoon – node.js: https://github.com/swdyh/node-kyoto-tycoon ● それ以外の環境では、RESTfulインターフェイスかmemcachedクラ イアントを推奨 – 既存のHTTP/memcachedクライアントライブラリで利用可能
  • 11. コンポーネント構成 applications applications database client database client database server database server Lua processor Lua processor TSV-RPC client TSV-RPC client TSV-RPC server TSV-RPC server HTTP client HTTP client HTTP server HTTP server client socket client socket threaded TCP server threaded TCP server networking utilities networking utilities server socket server socket event notifier event notifier Kyoto Cabinet (database, threading utilities) Kyoto Cabinet (database, threading utilities) Operating Systems (POSIX, Win32) Operating Systems (POSIX, Win32) C++03 && TR1 libs C++03 TR1 libs
  • 12. 付加価値 ● KCの機能性を継承 ● 9種のDB型を選択。複数DBの同時起動 ● Visitor、カーソル、トランザクション、正規表 現、MapReduceなどなど ● HA機能群 ● ホットバックアップ = 無停止でバックアップ作成 ● 更新ログ = 「行レベル」の更新情報を随時記録 ● 非同期レプリケーション – 更新ログの他サーバへの転送と即時再生 – デュアルマスタもサポート ● スクリプト言語拡張 ● Lua言語処理系を内蔵(オプション) ● 任意のユーザ定義操作を実装可能
  • 13. 9種のデータベース型 class name persistence algorithm complexity sequence lock unit ProtoHashDB volatile hash table O(1) undefined whole (rwlock) ProtoTreeDB volatile red black tree O(log N) lexical order whole (rwlock) StashDB volatile hash table O(1) undefined record (rwlock) CacheDB volatile hash table O(1) undefined record (mutex) GrassDB volatile B+ tree O(log N) custom order page (rwlock) HashDB persistent hash table O(1) undefined record (rwlock) TreeDB persistent B+ tree O(log N) custom order page (rwlock) DirDB persistent undefined undefined undefined record (rwlock) ForestDB persistent B+ tree O(log N) custom order page (rwlock)
  • 14. レプリケーションの構成例 master server master server (active) (standby) database database client update update logs logs load balancing two way replication (dual-master) slave servers slave servers slave servers slave servers database database database one way replication database (master-slave)
  • 15. プラガブルモジュール ● 共有ライブラリによる動的機能追加 ● サーバ起動時に任意のsoファイルをロード ● プラガブルサーバ ● 任意のプロトコルを追加可能 – memcachedプラグイン標準添付 ● 既存のmemcachedアプリから無変更でマイグレーション可能 – 有志がMessagePack-RPCプラグインを公開 ● プラガブルデータベース ● 任意のストレージを追加可能 – ボイドデータベースプラグイン標準添付 ● no-opなマスタでレプリケーションを効率化 – Tokyo Cabinet、Berkeley DB、LevelDBなど搭載可能
  • 16. プラガブルモジュール構成 Kyoto Tycoon server process Lua plug-in script Lua processor PolyDB HTTP ProtoHashDB ProtoTreeDB client server StashDB pluggable CacheDB GrassDB shared server library shared HashDB TreeDB library plug-in DirDB ForestDB pluggable database plug-in slave server update logger slave agent
  • 17. ライセンス ● KCとKTはGPL製品だが…、 典型的なWebサービス企業では商用ライセンスは不要 ● KT/KCの改変も再配布もしないから – IDC内での利用は配布にあたらない  cf. AGPL ● ネットワーク的に通信するクライアントはそもそもKC/KTとリン クしないから – 各クライアントライブラリのライセンスのみに影響される ● Web屋さんから金を取らないとの割り切り ● MySQLを真似たデュアルライセンスビジネス – Web屋さんに使ってもらうと大いに宣伝になる – もし役に立ったら、ブログ等に書いていただけると幸い ● KCの商用ライセンス販売中 ● インストール本数無限、利用目的無制限、無期限の包括契約 ● 年間売上高3億円未満の企業は100万円、それ以上は応相談
  • 18. まとめ ● 永続的キャッシュサーバ ● 高機能なmemcachedとして ● 軽量データベースサーバ ● RDBMSの補助として ● プロトコル ● HTTPとバイナリとユーザ定義 ● 性能 ● 数万クライアント同時接続&10万QPSでもOK ● 付加価値 ● 各種API、9種のDB型、カーソル等、HA機能群 ● スクリプト言語拡張、プラガブルモジュール ● ライセンス ● GPL+商用のデュアル。再配布しなければ商用ライセンス不要。
  • 19. 参考資料 ● 公式サイト ● http://fallabs.com/kyototycoon/ ● まずは、基本仕様書 ● doc/spex.html ● チュートリアルとTIPSを読めばだいたい分かる ● コマンドライン仕様書 ● doc/command.html ● ktserverとktremotemgrとkttimedmgrだけ読めばOK ● API文書 ● doc/api/index.html ● KT自体に興味がある場合にどうぞ ● KCの基本仕様書 ● KCの、doc/spex.html ● データベースチューニングに関してはこちら ● 開発者のブログ ● http://fallabs.com/blog/promenade.cgi?act=search ● 最新の情報はこちら
  • 21. インストール ● 要件 ● Linux 2.6以上かMac OS X 10.6以上 – 新しめのFreeBSDでも多分OK。Solarisでも多分OKだが、selectなので遅い – Windowsは現状では未対応 ● GCC 4.2.1以上 – C++標準ライブラリTR1の関係上、4.1系だと無理 ● zlib 1.2.3以上 – zlibをバイナリパッケージで入れる場合、zlib-develなどでヘッダファイルも入れること ● KCのインストール ● ./configure ; make ; sudo make install ● KTのインストール ● ./configure ; make ; sudo make install ● 注意点 ● debやrpmのパッケージは古いかも。最新版のソースパッケージ推奨。 ● デフォルトだとプログラム群は/usr/local以下にインストールされるの で、LD_LIBRARY_PATH(MacだとDYLD_LIBRARY_PATH)に/usr/local/libを含めること ● KCのLZMA圧縮オプションやLZO圧縮オプションが必要なら、それらのライブラリを入れた 上で、--enable-lzmaや--enable-lzoをつける ● KTのLua拡張が必要なら、Luaを入れた上で、--enable-luaをつける
  • 22. コマンドラインツール ● ktserver ● サーバ用のコマンド ● サーバを起動する – デーモンにもなれる – daemontools等を使ってもOK ● シグナルを送って停止 – 端末からCtrl-Cを入力するか、kill系コマンドを実行 ● ktremotemgr ● クライアント用のコマンド ● コアAPIを使ってサーバにコマンドを投げる ● kttimedmgr ● サーバ側でDBを管理するコマンドだが、あまり使わない ● ktserverを停止させた状態で利用
  • 23. ktserverの実行 ● 引数でDB名を指定。複数指定可能 ● ktserver red.kch blue.kch yellow.kch – 3つのファイルDBを開いて起動 ● DB名を指定しない場合はデフォルト設定のオンメモリDBを開く ● DB名の拡張子はKCのPolyDBの命名規則に従う ● ネットワーク設定 ● ktserver -host localhost -port 2001 – ループバックからのみ接続可能な2001番を開く ● デフォルトは全NICの1978番を開く ● ログ設定 ● ktserver -log hoge -ls – hogeというファイルにシステムレベルのログのみを書く ● デフォルトは全種類のログを標準出力に表示
  • 24. DBの命名規則 ● 記号か拡張子でDBの種類が決まる ● ":":スタッシュDB(デフォルト、省メモリDB) ● "*":オンメモリハッシュDB ● "%":オンメモリツリーDB ● ".kch":ファイルハッシュDB ● ".kct":ファイルツリーDB ● ".kcd":ディレクトリハッシュDB ● ".kcf":ディレクトリツリーDB ● "#" でつなげてチューニングパラメータを書く ● "casket.kch#bnum=1000000#msiz=8g" – 100万バケット、8GBのマップメモリを指定 ● 数値には"k", "m", "g" などの単位指定も可
  • 25. 軽くいじってみよう ● サーバ起動 ● ktserver casket.kch – なんかログがだらだら出るはず ● クライアント環境からレコードの投入 ● ktremotemgr set tako ika ● ktremotemgr set uni kani ● クライアント環境からレコードの検索 ● ktremotemgr get tako ● サーバの停止 ● サーバの端末でCtrl-C入力 ● サーバ側管理ツールでDBの内容を確認 ● kttimedmgr list -pv casket.kch
  • 26. 時限削除 ● レコード挿入時に削除時刻(xt)を指定 ● set("tako", "ika", 3600) – 現在時刻から1時間後に削除 ● set("tako", "ika", -1234567890) – UNIX時間が1234567890の時に削除 ● 遅延削除 ● get等の際にxtを過ぎたものは非存在とみなす – countメソッドの戻り値には誤差 ● 各種操作でカウンタを上げ、一定になった時にGC発動 – DB内を部分的にスキャンして、非存在領域を本当に削除 – 記憶領域の断片化を防ぐために、自動デフラグの併用を推奨 – 操作が行われないidle時間にもGCを実行 ● 容量制限 ● 時限削除だけでDBサイズが一定に保てない時のワークアラウンド – キャッシュDBの場合:ストレージ層のLRU削除機能。「#capsiz=...」 – それ以外のDBの場合:サーバ層の強制GC機能。「#ktcapsiz=...」
  • 27. シグナル駆動処理 ● 名前付きシグナル ● 全てのRPCは処理前に任意の名前のシグナルを待てる ● 全てのRPCは処理後に任意の名前のシグナルを送れる ● ライタとリーダの明示的協調処理 ● ライタはシグナル送信設定を伴う – db.set_signal_sending("hello", true); – db.set("hello", "world"); ● リーダはシグナル待機設定を伴う – db.set_signal_waiting("hello", 60) – db.get("hello", &result); ※ 実際のAPIはクライアントライブラリ毎に異なる ● ジョブキュー ● B+系のDBを用いて、タイムスタンプを各レコードのキーにする – そうするとタイムスタンプ順にレコードが並ぶ ● ライタはジョブを書きこんでシグナル送信 ● リーダはシグナルを受信して先頭レコードを取り出して処理
  • 28. デーモン化 ● -dmnオプションでデーモン化 ● ktserver -dmn -pid /var/kt/pid – PIDファイルを/var/kt/pidとして指定してデーモン化 ● PIDファイルにプロセスIDが書かれる – 停止する時はそのIDを読んでシグナルを飛ばす ● カレントディレクトリが / になるので、コマンドに現れる全てのパス は絶対パスで書くこと ● シグナル ● SIGTERMかSIGINTで停止 ● デーモンにSIGHUPを送るとサーバが再起動 – DBを開き直すわけではないので、オンメモリDBの内容は消えない ● ログローテート ● デフォルトではログは単一ファイルに延々と追記 ● 書き込み中のログファイルをmvなどで別名に変更 ● SIGHUPを送って再起動すると、書き込み先が元のファイルに戻る
  • 29. ホットバックアップ ● バックアップ作成用スクリプトの準備 ● /ktbin/dbbackup として保存 #! /bin/sh ● 引数はDB名とタイムスタンプ srcfile="$1" ● 起動時にパスを通す destfile="$1.$2" cp -f "$srcfile" ● ktserver -cmd /ktbin ... "$destfile" ● syncコマンドで呼び出す ● ktremotemgr sync -cmd dbbackup ● サーバ側にバックアップファイルができる ● casket.kch.1234567890123456789 などのファイル名 – 数字部分はタイムスタンプ ● バックアップ作成中は更新系クエリはブロックされる ● DB全体の整合性を保証。参照系クエリはブロックされない ● OSのスナップショット機能でバックアップするのも妙案
  • 30. 更新ログ ● バックアップファイルからのリストアの問題点 ● バックアップ時点のデータしか復元できない ● 更新ログにより補完 ● バックアップファイルに更新ログを適用してリカバー ● DBが最新状態に復元できることを保証 ● 時限削除による更新は更新ログに残らないが、時限削除時刻は更新ログの値に含む ● -ulogオプションで更新ログを有効化 ● ktserver -ulog 0001-ulog -sid 1 ... ● 更新ログの置き場のディレクトリを指定。デフォルトでは256MB毎にローテート ● サーバIDを数値で指定 ● バックアップファイルへの更新ログの適用 ● mv casket.kch.1234567890123456789 casket.kch ● kttimedmgr recover -ts 1234567890123456789 casket.kch ● ktserverが止まった状態で実行し、その後、casket.kchを指定してktserverを起動 ● 古い更新ログファイルの削除 ● 各ファイルのタイムスタンプは、ktremotemgr slave -uf で確認 ● 削除する最大タイムスタンプを指定し、ktremotemgr slave -ur -ts xxxx を実行
  • 31. 非同期レプリケーション ● バックアップ+更新ログの問題点 ● 最新の更新ログは稼働サーバ上から移せず、HDDの故障は即データ損失 ● 非同期レプリケーション ● 更新ログを別サーバ(スレーブ)に送ってすぐに再生 ● スレーブが元サーバ(マスタ)から更新ログをpullする ● マスタの設定 ● ktserver -ulog 0001-ulog -sid 1 ... ● 更新ログをとる ● スレーブの設定 ● ktserver -mhost serv1 -rts 2.rts -riv 0.04 ... ● マスタとタイムスタンプファイルと取得間隔を指定 ● スレーブを複数台設置して負荷分散してもよい ● デュアルマスタ ● マスタを二つ設置して、相互にスレーブとなるように設定 ● それぞれ、サーバIDをユニークにすること ● 更新操作はどちらかのサーバに集約させること
  • 32. バックグラウンドスナップショット ● オンメモリDBの特性 ● サーバプロセスが終われば全てのレコードが消える ● 実メモリに乗るデータ規模で利用可能 ● 圧倒的に高速 ● スナップショットによる永続化 ● 定期的およびサーバ終了時にオンメモリDB内の全レコードをファイルに記録 ● 次回起動時に上記ファイルを読み込んでDBの状態を復元 ● 正常終了時には最新の、不慮の終了時には最後の定期スナップショット時の状態に復元 ● スナップショット作成はforkした子プロセスが実行 – forkした瞬間のメモリ状態をcopy-on-writeで維持 – スナップショット作成中も親プロセスの処理はブロックしない ● -bgsオプションで自動スナップショットを有効化 ● ktserver -bgs /var/kt/ss -bgsi 180 ... ● 保存先のディレクトリを指定 ● 180秒毎にスナップショットを自動作成 ● -bgsc zlib/lzo/lzma でオンザフライ圧縮も可能。lzoがオススメ ● レプリケーションのスレーブ増設に使える ● kttimedmgr bgsinform /var/kt/ss で得たタイムスタンプをRTSファイルとして用いる
  • 33. DB設定例:普通のキャッシュサーバ ● 前提 ● memcachedのような省メモリなキャッシュサーバが欲しい ● だいたい1000万レコードを保持予定 ● キャッシュ用にメモリ10GB利用 – マシンの搭載メモリ16GBなら10GBくらいまで使える ● 設定 ● ktserver ... ':#bnum=20000000#ktcapsiz=10g' ● 最も省メモリなスタッシュDBを利用 ● バケット数はレコード数の2倍で2000万 ● 最大メモリ使用量を10GBに指定 – 実際の物理メモリ使用量(RSS)は指定値より大きくなる – サイズ制限を越えると、GCが無作為にレコードを削除 ● サイズ制限に到達しないようにアプリ側でxtを制御すべき ● サイズ制限はスワップを防ぐための保険的な位置づけ – LRU削除が必要なら、'*:#bnum=2000000#capsiz=8g' とする
  • 34. DB設定例:永続的キャッシュサーバ ● 前提 ● memcachedのようだが永続化したキャッシュサーバが欲しい ● だいたい1000万レコードを保持予定 ● メモリマップ用にメモリ12GB利用 – マシンの搭載メモリ16GBなら12GBくらいまで使える ● 設定 ● ktserver ... 'casket.kch#opts=l#bnum=2000000#msiz=12g#dfunit=8' ● ファイルハッシュDBを利用 ● 線形オプションを指定 – バケット数がきちんと設定できればデフォルトの二分探索木は不要 ● バケット数はレコード数の2倍で2000万 ● メモリマップサイズを12GBに指定 ● 動的デフラグ単位を8に指定
  • 35. DB設定例:メタデータサーバ ● 前提 ● データを永続化し、時限削除は利用しない ● だいたい1000万レコードを保持予定 ● メモリマップ用にメモリ12GB利用 – マシンの搭載メモリ16GBなら12GBくらいまで使える ● 設定 ● ktserver ... 'casket.kch#opts=l#bnum=2000000#msiz=12g#dfunit=8#ktopts=p' ● ファイルハッシュDBを利用 ● 線形オプションを指定 – バケット数がきちんと設定できればデフォルトの二分探索木は不要 ● バケット数はレコード数の2倍で2000万 ● メモリマップサイズを12GBに指定 ● 動的デフラグ単位を8に指定 ● 永続化オプションにより、時刻情報の保持を省略し、GCを抑制 – CPU使用率がかなり下がるのでぜひ付けたほうがいい
  • 36. サーバ設定例:memcachedプロトコル ● 前提 ● memcachedを使った既存のアプリでKTを使いたい ● アプリケーションは一切変更したくない ● 設定 ● ktserver ... -th 1 -plsv /usr/local/libexec/ktplugservmemc.so -plex "opts=f" ... ● コアサーバのスレッド数を1に抑制 ● memcachedプラグインをロード ● プラグイン設定文字列でflags対応オプションを指定 – HTTPでレコードを読むとゴミが入る
  • 37. サーバ設定例:memcachedジョブキュー ● 前提 ● memcachedプロトコルでジョブキューが使いたい ● 各レコードをキューに見立てて複数のキューを同時に扱いたい ● 空のキューをgetするとブロックし、新しいジョブが来たら即座に処理を再開 したい。 ● 設定 ● ktserver ... -th 1 -plsv /usr/local/libexec/ktplugservmemc.so -plex "opts=qf" "casket.kct#ktopt=p" ● キューオプションとflagsオプションを指定 ● ファイルツリーDBを永続オプション付きで指定 ● ジョブ依頼側クライアント ● ジョブ名をキー、ジョブデータを値に指定してset ● ジョブワーカ側コード ● ジョブ名をキーにしてget。値が取得できたら、ジョブを実行。 ● ジョブが成功したら、同じキーでdelete。 – もしdeleteしないで接続を切ると、サーバ側で暗黙的にジョブが復活。
  • 38. サーバ設定例:ボイドデータベース ● 前提 ● 表示用データを多数のスレーブで分散したい ● 更新が激しいのでマスタは空に保ちたい ● 設定 ● ktserver ... -ulog 0001-ulog -sid 1 -pldb /usr/local/libexec/ktplugdbvoid.so ... ● 更新ログをとる ● ボイドデータベースプラグインをロード ● 上記サーバに多数のスレーブをつなげる – スレーブでは通常のデータベースを用いる
  • 39. サーバ設定例:スレーブエージェント ● 前提 ● KTからKT以外のストレージにレプリケーションしたい ● KTのスレーブとして動作して任意の処理を適用 ● マスタから吸い出した更新ログをパイプで受け取って後処理を行うスクリプトを実装 ● マスタを起動 ● ktserver ... -ulog 0001-ulog -sid 1 ... ● スレーブエージェントを起動 ● ktremotemgr slave -ts 1234567890123456 -uw | yourcommand ● 前回取得した最後のタイムスタンプを指定 ● 最新データを待ち続ける-uwオプション ● 後処理コマンドは任意の実装 ● 各更新ログを改行で区切って以下のフィールドを持つTSVデータを読む – タイムスタンプ、サーバID、DB番号、コマンド名、Base64データのリスト – コマンド名は、setかremoveかclear – setの値の先頭5バイトはビッグエンディアンのexpiration date ● 読んだ更新ログのタイムスタンプをファイルに格納し、次回起動時に指定 ● デュアルマスタの各々で別のエージェントを起動する場合、-sidと-uxをつけて、自分 の更新のみを扱うようにする
  • 40. サーバ設定例:デュアルマスタ ● host1でアクティブマスタ、host2でスタンバイマスタ起動 ● ktserver ... -ulog /path/to/ulog -sid 1 -mhost host2 -rts /path/to/rts casket.kch ● ktserver ... -ulog /path/to/ulog -sid 2 -mhost host1 -rts /path/to/rts casket.kch ● 更新ログ、サーバID、マスタのホスト名、RTSファイルを指定 ● 定期的にホットバックアップを作成 ● ktremovemgr sync -host host2 -cmd mybackup.sh ● バックアップ作成はスタンバイマスタで行うと、更新操作のブ ロックを気にしなくて済む ● 作成したデータベースファイルとタイムスタンプファイルを別 サーバに退避 ● バックアップのタイムスタンプ以前の更新ログは消してよい – ktremogemgr slave -ur -ts ...
  • 41. デュアルマスタの障害対応 ● host1(アクティブマスタ)が落ちた場合 ● host2をアクティブマスタとし、全クライアントの接続先をhost2に変更 ● 直近のバックアップにおけるデータベースファイルとタイムスタンプファイ ルをhost3に転送 ● host1と同じコマンドでhost3にてスタンバイマスタ起動 ● host2のマスタをhost3に変更 – ktremotemgr tunerepl -host host2 -ts now host3 ● host3のレプリケーション遅延がなくなったら、必要に応じて接続先を戻す – レプリケーション遅延は、ktremotemgr report -host host3 で確認 – host2をアクティブマスタとして使いつづけた方が楽かも ● host2(スタンバイマスタ)が落ちた場合 ● 直近のバックアップにおけるデータベースファイルとタイムスタンプファイ ルをhost3に転送 ● host2と同じコマンドでhost3にてスタンバイマスタ起動 ● host1のマスタをhost3に変更 – ktremotemgr tunerepl -host host1 -ts now host3