56
1 Copyright © 2013, Oracle and/or its affiliates. All rights reserved. MySQL Cluster 徹底活用術 日本オラクル株式会社 MySQL Global Business Unit Principal Technical Support Engineer

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

Embed Size (px)

Citation preview

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

1 Copyright © 2013, Oracle and/or its affiliates. All rights reserved.

MySQL Cluster徹底活用術

日本オラクル株式会社MySQL Global Business UnitPrincipal Technical Support Engineer

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

Copyright © 2013, Oracle and/or its affiliates. All rights reserved.2

免責事項

以下の事項は、弊社の一般的な製品の方向性に関する概要を説明するものです。また、情

報提供を唯一の目的とするものであり、いかなる契約にも組み込むことはできません。以下の事項は、マテリアルやコード、機能を提供することをコミットメント(確約)するものではない

ため、購買決定を行う際の判断材料になさらないで下さい。オラクル製品に関して記載されている機能の開発、リリースおよび時期については、弊社の裁量により決定されます。

Oracleと Javaは、 Oracle Corporation 及びその子会社、関連会社の米国及びその他の国における登録商標です。文中の社名、商品名等は各社の商標または登録商標である場

合があります。

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

Copyright © 2013, Oracle and/or its affiliates. All rights reserved.3

アジェンダ

MySQL Clusterの概要

MySQL Cluster 7.3の新機能

パフォーマンス

構成例

運用について

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

Copyright © 2013, Oracle and/or its affiliates. All rights reserved.4

MySQL Cluster の概要

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

Copyright © 2013, Oracle and/or its affiliates. All rights reserved.5

MySQL Cluster とは

● 並列分散型の RDBMS

– 複数のノードでデータと処理を分散

● シェアードナッシング・アーキテクチャ

● ネットワークを経由してノード同士が通信

● 台数に応じたスケールアウト

– ビルトインのHA機能

● MySQLサーバのストレージエンジンのひとつとして実装

– ACID準拠のトランザクション

– レプリケーションなどのMySQL 従来の機能が利用可能

– 通常のMySQLサーバーとは別プロダクト

– コミュニティ版あり(GPLv2 )

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

Copyright © 2013, Oracle and/or its affiliates. All rights reserved.6

MySQL Cluster の動作イメージ

データノード

SQL ノード

アプリケーション アプリケーション アプリケーション

NDB API

通常のMySQLプロトコル

管理ノード

SQL ノード SQL ノード

データノードデータノード

データノード

データノード

MGM API

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

Copyright © 2013, Oracle and/or its affiliates. All rights reserved.7

可用性について

● 管理ノード

– 特に必要はない

– 管理ノード不在でもデータノードは動き続ける

● ただしその間のログは取れない

● データノード

– データノード内部でデータを同期レプリケーション

– すべてのパーティションでレプリカがひとつでも生きていればOK

● SQLノード

– どのノードからでも同じデータへアクセス可能

● どれかひとつ生きていればOK

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

Copyright © 2013, Oracle and/or its affiliates. All rights reserved.8

シェアード・ナッシング・アーキテクチャ

ノードグループ 1

データノード 1

データノード 2

フラグメント 1プライマリ

フラグメント 3セカンダリ

フラグメント 1セカンダリ

ノードグループ 2

データノード 3

データノード 4

フラグメント 2プライマリ

フラグメント 4セカンダリ

フラグメント 2セカンダリ

フラグメント 4プライマリ

フラグメント 3プライマリ

パーティション3

パーティション1

パーティション2

パーティション4

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

Copyright © 2013, Oracle and/or its affiliates. All rights reserved.9

シェアード・ナッシング・アーキテクチャ

ノードグループ 1

データノード 1

データノード 2

フラグメント 1プライマリ

フラグメント 3セカンダリ

フラグメント 1セカンダリ

ノードグループ 2

データノード 3

データノード 4

フラグメント 2プライマリ

フラグメント 4セカンダリ

フラグメント 2セカンダリ

フラグメント 4プライマリ

