三宅 力
chika****@gmo-m*****
2011年 9月 20日 (火) 21:47:29 JST
須藤さん アドバイスありがとうございます、三宅です。 >もし、1分程度の遅延が許されるのであれば以下のような構成はい >かがでしょうか? 要件を書き漏らしていました。すいません。 遅延はなるべく無しで、多くても10秒くらいで考えています。 ユーザーがタグ等を更新後、すぐに検索できるかチェックするためです。 solrはでなくgroongaにした理由もここにあります。 しかし、サーバープロセスを落とすというのは参考になりました。 サービスの性格上、数百万件の内1件更新ができなくても、プロセスを落とすわ けにはいけませんが、何件かたまれば落とした方がいいかもしれません。 >> この他、tritton(MySQL)なら可能であった、スレーブの追加方法も考案しなけ >> ればいけません。 >更新処理を止めた状態でデータベース一式をtarやcpでコピーし、 >それを元に構築し、その後、通常↑の構成にするのがよいのではな >いかと思いました。 ありがとうございます。 なるほど、リカバリー手順さえあれば、この方法で問題なくできそうですね。 mroongaの件もありがとうございます。 こちらも検討はしたのですが、やはり実践結果のブログ等が少ないこと、マルチ カラムインデックスが未実装?等のこともあり、二の足を踏んで一旦見送ること になりました。 とはいえ、仕組みが複雑になると運用に問題が出てきますので、場合によっては 差し替えるかもしれません。 また、質問に参るかもしれませんが、今後とも何卒よろしくお願いいたします。 うまくリプレースできましたら、また共有させていただきます。 (2011/09/19 16:29), Kouhei Sutou wrote: > 須藤です。 > > 単なるアイディアなのですが。。。 > > In<4E734****@gmo-m*****> > "[groonga-dev,00561] groongaの冗長化について" on Fri, 16 Sep 2011 21:40:24 +0900, > 三宅 力<chika****@gmo-m*****> wrote: > >> groongaの冗長化について教えていただけませんでしょうか? >> >> そこでgroonga×2〜3台の構成にしようと思いますが、どのような構成にしようか >> 非常に悩んでおります。 > > 難しいですよね。。。 > >> 2〜3台の内、1台がダウンすると整合性が合わなくなるので、現時点では、ユー >> ザーが検索対象テキストを更新時に >> >> ・クエリーログをMySQLに書き込み >> ・groonga_1に書き込み >> ・groonga_2に書き込み(失敗) >> ・失敗情報をMySQLに書き込み >> ・groonga_3に書き込み >> >> の一連の作業を同期処理で行う予定です。 >> ※MySQLの部分が単一障害点になるのは、許容しています。 >> >> 同時に、失敗情報を再度書き込みするバックエンドのプロセスも走らせます。 >> ※この時、古い情報が新しい情報を上書きしないように注意します。 > > もし、1分程度の遅延が許されるのであれば以下のような構成はい > かがでしょうか? > > ユーザ更新受け付け側: > > * クエリーログをMySQLに書き込み。 > * 定期的に古いクエリーログを削除。 > > groonga_{1,2,3}: > > * 毎分MySQLから未書き込みのクエリーログを取得しgroongaに書き込み。 > * 書き込みに失敗: > * サーバプロセスを落とす。 > (groonga_{1,2,3}の前にロードバランサーがいてサーバプロ > セスを落としたら自動的にサービスから外れるなら。) > * 書き込みに成功: > * 書き込みに成功した時刻のタイムスタンプを記録しておく。 > * サーバプロセスが落ちていたらあげる。 > >> この他、tritton(MySQL)なら可能であった、スレーブの追加方法も考案しなけ >> ればいけません。 > > 更新処理を止めた状態でデータベース一式をtarやcpでコピーし、 > それを元に構築し、その後、通常↑の構成にするのがよいのではな > いかと思いました。 > > > 書き込む側が頑張るようにすると書き込みが失敗したときに大変か > なぁと思いました。 > > >> 何か「こうすればいいよ」「このやり方が定番だよ」もしくは「groongaでなく >> てもこんな検索エンジンあるよ」というものがございましたら、ご教示いただけ >> ればと思います。 > > 実績があるというわけではないのですが。。。 > > レプリケーションはMySQLの機能を利用し、検索はgroongaを > 利用するというのはいかがでしょうか? > http://mroonga.github.com/characteristic.html#id4 > > groongaストレージエンジンというMySQLのストレージエンジンがあ > るのですが、これを使うとMySQLのインターフェイスでgroongaのデー > タベースを読み書きできます。 > > なので、通常のMySQLと同様の設定をしてgroongaのデータベースに > データを格納することができます。 > > +---- MySQLスレーブ1 > | (groongaストレージエンジン) --- groonga DB > MySQLマスター --+---- MySQLスレーブ2 > (InnoDBとか) | (groongaストレージエンジン) --- groonga DB > +---- MySQLスレーブ3 > (groongaストレージエンジン) --- groonga DB > > > ↑の中にある「groonga DB」はMySQLスレーブ{1,2,3}が動いている > 間でもgroongaコマンドでオープンすることができます。なので、 > > * データの更新: MySQL(SQL) > * 検索: groongaサーバ(HTTPなど) > > ということができるはずです。 > > -- ―――――――――――――――――――――――――――― GMOメディア株式会社 GMO Media, Inc. 事業推進室 プリキャングループ 三宅 力 Chikara Miyake 〒150-8512東京都渋谷区桜丘町26番1号セルリアンタワー Phone:03-5456-2626(代表) Fax:03-5459-6077 Mail:chika****@gmo-m***** URL:http://www.gmo-media.jp/ ―――――――――――――――――――――――――――――― 日本を代表する総合インターネットグループへ ―――――――――――――――――――――――――――――― ■ GMO INTERNET GROUP ■ http://www.gmo.jp/ ――――――――――――――――――――――――――――――