fluentdベースのミドルウェア"yamabiko"でmysqlのテーブルをelasticsearchへレプリケートする話...

35
page Dec, 2013 13th Fluentd as a Middleware Engine MySQLのテーブルをElasticsearchへレプリケートする話 Kentaro Yoshida at Fluentd Casual Talks #3 1

Upload: kentaro-yoshida

Post on 20-Jan-2015

3.713 views

Category:

Technology


3 download

DESCRIPTION

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

TRANSCRIPT

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

page

Dec, 201313th

Fluentd as a Middleware EngineMySQLのテーブルをElasticsearchへレプリケートする話

Kentaro Yoshida at Fluentd Casual Talks #3

1

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

page

MySQLのテーブルをElasticsearchにレプリケート…?

2

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

page

それをFluentdで!?

3

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

page

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

4

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

page

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

本日の流れ

5

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

page

1. Yamabikoとは

6

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

page

Yamabikoとは

7

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

���������� ����� � ����������������� ����� � ����

����������

��� �������� ��

���� ������������������ ��

�������������

���� ������������������ ��

��������

����������� �������������������

������������ !"#$���������%&'(��")*

� �� ����������+,-./0�1�2345%6789:

�������������

���

���

������������

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

page

Yamabikoのコアプラグイン

8

https://github.com/y-ken/fluent-plugin-mysql-replicator

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

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 10: Fluentdベースのミドルウェア"Yamabiko"でMySQLのテーブルをElasticsearchへレプリケートする話 #fluentdcasual

page

Elasticsearchとは

10

Luceneベースの検索エンジン(SolrもLuceneベース)

MySQLが苦手とするファセット検索等も当然対応している

日本語全文検索にも対応(kuromoji)

GitHub・stackoverflow・PATH・foursquareなどが採用

マルチテナント・スキーマレス・RestfulAPIがアツい

複数ノードを利用した高速な分散検索も可能

RPMコマンドで簡単にインストール可能

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

page

Yamabikoの挙動

11

mysql> create database myweb;

mysql> create table search_test ( id int auto_increment, text text, PRIMARY KEY (id) );

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

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 13: Fluentdベースのミドルウェア"Yamabiko"でMySQLのテーブルをElasticsearchへレプリケートする話 #fluentdcasual

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 14: Fluentdベースのミドルウェア"Yamabiko"でMySQLのテーブルをElasticsearchへレプリケートする話 #fluentdcasual

page

Yamabikoの挙動

14

# querydelete from search_test where text='bbb';

# notify event to fluentdtag: replicator.myweb.search_test.delete.idrecord: {"id":"1"}

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

page

2. 自己紹介

15

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

page

自己紹介

16

•よしけんさん•@yoshi_ken• (株)リブセンス•Web系インフラの研究開発エンジニア

• Fluentd歴 2012/4月~好きなプロダクト

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

お知らせ

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

page 18

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

page

3. 活用方法

19

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

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: Fluentdベースのミドルウェア"Yamabiko"でMySQLのテーブルをElasticsearchへレプリケートする話 #fluentdcasual

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: Fluentdベースのミドルウェア"Yamabiko"でMySQLのテーブルをElasticsearchへレプリケートする話 #fluentdcasual

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: Fluentdベースのミドルウェア"Yamabiko"でMySQLのテーブルをElasticsearchへレプリケートする話 #fluentdcasual

page

設定サンプル

23

<match replicator.**> type mysql_replicator_elasticsearch host localhost port 9200 flush_interval 5s flush_at_shutdown yes</match>

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

page

運用実績

24

テーブル数

28テーブル

総行数

約800万行

総容量

約4GB

Yamabiko稼働サーバ

KVMの仮想マシン

CPU 1コア

メモリ1GB

取り分は50MB程度

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

page

6. まとめ

25

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

page

まとめ

26

github.com/y-ken/fluent-plugin-mysql-replicatorMySQLのレコードを非同期にElasticsearchに転送するプラグイン。

github.com/y-ken/yamabikoFluentd+上記プラグインをパッケージ化したミドルウェアであり、既存のRubyやtd-agentと競合せずに独立して動作する。

想定ユースケースMySQLを利用したまま、Elasticsearchとの並行運用を行う。例えばAWS RDSと組み合わせると、運用の手間を最小化した準リアルタイムでレコードが同期される全文検索サーバが手に入る。

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

page

Yamabiko[やまびこ]

27

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

����������

��� �������� ��

���� ������������������ ��

�������������

���� ������������������ ��

��������

����������� �������������������

������������ !"#$���������%&'(��")*

� �� ����������+,-./0�1�2345%6789:

�������������

���

���

������������

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

We’re hiring!

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

お知らせ

Page 30: Fluentdベースのミドルウェア"Yamabiko"でMySQLのテーブルをElasticsearchへレプリケートする話 #fluentdcasual
Page 31: Fluentdベースのミドルウェア"Yamabiko"でMySQLのテーブルをElasticsearchへレプリケートする話 #fluentdcasual
Page 32: Fluentdベースのミドルウェア"Yamabiko"でMySQLのテーブルをElasticsearchへレプリケートする話 #fluentdcasual
Page 33: Fluentdベースのミドルウェア"Yamabiko"でMySQLのテーブルをElasticsearchへレプリケートする話 #fluentdcasual
Page 34: Fluentdベースのミドルウェア"Yamabiko"でMySQLのテーブルをElasticsearchへレプリケートする話 #fluentdcasual
Page 35: Fluentdベースのミドルウェア"Yamabiko"でMySQLのテーブルをElasticsearchへレプリケートする話 #fluentdcasual

page

Thanks!

35

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