Successfully reported this slideshow.
We use your LinkedIn profile and activity data to personalize ads and to show you more relevant ads. You can change your ad preferences anytime.
13th
Dec, 2013

Fluentd as a Middleware Engine
MySQLのテーブルをElasticsearchへレプリケートする話
Kentaro Yoshida at Fluentd Casual Talks ...
MySQLのテーブルを
Elasticsearchにレプリケート…?

page 2
それをFluentdで!?

page 3
はい、作ってみました。
その名は Yamabiko です。

page 4
1. Yamabikoとは

本日の流れ

2. 自己紹介
3. 活用方法
4. まとめ

page 5
1. Yamabikoとは

page 6
Yamabikoとは

https://github.com/y-ken/yamabiko
page 7
Yamabikoのコアプラグイン

https://github.com/y-ken/fluent-plugin-mysql-replicator
page 8
Yamabikoの機能概要
Fluentd (td-agent) をコアエンジンに利用
出力のバッファリングやリトライ機構などを任せられる
Fluentd + fluent-plugin-mysql-replicatorをデーモン化したもの
My...
Elasticsearchとは
Luceneベースの検索エンジン(SolrもLuceneベース)
MySQLが苦手とするファセット検索等も当然対応している
日本語全文検索にも対応(kuromoji)
GitHub・stackoverflow・PA...
Yamabikoの挙動
mysql> create database myweb;
mysql> create table search_test (
id int auto_increment,
text text,
PRIMARY KEY ...
Yamabikoの挙動
# query
insert into search_test(text) values('aaa');
# notify event to fluentd
# format: replicator.${db}.${ta...
Yamabikoの挙動
# query
update search_test set text='bbb' where text = 'aaa';
# notify event to fluentd
tag:
replicator.myweb....
Yamabikoの挙動
# query
delete from search_test where text='bbb';
# notify event to fluentd
tag:
replicator.myweb.search_test....
2. 自己紹介

page 15
自己紹介
• よしけんさん
• @yoshi_ken
• (株)リブセンス
• Web系インフラの

研究開発エンジニア
• Fluentd歴
好きなプロダクト

page 16

2012/4月∼
page 17
3. 活用方法

page 18
インストール
手元のfluentd環境への導入
$ gem install fluent-plugin-mysql-replicator
既存のFluentdとは独立した Yamabiko としての導入
github.com/y-ken/yamab...
設定サンプル
<source>
type mysql_replicator
host localhost
username your_mysql_user
password your_mysql_password
database myweb
...
設定サンプル
<source>
type mysql_replicator_multi
manager_host localhost
manager_username your_mysql_user
manager_password your_...
設定サンプル
<match replicator.**>
type mysql_replicator_elasticsearch
host localhost
port 9200
flush_interval 5s
flush_at_shutd...
運用実績
テーブル数
28テーブル
総行数
約800万行
総容量
約4GB

page 23

Yamabiko稼働サーバ
KVMの仮想マシン
CPU 1コア
メモリ1GB
取り分は50MB程度
6. まとめ

page 24
まとめ
github.com/y-ken/fluent-plugin-mysql-replicator
MySQLのレコードを非同期にElasticsearchに転送するプラグイン。
github.com/y-ken/yamabiko
Fluen...
Yamabiko
[やまびこ]

https://github.com/y-ken/yamabiko

page 26
We’re hiring!
お知らせ
Thanks!
ご清聴ありがとうございました。

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

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

6,937 views

Published on

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

Published in: Technology
  • Be the first to comment

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

  1. 1. 13th Dec, 2013 Fluentd as a Middleware Engine MySQLのテーブルをElasticsearchへレプリケートする話 Kentaro Yoshida at Fluentd Casual Talks #3 page 1
  2. 2. MySQLのテーブルを Elasticsearchにレプリケート…? page 2
  3. 3. それをFluentdで!? page 3
  4. 4. はい、作ってみました。 その名は Yamabiko です。 page 4
  5. 5. 1. Yamabikoとは 本日の流れ 2. 自己紹介 3. 活用方法 4. まとめ page 5
  6. 6. 1. Yamabikoとは page 6
  7. 7. Yamabikoとは https://github.com/y-ken/yamabiko page 7
  8. 8. Yamabikoのコアプラグイン https://github.com/y-ken/fluent-plugin-mysql-replicator page 8
  9. 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. 10. Elasticsearchとは Luceneベースの検索エンジン(SolrもLuceneベース) MySQLが苦手とするファセット検索等も当然対応している 日本語全文検索にも対応(kuromoji) GitHub・stackoverflow・PATH・foursquareなどが採用 マルチテナント・スキーマレス・RestfulAPIがアツい 複数ノードを利用した高速な分散検索も可能 RPMコマンドで簡単にインストール可能 page 10
  11. 11. Yamabikoの挙動 mysql> create database myweb; mysql> create table search_test ( id int auto_increment, text text, PRIMARY KEY (id) ); page 11
  12. 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. 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. 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. 15. 2. 自己紹介 page 15
  16. 16. 自己紹介 • よしけんさん • @yoshi_ken • (株)リブセンス • Web系インフラの 研究開発エンジニア • Fluentd歴 好きなプロダクト page 16 2012/4月∼
  17. 17. page 17
  18. 18. 3. 活用方法 page 18
  19. 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. 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. 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. 22. 設定サンプル <match replicator.**> type mysql_replicator_elasticsearch host localhost port 9200 flush_interval 5s flush_at_shutdown yes </match> page 22
  23. 23. 運用実績 テーブル数 28テーブル 総行数 約800万行 総容量 約4GB page 23 Yamabiko稼働サーバ KVMの仮想マシン CPU 1コア メモリ1GB 取り分は50MB程度
  24. 24. 6. まとめ page 24
  25. 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. 26. Yamabiko [やまびこ] https://github.com/y-ken/yamabiko page 26
  27. 27. We’re hiring!
  28. 28. お知らせ
  29. 29. Thanks! ご清聴ありがとうございました。 page 34

×