フラグメント 3プライマリ

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

Copyright © 2013, Oracle and/or its affiliates. All rights reserved.10

フェイルオーバー

ノードグループ 1

データノード 1

データノード 2

フラグメント 1プライマリ

フラグメント 3セカンダリ

フラグメント 1セカンダリ

フラグメント 3プライマリ

ノードグループ 2

データノード 3

データノード 4

フラグメント 2プライマリ

フラグメント 4セカンダリ

フラグメント 2セカンダリ

フラグメント 4プライマリ

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

Copyright © 2013, Oracle and/or its affiliates. All rights reserved.11

フェイルオーバー

ノードグループ 1

データノード 1

データノード 2

フラグメント 1オフライン

フラグメント 3オフライン

フラグメント 1プライマリ

フラグメント 3プライマリ

ノードグループ 2

データノード 3

データノード 4

フラグメント 2プライマリ

フラグメント 4セカンダリ

フラグメント 2セカンダリ

フラグメント 4プライマリ

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

Copyright © 2013, Oracle and/or its affiliates. All rights reserved.12

フェイルオーバー

ノードグループ 1

データノード 1

データノード 2

フラグメント 1オフライン

フラグメント 3オフライン

フラグメント 1プライマリ

フラグメント 3プライマリ

ノードグループ 2

データノード 3

データノード 4

フラグメント 2プライマリ

フラグメント 4プライマリ

フラグメント 2オフライン

フラグメント 4オフライン

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

Copyright © 2013, Oracle and/or its affiliates. All rights reserved.13

システムダウン

ノードグループ 1

データノード 1

データノード 2

フラグメント 1オフライン

フラグメント 3オフライン

フラグメント 1オフライン

フラグメント 3オフライン

ノードグループ 2

データノード 3

データノード 4

フラグメント 2プライマリ

フラグメント 4プライマリ

フラグメント 2オフライン

フラグメント 4オフライン

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

Copyright © 2013, Oracle and/or its affiliates. All rights reserved.14

システムダウン

ノードグループ 1

データノード 1

データノード 2

フラグメント 1オフライン

フラグメント 3オフライン

フラグメント 1オフライン

フラグメント 3オフライン

ノードグループ 2

データノード 3

データノード 4

フラグメント 2プライマリ

フラグメント 4プライマリ

フラグメント 2オフライン

フラグメント 4オフライン

パーティションへアクセス不能!!

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

Copyright © 2013, Oracle and/or its affiliates. All rights reserved.15

レプリケーション対応

データノード

データノード

データノード

データノード

データノード群

SQL ノード

マスター

データノード

データノード

データノード

データノード

データノード群

SQL ノード

スレーブ

バイナリログリレーログ

I/Oスレッド

SQLスレッド

マスタースレッド

仕組みは通常のレプリケーションと同じ

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

Copyright © 2013, Oracle and/or its affiliates. All rights reserved.16

レプリケーション・フェイルオーバー

データノード

データノード

データノード

データノード

データノード群

SQL ノードStandby

SQL ノードActive

マスター

データノード

データノード

データノード

データノード

データノード群

SQL ノードStandby

SQL ノードActive

スレーブ

チャネルを構成するSQL ノードに障害が発生すると F/O

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

Copyright © 2013, Oracle and/or its affiliates. All rights reserved.17

MySQL Cluster 7.3 の新機能

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

Copyright © 2013, Oracle and/or its affiliates. All rights reserved.18

MySQL Cluster 7.3 登場!!

● MySQLサーバーのバージョンが 5.6に

● 外部キー制約のサポート

● NDB APIにおけるボトルネックの解消

● Node.js用ドライバ

● Auto Installer

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

Copyright © 2013, Oracle and/or its affiliates. All rights reserved.19

MySQL Server 5.6 搭載

● MySQL 5.6の新機能が全て利用可能!!

– サブクエリが Semi-JOIN最適化で高速に

– BKA Join

– EXPLAIANの改善

– オプティマイザトレース

