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/