More Related Content Similar to [C21] MySQL Cluster徹底活用術 by Mikiya Okuno
Similar to [C21] MySQL Cluster徹底活用術 by Mikiya Okuno (20) More from Insight Technology, Inc.
More from Insight Technology, Inc. (20) [C21] MySQL Cluster徹底活用術 by Mikiya Okuno3. アジェンダ
MySQL Cluster の概要
MySQL Cluster 7.3 の新機能
パフォーマンス
構成例
運用について
3
Copyright © 2013, Oracle and/or its affiliates. All rights reserved.
5. MySQL Cluster とは
●
並列分散型の RDBMS
–
複数のノードでデータと処理を分散
●
●
●
ネットワークを経由してノード同士が通信
●
–
シェアードナッシング・アーキテクチャ
台数に応じたスケールアウト
ビルトインの HA 機能
MySQL サーバのストレージエンジンのひとつとして実装
–
–
レプリケーションなどの MySQL 従来の機能が利用可能
–
通常の MySQL サーバーとは別プロダクト
–
5
ACID 準拠のトランザクション
コミュニティ版あり( GPLv2 )
Copyright © 2013, Oracle and/or its affiliates. All rights reserved.
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. シェアード・ナッシング・アーキテクチャ
データノード 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. フェイルオーバー
データノード 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. フェイルオーバー
データノード 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. フェイルオーバー
データノード 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. システムダウン
データノード 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. システムダウン
データノード 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. レプリケーション対応
マスター
スレーブ
SQL ノード
SQL ノード
I/O スレッド
マスタースレッド
リレーログ
バイナリログ
SQL スレッド
仕組みは通常の
レプリケーションと同じ
データ
ノード
データ
ノード
データ
ノード
データ
ノード
データ
ノード
データ
ノード
データ
ノード
データ
ノード
データノード群
15
Copyright © 2013, Oracle and/or its affiliates. All rights reserved.
データノード群
17. MySQL Cluster 7.3 の新機能
17
Copyright © 2013, Oracle and/or its affiliates. All rights reserved.
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. 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.
21. NDB API のボトルネック解消
●
●
21
NDB API の Transporter Mutex が分割された
ひとつの SQL ノードで処理可能な性能の上限が上昇
Copyright © 2013, Oracle and/or its affiliates. All rights reserved.
22. Node.js 用ドライバ
●
NDB API を用いた JavaScript 用の新しいラッパー
–
–
低レイテンシー
–
●
データノードへダイレクトにアクセスすることでパフォーマンスを稼ぐ
スケーラブル
既に他のラッパーあり
–
–
22
Java
memcached
Copyright © 2013, Oracle and/or its affiliates. All rights reserved.
28. 大規模なスキャンは得意
●
Engine Condition Pushdown 最適化
SQL 実行部
SQL 実行部
WHERE 句で
絞り込み
ストレージエンジン
Pushdown なし
28
Copyright © 2013, Oracle and/or its affiliates. All rights reserved.
WHERE 句で
絞り込み
ストレージエンジン
Pushdown あり
並列処理
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. ユーザー定義パーティショニング
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.
ユーザー定義パーティショニング
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 ノード群
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. 電源
USB x 4 x 2
100Mbps
8 ポート
スイッチングハブ
BeagleBone
Black x 6
40
Copyright © 2013, Oracle and/or its affiliates. All rights reserved.
43. ベンチマーク結果: BeagleBone Black / sysbench
tps
sysbench 0.5 without ranges
250
200
Aro
Arw
150
Bro
Brw
Cro
100
Crw
Dro
Drw
50
0
0
43
10
Copyright © 2013, Oracle and/or its affiliates. All rights reserved.
20
30
40
50
60
70
Threads
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. ベンチマーク結果についての考察
●
数値自体はかなり良い
–
●
マシンが速かったお陰か( 32 スレッド+ InfiniBand )
データノード数に応じてスケールしなかった原因
–
–
SQL ノードを増やせなかったことが原因か
–
●
テストが不完全だったため確実なことは言えない
より多くのノードを使って再検証予定
B パターンの性能が上がらなかったのは測定ミスの可能性
–
47
再検証で明らかにしたい
Copyright © 2013, Oracle and/or its affiliates. All rights reserved.
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.
52. Pint In Time リカバリ
●
ndb_restore + バイナリログ
–
ndb_restore が Epoch と呼ばれる情報を格納
–
Epoch からバイナリログポジションを特定
–
mysqlbinlog コマンドで特定したポジションから再実行
●
52
任意のポジションで停止可能
Copyright © 2013, Oracle and/or its affiliates. All rights reserved.
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. ●
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.