– パフォーマンススキーマの強化

– ジャイアントロック( LOCK_open )の撤廃

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

Copyright © 2013, Oracle and/or its affiliates. All rights reserved.20

待望の外部キー制約サポート

● 普通に使える(尖っていない) DBMSへ一歩近づいた

– 自前で制約を実装する必要がなくなった

● 使い方は InnoDB と同じ

● 参照される(親テーブル)カラムは、主キーないしはユニークキーであること

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

Copyright © 2013, Oracle and/or its affiliates. All rights reserved.21

NDB API のボトルネック解消

● NDB APIの Transporter Mutexが分割された

● ひとつの SQL ノードで処理可能な性能の上限が上昇

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

Copyright © 2013, Oracle and/or its affiliates. All rights reserved.22

Node.js 用ドライバ

● NDB APIを用いた JavaScript用の新しいラッパー

– データノードへダイレクトにアクセスすることでパフォーマンスを稼ぐ

– 低レイテンシー

– スケーラブル

● 既に他のラッパーあり

– Java

– memcached

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

Copyright © 2013, Oracle and/or its affiliates. All rights reserved.23

Auto Installer

● MySQL Clusterをお手軽に構成できるユーティリティ

● Webベース

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

Copyright © 2013, Oracle and/or its affiliates. All rights reserved.24

パフォーマンス

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

Copyright © 2013, Oracle and/or its affiliates. All rights reserved.25

InnoDB との性能特性に注意

● InnoDB とは得手不得手が違う

– 同じような感覚で使うとパフォーマンスがでないことも・・・

– 如何に苦手なワークロードを克服することが重要

● 得意な処理は問題にはならない

– スケール戦略も異なる

– ハードウェア要件も異なる

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

Copyright © 2013, Oracle and/or its affiliates. All rights reserved.26

主キーによるルックアップは速い!

● 負荷が均等に分散するためスケールアウトが容易

SQLノード各データノードに

負荷が均等に分散

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

Copyright © 2013, Oracle and/or its affiliates. All rights reserved.27

細かいスキャン(範囲検索)が苦手

データノードTC

データノード データノード

SQLノード

1.スキャンリクエスト

2.他のノードへリクエスト

3.データを返送

すべてのデータノードが応答を強いられる

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

Copyright © 2013, Oracle and/or its affiliates. All rights reserved.28

大規模なスキャンは得意

● Engine Condition Pushdown最適化

ストレージエンジン

SQL実行部

ストレージエンジン

SQL実行部

Pushdownなし Pushdownあり

WHERE句で絞り込み

WHERE句で絞り込み

並列処理

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

Copyright © 2013, Oracle and/or its affiliates. All rights reserved.29

JOIN が遅い?

● MySQL ( SQL ノード)がサポートしているのはNested Loopのみ

– 内部表へのアクセスにオーダードインデックスが使われていたら要注意!

– 内部表から1行フェッチするたびに苦手な細かいスキャン = 全データノードへ問い合わせ

● MySQL Cluster 7.2で解決!!

– データノード側で JOINができるようになった

– Adaptive Query Localization ( AQL )もしくは Pushdown JOIN

● MySQL Cluster 7.3でさらに改善

– Batched Key Access というアルゴリズムが加わった

– AQL で解決できないケースも拾えるようになった

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

Copyright © 2013, Oracle and/or its affiliates. All rights reserved.30

ユーザー定義パーティショニング

通常のパーティショニング ユーザー定義パーティショニング

customersテーブル

cust_id= 100

cust_id= 100

cust_id= 100

cust_id= 100

cust_id= 100

cust_id= 100

cust_id= 100

ordersテーブル

customersテーブル

ordersテーブル

データノード

データノード

データノード

データノード

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

Copyright © 2013, Oracle and/or its affiliates. All rights reserved.31

もっと高いスケーラビリティが欲しい場合→ InnoDB と連携

データノード

データノード

データノード

データノード

スレーブマスター

INNODBINNODB

スレーブ

INNODBINNODB

