[C21] MySQL Cluster徹底活用術 by Mikiya Okuno

3,448 views

Published on

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

No Downloads
Views
Total views
3,448
On SlideShare
0
From Embeds
0
Number of Embeds
1,182
Actions
Shares
0
Downloads
48
Comments
0
Likes
10
Embeds 0
No embeds

No notes for slide

[C21] MySQL Cluster徹底活用術 by Mikiya Okuno

  1. 1. MySQL Cluster 徹底活用術 日本オラクル株式会社 MySQL Global Business Unit Principal Technical Support Engineer 1 Copyright © 2013, Oracle and/or its affiliates. All rights reserved.
  2. 2. 免責事項 以下の事項は、弊社の一般的な製品の方向性に関する概要を説明するものです。また、情 報提供を唯一の目的とするものであり、いかなる契約にも組み込むことはできません。以下 の事項は、マテリアルやコード、機能を提供することをコミットメント(確約)するものではない ため、購買決定を行う際の判断材料になさらないで下さい。オラクル製品に関して記載され ている機能の開発、リリースおよび時期については、弊社の裁量により決定されます。 Oracle と Java は、 Oracle Corporation 及びその子会社、関連会社の米国及びその他の 国における登録商標です。文中の社名、商品名等は各社の商標または登録商標である場 合があります。 2 Copyright © 2013, Oracle and/or its affiliates. All rights reserved.
  3. 3. アジェンダ  MySQL Cluster の概要  MySQL Cluster 7.3 の新機能  パフォーマンス  構成例  運用について 3 Copyright © 2013, Oracle and/or its affiliates. All rights reserved.
  4. 4. MySQL Cluster の概要 4 Copyright © 2013, Oracle and/or its affiliates. All rights reserved.
  5. 5. MySQL Cluster とは ● 並列分散型の RDBMS – 複数のノードでデータと処理を分散 ● ● ● ネットワークを経由してノード同士が通信 ● – シェアードナッシング・アーキテクチャ 台数に応じたスケールアウト ビルトインの HA 機能 MySQL サーバのストレージエンジンのひとつとして実装 – – レプリケーションなどの MySQL 従来の機能が利用可能 – 通常の MySQL サーバーとは別プロダクト – 5 ACID 準拠のトランザクション コミュニティ版あり( GPLv2 ) Copyright © 2013, Oracle and/or its affiliates. All rights reserved.
  6. 6. MySQL Cluster の動作イメージ アプリケーション アプリケーション アプリケーション 通常の MySQL プロトコル SQL ノード SQL ノード SQL ノード MGM API NDB API データ ノード 6 Copyright © 2013, Oracle and/or its affiliates. All rights reserved. データ データ ノード ノード データ ノード データ ノード 管理ノード
  7. 7. 可用性について ● 管理ノード – 特に必要はない – 管理ノード不在でもデータノードは動き続ける ● ● ただしその間のログは取れない データノード – – ● データノード内部でデータを同期レプリケーション すべてのパーティションでレプリカがひとつでも生きていれば OK SQL ノード – どのノードからでも同じデータへアクセス可能 ● 7 どれかひとつ生きていれば OK Copyright © 2013, Oracle and/or its affiliates. All rights reserved.
  8. 8. シェアード・ナッシング・アーキテクチャ データノード 1 データノード 3 フラグメント 1 プライマリ フラグメント 3 セカンダリ フラグメント 2 プライマリ フラグメント 4 セカンダリ パーティション 1 パーティション 3 パーティション 2 パーティション 4 フラグメント 1 セカンダリ フラグメント 3 プライマリ フラグメント 2 セカンダリ フラグメント 4 プライマリ データノード 2 ノードグループ 1 8 データノード 4 ノードグループ 2 Copyright © 2013, Oracle and/or its affiliates. All rights reserved.
  9. 9. シェアード・ナッシング・アーキテクチャ データノード 1 データノード 3 フラグメント 1 プライマリ フラグメント 3 セカンダリ フラグメント 2 プライマリ フラグメント 4 セカンダリ フラグメント 1 セカンダリ フラグメント 3 プライマリ フラグメント 2 セカンダリ フラグメント 4 プライマリ データノード 2 ノードグループ 1 9 データノード 4 ノードグループ 2 Copyright © 2013, Oracle and/or its affiliates. All rights reserved.
  10. 10. フェイルオーバー データノード 1 データノード 3 フラグメント 1 プライマリ フラグメント 3 セカンダリ フラグメント 2 プライマリ フラグメント 4 セカンダリ フラグメント 1 セカンダリ フラグメント 3 プライマリ フラグメント 2 セカンダリ フラグメント 4 プライマリ データノード 2 ノードグループ 1 10 データノード 4 ノードグループ 2 Copyright © 2013, Oracle and/or its affiliates. All rights reserved.
  11. 11. フェイルオーバー データノード 1 データノード 3 フラグメント 1 オフライン フラグメント 3 オフライン フラグメント 2 プライマリ フラグメント 4 セカンダリ フラグメント 1 プライマリ フラグメント 3 プライマリ フラグメント 2 セカンダリ フラグメント 4 プライマリ データノード 2 ノードグループ 1 11 データノード 4 ノードグループ 2 Copyright © 2013, Oracle and/or its affiliates. All rights reserved.
  12. 12. フェイルオーバー データノード 1 データノード 3 フラグメント 1 オフライン フラグメント 3 オフライン フラグメント 2 プライマリ フラグメント 4 プライマリ フラグメント 1 プライマリ フラグメント 3 プライマリ フラグメント 2 オフライン フラグメント 4 オフライン データノード 2 ノードグループ 1 12 データノード 4 ノードグループ 2 Copyright © 2013, Oracle and/or its affiliates. All rights reserved.
  13. 13. システムダウン データノード 1 データノード 3 フラグメント 1 オフライン フラグメント 3 オフライン フラグメント 2 プライマリ フラグメント 4 プライマリ フラグメント 1 オフライン フラグメント 3 オフライン フラグメント 2 オフライン フラグメント 4 オフライン データノード 2 ノードグループ 1 13 データノード 4 ノードグループ 2 Copyright © 2013, Oracle and/or its affiliates. All rights reserved.
  14. 14. システムダウン データノード 1 フラグメント 1 オフライン フラグメント 3 オフライン データノード 3 フラグメント 2 プライマリ フラグメント 4 プライマリ フラグメント 2 オフライン フラグメント 4 オフライン パーティションへ アクセス不能!! フラグメント 1 オフライン フラグメント 3 オフライン データノード 2 ノードグループ 1 14 データノード 4 ノードグループ 2 Copyright © 2013, Oracle and/or its affiliates. All rights reserved.
  15. 15. レプリケーション対応 マスター スレーブ SQL ノード SQL ノード I/O スレッド マスタースレッド リレーログ バイナリログ SQL スレッド 仕組みは通常の レプリケーションと同じ データ ノード データ ノード データ ノード データ ノード データ ノード データ ノード データ ノード データ ノード データノード群 15 Copyright © 2013, Oracle and/or its affiliates. All rights reserved. データノード群
  16. 16. レプリケーション・フェイルオーバー マスター スレーブ SQL ノード Active SQL ノード Active SQL ノード Standby SQL ノード Standby データ ノード データ ノード データ ノード データ ノード データノード群 16 Copyright © 2013, Oracle and/or its affiliates. All rights reserved. チャネルを構成する SQL ノードに障害が 発生すると F/O データ ノード データ ノード データ ノード データ ノード データノード群
  17. 17. MySQL Cluster 7.3 の新機能 17 Copyright © 2013, Oracle and/or its affiliates. All rights reserved.
  18. 18. MySQL Cluster 7.3 登場!! ● ● 外部キー制約のサポート ● NDB API におけるボトルネックの解消 ● Node.js 用ドライバ ● 18 MySQL サーバーのバージョンが 5.6 に Auto Installer Copyright © 2013, Oracle and/or its affiliates. All rights reserved.
  19. 19. MySQL Server 5.6 搭載 ● MySQL 5.6 の新機能が全て利用可能!! – – BKA Join – EXPLAIAN の改善 – オプティマイザトレース – パフォーマンススキーマの強化 – 19 サブクエリが Semi-JOIN 最適化で高速に ジャイアントロック( LOCK_open )の撤廃 Copyright © 2013, Oracle and/or its affiliates. All rights reserved.
  20. 20. 待望の外部キー制約サポート ● 普通に使える(尖っていない) DBMS へ一歩近づいた – 自前で制約を実装する必要がなくなった ● ● 20 使い方は InnoDB と同じ 参照される(親テーブル)カラムは、主キーないしはユニークキーであること Copyright © 2013, Oracle and/or its affiliates. All rights reserved.
  21. 21. NDB API のボトルネック解消 ● ● 21 NDB API の Transporter Mutex が分割された ひとつの SQL ノードで処理可能な性能の上限が上昇 Copyright © 2013, Oracle and/or its affiliates. All rights reserved.
  22. 22. Node.js 用ドライバ ● NDB API を用いた JavaScript 用の新しいラッパー – – 低レイテンシー – ● データノードへダイレクトにアクセスすることでパフォーマンスを稼ぐ スケーラブル 既に他のラッパーあり – – 22 Java memcached Copyright © 2013, Oracle and/or its affiliates. All rights reserved.
  23. 23. Auto Installer ● ● 23 MySQL Cluster をお手軽に構成できるユーティリティ Web ベース Copyright © 2013, Oracle and/or its affiliates. All rights reserved.
  24. 24. パフォーマンス 24 Copyright © 2013, Oracle and/or its affiliates. All rights reserved.
  25. 25. InnoDB との性能特性に注意 ● InnoDB とは得手不得手が違う – 同じような感覚で使うとパフォーマンスがでないことも・・・ – 如何に苦手なワークロードを克服することが重要 ● 得意な処理は問題にはならない – – 25 スケール戦略も異なる ハードウェア要件も異なる Copyright © 2013, Oracle and/or its affiliates. All rights reserved.
  26. 26. 主キーによるルックアップは速い! ● 負荷が均等に分散するためスケールアウトが容易 SQL ノード 26 Copyright © 2013, Oracle and/or its affiliates. All rights reserved. 各データノードに 負荷が均等に分散
  27. 27. 細かいスキャン(範囲検索)が苦手 SQL ノード 1. スキャンリクエスト データノード TC 3. データを返送 データノード 2. 他のノードへリクエスト 27 Copyright © 2013, Oracle and/or its affiliates. All rights reserved. すべてのデータノードが 応答を強いられる データノード
  28. 28. 大規模なスキャンは得意 ● Engine Condition Pushdown 最適化 SQL 実行部 SQL 実行部 WHERE 句で 絞り込み ストレージエンジン Pushdown なし 28 Copyright © 2013, Oracle and/or its affiliates. All rights reserved. WHERE 句で 絞り込み ストレージエンジン Pushdown あり 並列処理
  29. 29. JOIN が遅い? ● MySQL ( SQL ノード)がサポートしているのは Nested Loop のみ – – ● 内部表へのアクセスにオーダードインデックスが使われていたら要注意! 内部表から1行フェッチするたびに苦手な細かいスキャン = 全データノードへ問い合わせ MySQL Cluster 7.2 で解決!! – – ● データノード側で JOIN ができるようになった Adaptive Query Localization ( AQL )もしくは Pushdown JOIN MySQL Cluster 7.3 でさらに改善 – – 29 Batched Key Access というアルゴリズムが加わった AQL で解決できないケースも拾えるようになった Copyright © 2013, Oracle and/or its affiliates. All rights reserved.
  30. 30. ユーザー定義パーティショニング customers orders テーブル テーブル cust_id = 100 データノード データノード cust_id = 100 cust_id = 100 データノード cust_id = 100 cust_id = 100 cust_id = 100 データノード cust_id = 100 通常のパーティショニング 30 customers orders テーブル テーブル Copyright © 2013, Oracle and/or its affiliates. All rights reserved. ユーザー定義パーティショニング
  31. 31. もっと高いスケーラビリティが欲しい場合 → InnoDB と連携 アプリケーション 更新 マスター SQL ノード SQL ノード データ ノード データ ノード 31 Copyright © 2013, Oracle and/or its affiliates. All rights reserved. SQL ノード データ ノード データ ノード JOIN スレーブ INNODB スレーブ INNODB スレーブ INNODB
  32. 32. memcached SQL ノード memcached データ ノード データ ノード データ ノード 管理ノード SQL ノード データ ノード データノード群 32 Copyright © 2013, Oracle and/or its affiliates. All rights reserved. memcached SQL ノードと同じデータに アクセス可能!!
  33. 33. 構成例 33 Copyright © 2013, Oracle and/or its affiliates. All rights reserved.
  34. 34. アプリケーション、 SQL ノード、データノードが同居 ロ   ー   ド   バ   ラ   ン   サ   ー アプリケーション アプリケーション SQL ノード データ ノード host1 34 Copyright © 2013, Oracle and/or its affiliates. All rights reserved. SQL ノード データ ノード host2
  35. 35. Connector/J host3 アプリケーション Connector/J SQL ノード データ ノード host1 35 Copyright © 2013, Oracle and/or its affiliates. All rights reserved. SQL ノード データ ノード host2
  36. 36. MySQL Proxy host3 アプリケーション MySQL Proxy host4 データ ノード SQL ノード host1 36 Copyright © 2013, Oracle and/or its affiliates. All rights reserved. データ ノード SQL ノード host2
  37. 37. MySQL Proxy host アプリケーション M   y   S   Q   L    P   r   o   x   y データ ノード データ ノード データ ノード データ ノード データノード群 37 Copyright © 2013, Oracle and/or its affiliates. All rights reserved. SQL ノード SQL ノード SQL ノード SQL ノード SQL ノード SQL ノード SQL ノード SQL ノード SQL ノード群
  38. 38. アプリケーションと SQL ノードが同居 ロ   ー   ド   バ   ラ   ン   サ   ー アプリケーション アプリケーション アプリケーション アプリケーション SQL ノード SQL ノード SQL ノード SQL ノード データ ノード データ ノード データ ノード データノード群 38 Copyright © 2013, Oracle and/or its affiliates. All rights reserved. データ ノード UNIX Domain ソケットで接続
  39. 39. 世界最小構成(?): Beagle Bone Black ● ハードウェア – AM335x 1GHz ARM® Cortex-A8 – 512MB DDR3 RAM – 2GB 8-bit eMMC on-board flash storage – micro-SD カードスロット ● ● Toshiba microSDHC UHS-I 16GB EXCERIA ソフトウェア – – 39 Gentoo Linux MySQL Cluster 7.3.2 Copyright © 2013, Oracle and/or its affiliates. All rights reserved.
  40. 40. 電源 USB x 4 x 2 100Mbps 8 ポート スイッチングハブ BeagleBone Black x 6 40 Copyright © 2013, Oracle and/or its affiliates. All rights reserved.
  41. 41. config.ini 抜粋 [NDBD DEFAULT] FragmentLogFileSize=8M NoOfReplicas=2 NoOfFragmentLogFiles=4 DataMemory=120M RedoBuffer=16M IndexMemory=16M ODirect=0 MaxNoOfConcurrentScans=256 TimeBetweenEpochsTimeout=10000 MaxNoOfTriggers=800 TransactionDeadlockDetectionTimeout=12000 MaxNoOfTables=100 MaxNoOfOrderedIndexes=200 MaxNoOfAttributes=8000 DiskPageBufferMemory=4M MaxNoOfConcurrentOperations=100000 TotalSendBufferMemory=8M MaxNoOfConcurrentTransactions=4000 41 SharedGlobalMemory=12M RealtimeScheduler=1 Copyright © 2013, Oracle and/or its affiliates. All rights reserved.
  42. 42. 構成可能なトポロジの例 ID データノード数 レプリカ A 2 4 2 B 4 2 2 C 3 3 1 D 42 SQL ノード数 5 1 1 Copyright © 2013, Oracle and/or its affiliates. All rights reserved.
  43. 43. ベンチマーク結果: BeagleBone Black / sysbench tps sysbench 0.5 without ranges 250 200 A­ro A­rw 150 B­ro B­rw C­ro 100 C­rw D­ro D­rw 50 0 0 43 10 Copyright © 2013, Oracle and/or its affiliates. All rights reserved. 20 30 40 50 60 70 Threads
  44. 44. 高性能マシン: Insight Qube ● ハードウェア(3台貸していただきました) – Intel(R) Xeon(R) CPU E5-2680 ● 8 コア 16 スレッド x 2 (合計 32 スレッド) – – ● 768GB メモリ InfiniBand ソフトウェア – – 44 RHEL 6.3 MySQL Cluster 7.3.2 Copyright © 2013, Oracle and/or its affiliates. All rights reserved.
  45. 45. 構成可能なトポロジの例 ID データノード数 レプリカ A 1 1 1 B 1 2 2 C 1 4 ( 同一ホストに 2 ) 2 D 45 SQL ノード数 1 4 ( 同一ホストに 2 ) 1 Copyright © 2013, Oracle and/or its affiliates. All rights reserved.
  46. 46. ベンチマーク結果: Insight Qube / tpcc-mysql TpmC 25000 20000 15000 A B C 10000 D 5000 0 0 46 20 Copyright © 2013, Oracle and/or its affiliates. All rights reserved. 40 60 80 100 120 140 Threads
  47. 47. ベンチマーク結果についての考察 ● 数値自体はかなり良い – ● マシンが速かったお陰か( 32 スレッド+ InfiniBand ) データノード数に応じてスケールしなかった原因 – – SQL ノードを増やせなかったことが原因か – ● テストが不完全だったため確実なことは言えない より多くのノードを使って再検証予定 B パターンの性能が上がらなかったのは測定ミスの可能性 – 47 再検証で明らかにしたい Copyright © 2013, Oracle and/or its affiliates. All rights reserved.
  48. 48. NUMA 対策 ● 特定の NUMA ノードだけで動かす – ● 割り込み処理しない CPU – ● isolcpus CPU バインドする – 48 irqbalance 他のプロセスに使用されない CPU – ● numactl –preferred=X ndbmtd ... ThreadConfig = recv={count=2},send={count=2},tc={count=4},ldm={count=8,cpubind=25,18-21} Copyright © 2013, Oracle and/or its affiliates. All rights reserved.
  49. 49. 運用のノウハウ 49 Copyright © 2013, Oracle and/or its affiliates. All rights reserved.
  50. 50. オンラインで可能なメンテナンス操作 ● バックアップ ● テーブル定義変更 – インデックスの追加・削除 – カラムの追加 ● ● 50 設定変更 アップグレード・ダウングレード Copyright © 2013, Oracle and/or its affiliates. All rights reserved.
  51. 51. バックアップ・リストア ● オンラインバックアップ機能搭載 – – ● 高速 各データノードにバックアップファイルを作成 ndb_restore コマンド – API ノードとして動作 – バックアップファイルを読み取ってデータを再投入 ● 51 結構遅い Copyright © 2013, Oracle and/or its affiliates. All rights reserved.
  52. 52. Pint In Time リカバリ ● ndb_restore + バイナリログ – ndb_restore が Epoch と呼ばれる情報を格納 – Epoch からバイナリログポジションを特定 – mysqlbinlog コマンドで特定したポジションから再実行 ● 52 任意のポジションで停止可能 Copyright © 2013, Oracle and/or its affiliates. All rights reserved.
  53. 53. 監視 ● MySQL Enterprise Monitor – – SQL ノード、データノードの状態、システムリソースなどを監視 – 問題のあるクエリの特定に役立つ Query Analyzer 機能 – SNMP やメールによる通知が可能 – 53 MySQL Server および MySQL Cluster の商用監視ツール http://www-jp.mysql.com/products/enterprise/monitor.html Copyright © 2013, Oracle and/or its affiliates. All rights reserved.
  54. 54. ● MySQL Cluster Manager ● 商用の CLI ツール ● MySQL Cluster の管理を一元化 – – 設定変更 – ノード追加 – ローリングリスタートの自動化 – 54 インストール( Auto Installer 相当) http://www-jp.mysql.com/products/cluster/mcm/ Copyright © 2013, Oracle and/or its affiliates. All rights reserved.
  55. 55. 55 Copyright © 2013, Oracle and/or its affiliates. All rights reserved.
  56. 56. 56 Copyright © 2013, Oracle and/or its affiliates. All rights reserved. 56

×