[groonga-dev,01120] [ANN] fluent-plugin-groonga

アーカイブの一覧に戻る

Kouhei Sutou kou****@clear*****
2012年 11月 29日 (木) 13:30:50 JST


須藤です。

今日は年に一度のいい肉の日ですね!

ログ収集ツールfluentd(*)を使って、groongaデータベースのレプ
リケーションを行うfluent-plugin-groonga 1.0.0をリリースしま
した!
  https://github.com/groonga/fluent-plugin-groonga/

(*) http://fluentd.org/

fluentdは普通はログの収集に使いますが、ここでは、groongaのク
エリを複数のgroongaサーバーに転送するために使っています。
つまり、fluentdのメッセージルーティング機能だけを使っている
ということです。

こんな構成で動きます。

通常:

    groonga     -- GQTP --> groongaサーバー
    クライアント <-- GQTP --

  または

    HTTP        -- HTTP --> groongaサーバー
    クライアント <-- HTTP --

fluent-plugin-groongaを使った場合:

                             +--> 他のfluentd -- GQTP or HTTP -->  groongaサーバー
                             |
    groonga     -- GQTP --> fluentd  -- GQTP --> groongaサーバー
    クライアント <-- GQTP --          <-- GQTP --

  または

                             +--> 他のfluentd -- GQTP or HTTP -->  groongaサーバー
                             |
    HTTP        -- HTTP --> fluentd  -- HTTP --> groongaサーバー
    クライアント <-- HTTP --          <-- HTTP --


処理の流れは以下のようになります。

  * groongaクライアント/HTTPクライアントとgroongaサーバーの
    間に入って、クエリーを透過的に流す。
  * クエリーを透過的に流す時に、fluentdの中にもクエリーと同
    じ内容のメッセージを作成する。
  * fluentdのルーティングを使ってクエリーと同じ内容のメッセー
    ジを他のホストにコピーする。
  * コピーされたクエリーと同じ内容のメッセージをgroongaサー
    バーが解釈できる形に戻してgroongaサーバーに投げる。

○ 設定方法

まず、grppngaクライアントとgroongaサーバーの間に置くfluentd
にinputプラグインを設定します。以下の例はgroongaサーバーが
192.168.0.1:10041でlistenしているHTTPサーバーの場合です。

  <source>
    type groonga
    protocol http
    bind 127.0.0.1
    port 10041
    real_host 192.168.0.1
    real_port 10041
  </source>

メッセージのタグは「groonga.command.#{コマンド名}」になるの
で他のfluentdに転送します。(ここでcopyして複数のgroongaサー
バーに転送してもよいです。)

  <match groonga.command.*>
    type forward
    <server>
      type groonga-slave1
      host 192.168.1.1
      port 24224
    </server>
    <server>
      type groonga-slave2
      host 192.168.2.1
      port 24224
    </server>
  </match>

type forwardの説明: http://docs.fluentd.org/articles/out_forward

転送されてきたfluentdで書き込みます。以下は127.0.0.1:10041で
動いているgroongaサーバーにGQTPで書き込む例です。
(inputプラグインで受け取ったプロトコルとここで指定するプロ
トコルは異なっていても構いません。)

  <match groonga.command.*>
    type groonga
    protocol gqtp
    host 127.0.0.1
    port 10041
    flush_interval 1
  </match>

これで、1回クエリーを送るだけで複数のgroongaサーバーへクエリー
を転送できます。デフォルトではデータ更新用のクエリーだけが送
られます。selectなど読み込みだけのクエリーは転送されません。

○ 想定質問

○○ groongaにログを保存する機能はないんですか?

はい、あります。
が、なんとなく実装したものであり、ドキュメントには書いていま
せん。次のリリースではドキュメントに書く予定です。

○○ 安定しているんですか?

いいえ、そんなに安定していません。
試して問題を報告したり、必要な機能の提案をしたりなど、協力し
てくれるとすごく助かります。

○ お知らせ

さて、今日は年に一度のgroonga勉強会「全文検索エンジンgroonga
を囲む夕べ 3」が開催されます。
  http://atnd.org/events/33070

補欠の人もいるので、参加登録はしたけど来れなくなってしまった
人はキャンセルしてもらえると補欠の人も参加できて助かります!

また、今回もUStreamなどで会場にこれなくても内容がわかるような
仕組みを用意する予定です。遠方でこれない人や、補欠で入れない
人や、残念ながら体調不良でキャンセルしてしまった人はtwitter
で@groongaをチェックしていてください!
  https://twitter.com/groonga/

開場が18:30で、開演が19:00なのですが、開演前に
groonga/mroongaの開発者に直接話を聞ける場所を用意する予定で
す。直接、開発者に質問・要望できるチャンスなので、都合があう
参加者は早めに会場に来てみてください!

-- 
須藤 功平 <kou****@clear*****>
株式会社クリアコード <http://www.clear-code.com/> (03-6231-7270)

groongaサポート:
  http://groonga.org/ja/support/
パッチ採用はじめました:
  http://www.clear-code.com/recruitment/




groonga-dev メーリングリストの案内
アーカイブの一覧に戻る