スレーブ

INNODBINNODB

更新

SQLノード

JOINアプリケーション

SQLノード

SQLノード

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

Copyright © 2013, Oracle and/or its affiliates. All rights reserved.32

memcached

データノード

データノード群

管理ノード データノード

データノード

データノード

SQLノード

SQLノード

memcached memcached

SQL ノードと同じデータにアクセス可能!!

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

Copyright © 2013, Oracle and/or its affiliates. All rights reserved.33

構成例

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

Copyright © 2013, Oracle and/or its affiliates. All rights reserved.34

アプリケーション、 SQL ノード、データノードが同居

host1 host2

データノード

SQL ノード データノード

SQL ノード

アプリケーション アプリケーション

ロ   ー   ド   バ   ラ   ン   サ   ー

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

Copyright © 2013, Oracle and/or its affiliates. All rights reserved.35

Connector/J

host1 host2

データノード

SQL ノード データノード

SQL ノード

host3

アプリケーション

Connector/J

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

Copyright © 2013, Oracle and/or its affiliates. All rights reserved.36

MySQL Proxy

host1 host2

データノード

SQL ノード データノード

SQL ノード

host3

アプリケーション

MySQL Proxy

host4

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

Copyright © 2013, Oracle and/or its affiliates. All rights reserved.37

MySQL Proxy

SQL ノード群

SQL ノード

host

アプリケーション

M   y   S   Q   L    P   r   o   x   y

データノード

データノード

データノード

データノード

データノード群

SQL ノード SQL ノード SQL ノード

SQL ノード SQL ノード SQL ノード SQL ノード

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

Copyright © 2013, Oracle and/or its affiliates. All rights reserved.38

アプリケーションと SQL ノードが同居

データノード

データノード群

データノード

データノード

データノード

SQL ノード

アプリケーション

ロ   ー   ド   バ   ラ   ン   サ   ー

SQL ノード

アプリケーション

SQL ノード

アプリケーション

SQL ノード

アプリケーション

SQL ノード

アプリケーション

SQL ノード

アプリケーション

UNIX Domainソケットで接続

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

Copyright © 2013, Oracle and/or its affiliates. All rights reserved.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

● ソフトウェア

– Gentoo Linux

– MySQL Cluster 7.3.2

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

Copyright © 2013, Oracle and/or its affiliates. All rights reserved.40

電源USB x 4 x 2

100Mbps8ポート

スイッチングハブBeagleBone

Black x 6

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

Copyright © 2013, Oracle and/or its affiliates. All rights reserved.41

config.ini 抜粋

[NDBD DEFAULT]

NoOfReplicas=2

DataMemory=120M

IndexMemory=16M

MaxNoOfConcurrentScans=256

MaxNoOfTriggers=800

MaxNoOfTables=100

MaxNoOfOrderedIndexes=200

MaxNoOfAttributes=8000

MaxNoOfConcurrentOperations=100000

MaxNoOfConcurrentTransactions=4000

FragmentLogFileSize=8M

NoOfFragmentLogFiles=4

RedoBuffer=16M

ODirect=0

TimeBetweenEpochsTimeout=10000

TransactionDeadlockDetectionTimeout=12000

SharedGlobalMemory=12M

DiskPageBufferMemory=4M

TotalSendBufferMemory=8M

RealtimeScheduler=1

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

Copyright © 2013, Oracle and/or its affiliates. All rights reserved.42

構成可能なトポロジの例

ID SQL ノード数 データノード数 レプリカ

A 2 4 2

B 4 2 2

C 3 3 1

D 5 1 1

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

Copyright © 2013, Oracle and/or its affiliates. All rights reserved.43

0 10 20 30 40 50 60 700

50

100

150

200

250

A­ro

A­rw

B­ro

B­rw

C­ro

C­rw

D­ro

D­rw

ベンチマーク結果: BeagleBone Black / sysbench

tps

Threads

sysbench 0.5 without ranges

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

Copyright © 2013, Oracle and/or its affiliates. All rights reserved.44

