fluentdベースのミドルウェア"yamabiko"でmysqlのテーブルをelasticsearchへレプリケートする話...
DESCRIPTION
Fluentd Casual Talks #3にて発表した資料の増補版です。TRANSCRIPT
page
Dec, 201313th
Fluentd as a Middleware EngineMySQLのテーブルをElasticsearchへレプリケートする話
Kentaro Yoshida at Fluentd Casual Talks #3
1
page
MySQLのテーブルをElasticsearchにレプリケート…?
2
page
それをFluentdで!?
3
page
はい、作ってみました。その名は“Yamabiko”です。
4
page
1. Yamabikoとは2. 自己紹介3. 活用方法4. まとめ
本日の流れ
5
page
1. Yamabikoとは
6
page
Yamabikoとは
7
https://github.com/y-ken/yamabiko
���������� ����� � ����������������� ����� � ����
����������
��� �������� ��
���� ������������������ ��
�������������
���� ������������������ ��
��������
����������� �������������������
������������ !"#$���������%&'(��")*
� �� ����������+,-./0�1�2345%6789:
�������������
���
���
������������
page
Yamabikoのコアプラグイン
8
https://github.com/y-ken/fluent-plugin-mysql-replicator
page
Yamabikoの機能概要
9
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
Elasticsearchとは
10
Luceneベースの検索エンジン(SolrもLuceneベース)
MySQLが苦手とするファセット検索等も当然対応している
日本語全文検索にも対応(kuromoji)
GitHub・stackoverflow・PATH・foursquareなどが採用
マルチテナント・スキーマレス・RestfulAPIがアツい
複数ノードを利用した高速な分散検索も可能
RPMコマンドで簡単にインストール可能
page
Yamabikoの挙動
11
mysql> create database myweb;
mysql> create table search_test ( id int auto_increment, text text, PRIMARY KEY (id) );
page
Yamabikoの挙動
12
# queryinsert into search_test(text) values('aaa');
# notify event to fluentd# format: replicator.${db}.${table}.${event}.${pk}tag: replicator.myweb.search_test.insert.idrecord: {"id":"1","text":"aaa"}
page
Yamabikoの挙動
13
# queryupdate search_test set text='bbb' where text = 'aaa';
# notify event to fluentdtag: replicator.myweb.search_test.update.idrecord: {"id":"1","text":"bbb"}
page
Yamabikoの挙動
14
# querydelete from search_test where text='bbb';
# notify event to fluentdtag: replicator.myweb.search_test.delete.idrecord: {"id":"1"}
page
2. 自己紹介
15
page
自己紹介
16
•よしけんさん•@yoshi_ken• (株)リブセンス•Web系インフラの研究開発エンジニア
• Fluentd歴 2012/4月~好きなプロダクト
お知らせ
page 18
page
3. 活用方法
19
page
インストール
20
手元の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
設定サンプル
21
<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
設定サンプル
22
<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
設定サンプル
23
<match replicator.**> type mysql_replicator_elasticsearch host localhost port 9200 flush_interval 5s flush_at_shutdown yes</match>
page
運用実績
24
テーブル数
28テーブル
総行数
約800万行
総容量
約4GB
Yamabiko稼働サーバ
KVMの仮想マシン
CPU 1コア
メモリ1GB
取り分は50MB程度
page
6. まとめ
25
page
まとめ
26
github.com/y-ken/fluent-plugin-mysql-replicatorMySQLのレコードを非同期にElasticsearchに転送するプラグイン。
github.com/y-ken/yamabikoFluentd+上記プラグインをパッケージ化したミドルウェアであり、既存のRubyやtd-agentと競合せずに独立して動作する。
想定ユースケースMySQLを利用したまま、Elasticsearchとの並行運用を行う。例えばAWS RDSと組み合わせると、運用の手間を最小化した準リアルタイムでレコードが同期される全文検索サーバが手に入る。
page
Yamabiko[やまびこ]
27
https://github.com/y-ken/yamabiko���������� ����� � ����������������� ����� � ����
����������
��� �������� ��
���� ������������������ ��
�������������
���� ������������������ ��
��������
����������� �������������������
������������ !"#$���������%&'(��")*
� �� ����������+,-./0�1�2345%6789:
�������������
���
���
������������
We’re hiring!
お知らせ
page
Thanks!
35
ご清聴ありがとうございました。