MySQL on 分散FS	
〜NOSQLで構築したファイルシステム上でMySQLを動かす	

Kobe Digital Labo, Inc.
         岩瀬 高博
Twitter: @okuyamaoo
Mail: iwase@kdl...
自己紹介	
・岩瀬 高博(@okuyamaoo)
 > (株) 神戸デジタル・ラボ所属
	

業務及び活動
>大規模e-コマースサイトのチューニング、運用
>分散処理、データベースの研究及び適応
>(独)情報通信研究機構 特別研究員
     ...
今日のお話し	
1.ファイルシステム?
2.NOSQLファイルシステム
3.MySQLを動かす
ファイルシステムとは?
ファイルシステム?
・そもそもファイルシステムとは?	
・内蔵のHDDやSSD、外付けディスク、ネットワーク上の
ストレージ(NFS等)などの記憶デバイスを等価的に扱う仕組み。

Wikipediaより
ファイルシステムが利用する機器
・ファイルシステムが利用しているハードは?	
・HDD
最も主流な記憶装置。
内臓する円盤に磁気を散布してそこにデータを記憶。
それを磁気ヘッドと言われる目のようなもので読み込む。

・SSD
徐々に浸透してきて...
ファイルシステムの動き
・どのようにデータを格納しているか?	
・ではアプリケーションから書き出されたデータは
どのように格納されているか?
ファイルシステムの動き
・どのようにデータを保存しているか?	
・すごくおおざっぱに表現すると巨大な配列として
保存されている。

全てバイトデータとして扱い、先頭からあらかじめ決められた
サイズ分だけ塊として分割しつつ、配列のように保存してい...
ファイルシステムの動き
・どのようにデータを取り出すか?	
・先ほどの配列に対して位置を指定して取り出す。
例えば先ほどのファイルの1バイトから2048バイトを取り出す場
合	

ここのデータを取り出す	
5000バイトから12000バイトを取...
ファイルシステムが遅い時
・よくHDDが遅いといわれる原因は?	
このように円盤上にデータが
保存されている。
連続してデータを取り出す場合は、
先頭から順にデータを取り出せば
よいので、高速に取り出せる。

ではこのように離れた場所のデータを...
ファイルシステムが遅い時
・SSDはなぜ速い?	

SSDはHDDと違い円盤にデータを保存しない。
データを取り出す際に物理的な位置を意識した
移動などの時間をともなわず、データが保存さて
いる記憶素子上から即取り出せるため高速。
つまり1つの...
分散ファイルシステム
・分散ファイルシステムとは?	
・各筐体の持つファイルシステムを束ねて1つの
ファイルシステムに見せる仕組み。負荷分散、容量拡大が出来る
利用
分散FS
NOSQLファイルシステム
NOSQLの特性
・NOSQL 特にKVSの特性は?	
・KVSは1つのデータへのアクセスが速い。
NOSQLの特性
・例えば分散KVSのokuyamaの性能
・okuyamaは分散しスケールアウトが可能なKVS
ストレージにメモリ、圧縮メモリ、ディスクなどが選べる
サーバ2台で
10万QPS	

okuyamaはメモリストレージを利用
メモ...
NOSQLの特性
・NOSQL特にKVSの特性は?	
・これは先ほどのSSDの良いところに似てませんか?
NOSQLの特性
・KVSは1つのデータの取り出しが高速	
・これは先ほどのSSDの良いところに似てませんか?

そこで、okuyamaを記憶装置として利用できる
ファイルシステムを作ってみました
okuyamaとは?
okuyamaとは?
・okuyamaはJavaで実装されたNOSQLの一種
okuyamaとは?
・どのような機能をもっているか?
okuyamaとは?
・どのような機能をもっているか?	
分散KVS	
・OSS
・完全冗長化(SPOFなし)
・無停止でのスケールアウト
・100台以上のサーバ規模での
稼働実績

ストレージ特性	
・非永続型 or 永続型(WALログ方式)...
okuyamaとは?
・どのような機能をもっているか?	
分散構成を作ることが可能	
分散KVS	
・OSS
・完全冗長化(SPOFなし)
・無停止でのスケールアウト
・100台以上のサーバ規模での
稼働実績

ストレージ特性	
・非永続型 o...
okuyamaを利用した分散FS
・分散ファイルシステムとして利用する	
ファイルシステムとしてokuyamaをマウント出来る仕組みを開発
mount
okuyamaFuse
・FUSEを利用してデータ格納先をokuyamaへ
FUSEとはLinux系のファイルシステムを
ユーザプロセスで自由に作成できる仕組み。
okuyamaFs