高性能マシン: Insight Qube

● ハードウェア(3台貸していただきました)

– Intel(R) Xeon(R) CPU E5-2680

● 8 コア 16 スレッド x 2 (合計 32スレッド)

– 768GB メモリ

– InfiniBand

● ソフトウェア

– RHEL 6.3

– MySQL Cluster 7.3.2

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

Copyright © 2013, Oracle and/or its affiliates. All rights reserved.45

構成可能なトポロジの例

ID SQL ノード数 データノード数 レプリカ

A 1 1 1

B 1 2 2

C 1 4 ( 同一ホストに 2 ) 2

D 1 4 ( 同一ホストに 2 ) 1

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

Copyright © 2013, Oracle and/or its affiliates. All rights reserved.46

ベンチマーク結果: Insight Qube / tpcc-mysql

0 20 40 60 80 100 120 1400

5000

10000

15000

20000

25000

A

B

C

D

Threads

TpmC

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

Copyright © 2013, Oracle and/or its affiliates. All rights reserved.47

ベンチマーク結果についての考察

● 数値自体はかなり良い

– マシンが速かったお陰か( 32スレッド+ InfiniBand )

● データノード数に応じてスケールしなかった原因

– テストが不完全だったため確実なことは言えない

– SQL ノードを増やせなかったことが原因か

– より多くのノードを使って再検証予定

● Bパターンの性能が上がらなかったのは測定ミスの可能性

– 再検証で明らかにしたい

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

Copyright © 2013, Oracle and/or its affiliates. All rights reserved.48

NUMA 対策

● 特定のNUMA ノードだけで動かす

– numactl –preferred=X ndbmtd ...

● 割り込み処理しない CPU

– irqbalance

● 他のプロセスに使用されない CPU

– isolcpus

● CPUバインドする

– ThreadConfig = recv={count=2},send={count=2},tc={count=4},ldm={count=8,cpubind=2-5,18-21}

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

Copyright © 2013, Oracle and/or its affiliates. All rights reserved.49

運用のノウハウ

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

Copyright © 2013, Oracle and/or its affiliates. All rights reserved.50

オンラインで可能なメンテナンス操作

● バックアップ

● テーブル定義変更

– インデックスの追加・削除

– カラムの追加

● 設定変更

● アップグレード・ダウングレード

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

Copyright © 2013, Oracle and/or its affiliates. All rights reserved.51

バックアップ・リストア

● オンラインバックアップ機能搭載

– 高速

– 各データノードにバックアップファイルを作成

● ndb_restore コマンド

– API ノードとして動作

– バックアップファイルを読み取ってデータを再投入

● 結構遅い

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

Copyright © 2013, Oracle and/or its affiliates. All rights reserved.52

Pint In Time リカバリ

● ndb_restore + バイナリログ

– ndb_restoreが Epoch と呼ばれる情報を格納

– Epochからバイナリログポジションを特定

– mysqlbinlog コマンドで特定したポジションから再実行

● 任意のポジションで停止可能

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

Copyright © 2013, Oracle and/or its affiliates. All rights reserved.53

監視

● MySQL Enterprise Monitor

– MySQL ServerおよびMySQL Clusterの商用監視ツール

– SQL ノード、データノードの状態、システムリソースなどを監視

– 問題のあるクエリの特定に役立つQuery Analyzer機能

– SNMPやメールによる通知が可能

– http://www-jp.mysql.com/products/enterprise/monitor.html

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

Copyright © 2013, Oracle and/or its affiliates. All rights reserved.54

● MySQL Cluster Manager

● 商用のCLIツール

● MySQL Clusterの管理を一元化

– インストール( Auto Installer相当)

– 設定変更

– ノード追加

– ローリングリスタートの自動化

– http://www-jp.mysql.com/products/cluster/mcm/

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

Copyright © 2013, Oracle and/or its affiliates. All rights reserved.55

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

Copyright © 2013, Oracle and/or its affiliates. All rights reserved.56 56