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

Preview:

DESCRIPTION

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

Citation preview

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

ご清聴ありがとうございました。

Recommended