データは全てokuyamaに
格納され、ファイルのメタ
情...
MySQLを動かす
MySQL on okuyamaFuse
・Fuseで実装したファイルシステムは
一般的なファイルシステムとして利用可能
	

okuyamaFuse上でMySQLを動かす

mount
MySQL on okuyamaFuse
・目的は?
・ランダムなアクセスが得意なKVS-FS上で
MySQLを動かした場合の性能を検証。	
・検証結果からMySQLのディスクへの
 アクセスプランに最適なFSの検討
・MySQLでの性能測定
テスト内容
・テスト環境
MySQL稼働環境
・CentOS6.4(64bit)
・MySQL5.5
 > InnoDB
 >O_DIRECTオプション利用
  ・Intel(R) Xeon(R) CPU E5-2620 0 @ 2.00GHz...
テスト内容
・テスト環境
okuyama稼働環境(3台)
・CentOS6.4(64bit)
  ・Intel(R) Xeon(R) CPU E5-2620 0 @ 2.00GHz ✕ 2
※物理6Core 仮想 12コア ✕ 2

  ・メモ...
テスト内容
・テスト内容
・sysbenchを用いてOLTPテスト(トランザクション回数)
※OLTPテストとは参照系/更新系両方の混在テスト

・MySQLへの同時接続数を2〜100に増やしながら、
  1分間当たりのトランザクション回数を測...
サーバ構成
MySQL on SATA/SSD

MySQL on okuyamaFuse

ローカルディスクを見ない
テスト結果
トランザクション/秒	

SATAに比べると圧倒的に速い。
SSDに比べると約65%程度の性能

同時接続数
考察
・結果から実際にokuyamaFuseをデバッグ
  IOを全てロギング特性を見る
14:38:28.619: read:/mysqldata/ibdata1 offset:109363200 buf.limit:16384
1行がMyS...
考察
・結果から実際にokuyamaFuseをデバッグ
14:38:28.619: read:/mysqldata/ibdata1 offset:109363200 buf.limit:16384
14:38:28.627: read:/mys...
まとめ
・okuyamaをファイルシステムにしてみた結果	
・ランダムな書き込み、読み込みが発生する場合は
SATAよりも高い性能が見込めることはわかった
okuyamaサーバが複数台のためIO分散されている。
・データベースのIOを細かく調査...
こんな構成も??
AP
サーバ	

okuyamaFuseをマウントし構築
ローカルディスクレスなども	

mount

アプリケーション
キャッシュ	
APキャッシュとしてMemcached等の
代わりにokuyamaをそのまま利用
最後に
・Information
Web
  http://okuyama-project.com/
Development
http://sourceforge.jp/projects/okuyama/

Facebook
http://ww...
Thank you!
Upcoming SlideShare
Loading in …5
×

20131113_mysql_on_分散fsセミナー資料

1,287 views

Published on

2013年11月に開催されたdb tech showcaseでのMySQLon分散FSセミナーの資料です

0 Comments
6 Likes
Statistics
Notes
  • Be the first to comment

No Downloads
Views
Total views
1,287
On SlideShare
0
From Embeds
0
Number of Embeds
133
Actions
Shares
0
Downloads
12
Comments
0
Likes
6
Embeds 0
No embeds

No notes for slide

