• Like
Fluentdベースのミドルウェア"Yamabiko"でMySQLのテーブルをElasticsearchへレプリケートする話 #fluentdcasual
Upcoming SlideShare
Loading in...5
×

Fluentdベースのミドルウェア"Yamabiko"でMySQLのテーブルをElasticsearchへレプリケートする話 #fluentdcasual

  • 3,595 views
Uploaded on

Fluentd Casual Talks #3にて発表した資料の増補版です。

Fluentd Casual Talks #3にて発表した資料の増補版です。

More in: Technology
  • Full Name Full Name Comment goes here.
    Are you sure you want to
    Your message goes here
    Be the first to comment
No Downloads

Views

Total Views
3,595
On Slideshare
0
From Embeds
0
Number of Embeds
9

Actions

Shares
Downloads
8
Comments
0
Likes
12

Embeds 0

No embeds

Report content

Flagged as inappropriate Flag as inappropriate
Flag as inappropriate

Select your reason for flagging this presentation as inappropriate.

Cancel
    No notes for slide

Transcript

  • 1. 13th Dec, 2013 Fluentd as a Middleware Engine MySQLのテーブルをElasticsearchへレプリケートする話 Kentaro Yoshida at Fluentd Casual Talks #3 page 1
  • 2. MySQLのテーブルを Elasticsearchにレプリケート…? page 2
  • 3. それをFluentdで!? page 3
  • 4. はい、作ってみました。 その名は Yamabiko です。 page 4
  • 5. 1. Yamabikoとは 本日の流れ 2. 自己紹介 3. 活用方法 4. まとめ page 5
  • 6. 1. Yamabikoとは page 6
  • 7. Yamabikoとは https://github.com/y-ken/yamabiko page 7
  • 8. Yamabikoのコアプラグイン https://github.com/y-ken/fluent-plugin-mysql-replicator page 8
  • 9. Yamabikoの機能概要 Fluentd (td-agent) をコアエンジンに利用 出力のバッファリングやリトライ機構などを任せられる Fluentd + fluent-plugin-mysql-replicatorをデーモン化したもの MySQLから、透過的にElasticsearchへレコードの同期を行う AWS RDS・MariaDB・PerconaServer等の互換DBにも対応 任意のSQL文の結果の差分から、insert/update/deleteイベントを検知 SELECT * FROM search_test WHERE DATE_ADD(updated_at, INTERVAL 5 MINUTE) > NOW(); といったクエリで差分同期も可能 page 9
  • 10. Elasticsearchとは Luceneベースの検索エンジン(SolrもLuceneベース) MySQLが苦手とするファセット検索等も当然対応している 日本語全文検索にも対応(kuromoji) GitHub・stackoverflow・PATH・foursquareなどが採用 マルチテナント・スキーマレス・RestfulAPIがアツい 複数ノードを利用した高速な分散検索も可能 RPMコマンドで簡単にインストール可能 page 10
  • 11. Yamabikoの挙動 mysql> create database myweb; mysql> create table search_test ( id int auto_increment, text text, PRIMARY KEY (id) ); page 11
  • 12. Yamabikoの挙動 # query insert into search_test(text) values('aaa'); # notify event to fluentd # format: replicator.${db}.${table}.${event}.${pk} tag: replicator.myweb.search_test.insert.id record: {"id":"1","text":"aaa"} page 12
  • 13. Yamabikoの挙動 # query update search_test set text='bbb' where text = 'aaa'; # notify event to fluentd tag: replicator.myweb.search_test.update.id record: {"id":"1","text":"bbb"} page 13
  • 14. Yamabikoの挙動 # query delete from search_test where text='bbb'; # notify event to fluentd tag: replicator.myweb.search_test.delete.id record: {"id":"1"} page 14
  • 15. 2. 自己紹介 page 15
  • 16. 自己紹介 • よしけんさん • @yoshi_ken • (株)リブセンス • Web系インフラの 研究開発エンジニア • Fluentd歴 好きなプロダクト page 16 2012/4月∼
  • 17. page 17
  • 18. 3. 活用方法 page 18
  • 19. インストール 手元のfluentd環境への導入 $ gem install fluent-plugin-mysql-replicator 既存のFluentdとは独立した Yamabiko としての導入 github.com/y-ken/yamabiko にてRPMパッケージを配布中 詳しい設定方法は README.md にまとめています github.com/y-ken/fluent-plugin-mysql-replicator page 19
  • 20. 設定サンプル <source> type mysql_replicator host localhost username your_mysql_user password your_mysql_password database myweb query SELECT id, text, updated_at from search_test; tag replicator.myweb.search_test.${event}.$ {primary_key} </source> page 20
  • 21. 設定サンプル <source> type mysql_replicator_multi manager_host localhost manager_username your_mysql_user manager_password your_mysql_password manager_database replicator_manager tag replicator.${name}.${event}.${primary_key} </source> page 21
  • 22. 設定サンプル <match replicator.**> type mysql_replicator_elasticsearch host localhost port 9200 flush_interval 5s flush_at_shutdown yes </match> page 22
  • 23. 運用実績 テーブル数 28テーブル 総行数 約800万行 総容量 約4GB page 23 Yamabiko稼働サーバ KVMの仮想マシン CPU 1コア メモリ1GB 取り分は50MB程度
  • 24. 6. まとめ page 24
  • 25. まとめ github.com/y-ken/fluent-plugin-mysql-replicator MySQLのレコードを非同期にElasticsearchに転送するプラグイン。 github.com/y-ken/yamabiko Fluentd+上記プラグインをパッケージ化したミドルウェアであり、 既存のRubyやtd-agentと競合せずに独立して動作する。 想定ユースケース MySQLを利用したまま、Elasticsearchとの並行運用を行う。 例えばAWS RDSと組み合わせると、運用の手間を最小化した 準リアルタイムでレコードが同期される全文検索サーバが手に入る。 page 25
  • 26. Yamabiko [やまびこ] https://github.com/y-ken/yamabiko page 26
  • 27. We’re hiring!
  • 28. お知らせ
  • 29. Thanks! ご清聴ありがとうございました。 page 34