20131113_mysql_on_分散fsセミナー資料

  1. 1. MySQL on 分散FS 〜NOSQLで構築したファイルシステム上でMySQLを動かす Kobe Digital Labo, Inc.          岩瀬 高博 Twitter: @okuyamaoo Mail: iwase@kdl.co.jp http://okuyama-project.com/
  2. 2. 自己紹介 ・岩瀬 高博(@okuyamaoo)  > (株) 神戸デジタル・ラボ所属 業務及び活動 >大規模e-コマースサイトのチューニング、運用 >分散処理、データベースの研究及び適応 >(独)情報通信研究機構 特別研究員      研究領域:大規模Webアーカイブ >分散KVS okuyama、CEP Setsuna の開発   >OSS、Java、DB、車が好き
  3. 3. 今日のお話し 1.ファイルシステム? 2.NOSQLファイルシステム 3.MySQLを動かす
  4. 4. ファイルシステムとは?
  5. 5. ファイルシステム? ・そもそもファイルシステムとは? ・内蔵のHDDやSSD、外付けディスク、ネットワーク上の ストレージ(NFS等)などの記憶デバイスを等価的に扱う仕組み。 Wikipediaより
  6. 6. ファイルシステムが利用する機器 ・ファイルシステムが利用しているハードは? ・HDD 最も主流な記憶装置。 内臓する円盤に磁気を散布してそこにデータを記憶。 それを磁気ヘッドと言われる目のようなもので読み込む。 ・SSD 徐々に浸透してきている記憶装置 HDDの様に円盤やヘッドなどの稼働部を持たず、 フラッシュメモリにデータを記憶。 ・ioDrive 最近特に注目度の高い超高速デバイス。 NANDフラッシュメモリを記憶部に持ち、接続方式を PCIeとすることでSSDを超える速度を発揮する。
  7. 7. ファイルシステムの動き ・どのようにデータを格納しているか? ・ではアプリケーションから書き出されたデータは どのように格納されているか?
  8. 8. ファイルシステムの動き ・どのようにデータを保存しているか? ・すごくおおざっぱに表現すると巨大な配列として 保存されている。 全てバイトデータとして扱い、先頭からあらかじめ決められた サイズ分だけ塊として分割しつつ、配列のように保存していく。 このサイズは最近では4096byteが主流
  9. 9. ファイルシステムの動き ・どのようにデータを取り出すか? ・先ほどの配列に対して位置を指定して取り出す。 例えば先ほどのファイルの1バイトから2048バイトを取り出す場 合 ここのデータを取り出す 5000バイトから12000バイトを取り出す場合は? この2つを取り出す
  10. 10. ファイルシステムが遅い時 ・よくHDDが遅いといわれる原因は? このように円盤上にデータが 保存されている。 連続してデータを取り出す場合は、 先頭から順にデータを取り出せば よいので、高速に取り出せる。 ではこのように離れた場所のデータを 読み込みたい場合はどうするか? 円盤とヘッドが動いてデータの場所まで 移動しないといけない。 この移動に時間がかかる
  11. 11. ファイルシステムが遅い時 ・SSDはなぜ速い? SSDはHDDと違い円盤にデータを保存しない。 データを取り出す際に物理的な位置を意識した 移動などの時間をともなわず、データが保存さて いる記憶素子上から即取り出せるため高速。 つまり1つのデータの塊に アクセスするのが凄く速い
  12. 12. 分散ファイルシステム ・分散ファイルシステムとは? ・各筐体の持つファイルシステムを束ねて1つの ファイルシステムに見せる仕組み。負荷分散、容量拡大が出来る 利用 分散FS
  13. 13. NOSQLファイルシステム
  14. 14. NOSQLの特性 ・NOSQL 特にKVSの特性は? ・KVSは1つのデータへのアクセスが速い。
  15. 15. NOSQLの特性 ・例えば分散KVSのokuyamaの性能 ・okuyamaは分散しスケールアウトが可能なKVS ストレージにメモリ、圧縮メモリ、ディスクなどが選べる サーバ2台で 10万QPS okuyamaはメモリストレージを利用 メモリで合ってもWALログでデータは永続化される。
  16. 16. NOSQLの特性 ・NOSQL特にKVSの特性は? ・これは先ほどのSSDの良いところに似てませんか?
  17. 17. NOSQLの特性 ・KVSは1つのデータの取り出しが高速 ・これは先ほどのSSDの良いところに似てませんか? そこで、okuyamaを記憶装置として利用できる ファイルシステムを作ってみました
  18. 18. okuyamaとは?
  19. 19. okuyamaとは? ・okuyamaはJavaで実装されたNOSQLの一種
  20. 20. okuyamaとは? ・どのような機能をもっているか?
  21. 21. okuyamaとは? ・どのような機能をもっているか? 分散KVS ・OSS ・完全冗長化(SPOFなし) ・無停止でのスケールアウト ・100台以上のサーバ規模での 稼働実績 ストレージ特性 ・非永続型 or 永続型(WALログ方式) ・メモリ or ディスク or メモリ+ディスク  特性別ストレージ ・ストレージ間の互換性 ・仮想メモリ機能 ・独自圧縮機能 ・パーティション機能 アクセス ・独自プロトコル(Ascii) Java、PHP、Ruby用が存在 ・memcached互換 ・CAS、加減算、Multi系も対応 ・バックアップ等のクライアントも有り ・Hadoop連携 データ構造 ・Key-Value構造 ・Tagの付与 ・有効期限付きデータ ・全文検索用Index
  22. 22. okuyamaとは? ・どのような機能をもっているか? 分散構成を作ることが可能 分散KVS ・OSS ・完全冗長化(SPOFなし) ・無停止でのスケールアウト ・100台以上のサーバ規模での 稼働実績 ストレージ特性 ・非永続型 or 永続型(WALログ方式) ・メモリ or ディスク or メモリ+ディスク  特性別ストレージ ・ストレージ間の互換性 ・仮想メモリ機能 ・独自圧縮機能 ・パーティション機能 アクセス ・独自プロトコル(Ascii) Java、PHP、Ruby用が存在 ・memcached互換 ・CAS、加減算、Multi系も対応 ・バックアップ等のクライアントも有り ・Hadoop連携 データ構造 ・Key-Value構造 ・Tagの付与 ・有効期限付きデータ ・全文検索用Index
  23. 23. okuyamaを利用した分散FS ・分散ファイルシステムとして利用する ファイルシステムとしてokuyamaをマウント出来る仕組みを開発 mount
  24. 24. okuyamaFuse ・FUSEを利用してデータ格納先をokuyamaへ FUSEとはLinux系のファイルシステムを ユーザプロセスで自由に作成できる仕組み。 okuyamaFs データは全てokuyamaに 格納され、ファイルのメタ 情報なども全て格納される。
  25. 25. MySQLを動かす
  26. 26. MySQL on okuyamaFuse ・Fuseで実装したファイルシステムは 一般的なファイルシステムとして利用可能 okuyamaFuse上でMySQLを動かす mount
  27. 27. MySQL on okuyamaFuse ・目的は? ・ランダムなアクセスが得意なKVS-FS上で MySQLを動かした場合の性能を検証。 ・検証結果からMySQLのディスクへの  アクセスプランに最適なFSの検討
  28. 28. ・MySQLでの性能測定
  29. 29. テスト内容 ・テスト環境 MySQL稼働環境 ・CentOS6.4(64bit) ・MySQL5.5  > InnoDB  >O_DIRECTオプション利用   ・Intel(R) Xeon(R) CPU E5-2620 0 @ 2.00GHz ✕ 2 ※物理6Core 仮想 12コア ✕ 2   ・メモリ64GB ・SATA-7200rpm ✕1 / SSD(Intel DC S3700 Series) ✕ 1
  30. 30. テスト内容 ・テスト環境 okuyama稼働環境(3台) ・CentOS6.4(64bit)   ・Intel(R) Xeon(R) CPU E5-2620 0 @ 2.00GHz ✕ 2 ※物理6Core 仮想 12コア ✕ 2   ・メモリ64GB ・SATA-7200rpm ✕1  これら全てインテル株式会社様、 クリエーションライン株式会社様に 検証用としてご提供頂きました!!
  31. 31. テスト内容 ・テスト内容 ・sysbenchを用いてOLTPテスト(トランザクション回数) ※OLTPテストとは参照系/更新系両方の混在テスト ・MySQLへの同時接続数を2〜100に増やしながら、   1分間当たりのトランザクション回数を測定 ・MySQLの”datadir”をSATA、SSD、okuyamaFuseに それぞれに変更し検証   sysbench version 0.4.12を利用  テスト用データは100万件とした
  32. 32. サーバ構成 MySQL on SATA/SSD MySQL on okuyamaFuse ローカルディスクを見ない
  33. 33. テスト結果 トランザクション/秒 SATAに比べると圧倒的に速い。 SSDに比べると約65%程度の性能 同時接続数
  34. 34. 考察 ・結果から実際にokuyamaFuseをデバッグ   IOを全てロギング特性を見る 14:38:28.619: read:/mysqldata/ibdata1 offset:109363200 buf.limit:16384 1行がMySQLからのI/O 14:38:28.627: read:/mysqldata/ibdata1 offset:102596608 buf.limit:16384 14:38:28.633: read:/mysqldata/ibdata1 offset:139051008 buf.limit:16384 14:38:28.634: read:/mysqldata/ibdata1 offset:107429888 buf.limit:16384 14:38:28.639: read:/mysqldata/ibdata1 offset:168738816 buf.limit:16384 14:38:28.648: read:/mysqldata/ibdata1 offset:168755200 buf.limit:16384 14:38:28.653: read:/mysqldata/ibdata1 offset:117489664 buf.limit:16384 14:38:28.653: read:/mysqldata/ibdata1 offset:117522432 buf.limit:16384 14:38:28.658: read:/mysqldata/ibdata1 offset:117506048 buf.limit:16384 14:38:28.661: read:/mysqldata/ibdata1 offset:137396224 buf.limit:16384 14:38:28.668: read:/mysqldata/ibdata1 offset:126484480 buf.limit:16384 14:38:28.669: write path:/mysqldata/ib_logfile0 offset:3025920 isWritepage:false buf.limit:1024 14:38:28.676: write path:/mysqldata/ib_logfile0 offset:3026944 isWritepage:false buf.limit:1024 14:38:28.677: fsync 14:38:28.724: read:/mysqldata/ibdata1 offset:144719872 buf.limit:16384 14:38:28.725: read:/mysqldata/ibdata1 offset:160104448 buf.limit:16384 14:38:28.732: read:/mysqldata/ibdata1 offset:143097856 buf.limit:16384 14:38:28.736: write path:/mysqldata/ib_logfile0 offset:3029504 isWritepage:false buf.limit:1536 14:38:28.743: write path:/mysqldata/ib_logfile0 offset:3031040 isWritepage:false buf.limit:512 14:38:28.744: fsync
  35. 35. 考察 ・結果から実際にokuyamaFuseをデバッグ 14:38:28.619: read:/mysqldata/ibdata1 offset:109363200 buf.limit:16384 14:38:28.627: read:/mysqldata/ibdata1 offset:102596608 buf.limit:16384 Readが圧倒的に多い 14:38:28.633: read:/mysqldata/ibdata1 offset:139051008 buf.limit:16384 14:38:28.634: read:/mysqldata/ibdata1 offset:107429888 buf.limit:16384 14:38:28.639: read:/mysqldata/ibdata1 offset:168738816 buf.limit:16384 offsetがバラバラ 14:38:28.648: read:/mysqldata/ibdata1 offset:168755200 buf.limit:16384 ※offsetは読み込み開始位置 14:38:28.653: read:/mysqldata/ibdata1 offset:117489664 buf.limit:16384 14:38:28.653: read:/mysqldata/ibdata1 offset:117522432 buf.limit:16384 14:38:28.658: read:/mysqldata/ibdata1 offset:117506048 buf.limit:16384 14:38:28.661: read:/mysqldata/ibdata1 offset:137396224 buf.limit:16384 14:38:28.668: read:/mysqldata/ibdata1 offset:126484480 buf.limit:16384 14:38:28.669: write path:/mysqldata/ib_logfile0 offset:3025920 isWritepage:false buf.limit:1024 14:38:28.676: write path:/mysqldata/ib_logfile0 offset:3026944 isWritepage:false buf.limit:1024 14:38:28.677: fsync 14:38:28.724: read:/mysqldata/ibdata1 offset:144719872 buf.limit:16384 14:38:28.725: read:/mysqldata/ibdata1 offset:160104448 buf.limit:16384 14:38:28.732: read:/mysqldata/ibdata1 offset:143097856 buf.limit:16384 14:38:28.736: write path:/mysqldata/ib_logfile0 offset:3029504 isWritepage:false buf.limit:1536 14:38:28.743: write path:/mysqldata/ib_logfile0 offset:3031040 isWritepage:false buf.limit:512 14:38:28.744: fsync 14:38:28.769: read:/mysqldata/ibdata1 offset:134873088 buf.limit:16384 14:38:28.772: read:/mysqldata/ibdata1 offset:103497728 buf.limit:16384
  36. 36. まとめ ・okuyamaをファイルシステムにしてみた結果 ・ランダムな書き込み、読み込みが発生する場合は SATAよりも高い性能が見込めることはわかった okuyamaサーバが複数台のためIO分散されている。 ・データベースのIOを細かく調査出来るため、 利用シーンに合わせてチューニング出来る可能性がある ※今回のテストではReadが多いため、okuyama側の Readチューニングが効果的など  ・NOSQL(分散KVS)を余すこと無く利用するこんな構成も
  37. 37. こんな構成も?? AP サーバ okuyamaFuseをマウントし構築 ローカルディスクレスなども mount アプリケーション キャッシュ APキャッシュとしてMemcached等の 代わりにokuyamaをそのまま利用
  38. 38. 最後に ・Information Web   http://okuyama-project.com/ Development http://sourceforge.jp/projects/okuyama/ Facebook http://www.facebook.com/okuyama.jp okuyamaとokuyamaFuseは全てオープンソースで公開しています
  39. 39. Thank you!

×