Upload
insight-technology-inc
View
2.907
Download
1
Embed Size (px)
Citation preview
1 Copyright © 2013, Oracle and/or its affiliates. All rights reserved.
MySQL Cluster徹底活用術
日本オラクル株式会社MySQL Global Business UnitPrincipal Technical Support Engineer
Copyright © 2013, Oracle and/or its affiliates. All rights reserved.2
免責事項
以下の事項は、弊社の一般的な製品の方向性に関する概要を説明するものです。また、情
報提供を唯一の目的とするものであり、いかなる契約にも組み込むことはできません。以下の事項は、マテリアルやコード、機能を提供することをコミットメント(確約)するものではない
ため、購買決定を行う際の判断材料になさらないで下さい。オラクル製品に関して記載されている機能の開発、リリースおよび時期については、弊社の裁量により決定されます。
Oracleと Javaは、 Oracle Corporation 及びその子会社、関連会社の米国及びその他の国における登録商標です。文中の社名、商品名等は各社の商標または登録商標である場
合があります。
Copyright © 2013, Oracle and/or its affiliates. All rights reserved.3
アジェンダ
MySQL Clusterの概要
MySQL Cluster 7.3の新機能
パフォーマンス
構成例
運用について
Copyright © 2013, Oracle and/or its affiliates. All rights reserved.4
MySQL Cluster の概要
Copyright © 2013, Oracle and/or its affiliates. All rights reserved.5
MySQL Cluster とは
● 並列分散型の RDBMS
– 複数のノードでデータと処理を分散
● シェアードナッシング・アーキテクチャ
● ネットワークを経由してノード同士が通信
● 台数に応じたスケールアウト
– ビルトインのHA機能
● MySQLサーバのストレージエンジンのひとつとして実装
– ACID準拠のトランザクション
– レプリケーションなどのMySQL 従来の機能が利用可能
– 通常のMySQLサーバーとは別プロダクト
– コミュニティ版あり(GPLv2 )
Copyright © 2013, Oracle and/or its affiliates. All rights reserved.6
MySQL Cluster の動作イメージ
データノード
SQL ノード
アプリケーション アプリケーション アプリケーション
NDB API
通常のMySQLプロトコル
管理ノード
SQL ノード SQL ノード
データノードデータノード
データノード
データノード
MGM API
Copyright © 2013, Oracle and/or its affiliates. All rights reserved.7
可用性について
● 管理ノード
– 特に必要はない
– 管理ノード不在でもデータノードは動き続ける
● ただしその間のログは取れない
● データノード
– データノード内部でデータを同期レプリケーション
– すべてのパーティションでレプリカがひとつでも生きていればOK
● SQLノード
– どのノードからでも同じデータへアクセス可能
● どれかひとつ生きていればOK
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
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プライマリ
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プライマリ
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プライマリ
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オフライン
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オフライン
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オフライン
パーティションへアクセス不能!!
Copyright © 2013, Oracle and/or its affiliates. All rights reserved.15
レプリケーション対応
データノード
データノード
データノード
データノード
データノード群
SQL ノード
マスター
データノード
データノード
データノード
データノード
データノード群
SQL ノード
スレーブ
バイナリログリレーログ
I/Oスレッド
SQLスレッド
マスタースレッド
仕組みは通常のレプリケーションと同じ
Copyright © 2013, Oracle and/or its affiliates. All rights reserved.16
レプリケーション・フェイルオーバー
データノード
データノード
データノード
データノード
データノード群
SQL ノードStandby
SQL ノードActive
マスター
データノード
データノード
データノード
データノード
データノード群
SQL ノードStandby
SQL ノードActive
スレーブ
チャネルを構成するSQL ノードに障害が発生すると F/O
Copyright © 2013, Oracle and/or its affiliates. All rights reserved.17
MySQL Cluster 7.3 の新機能
Copyright © 2013, Oracle and/or its affiliates. All rights reserved.18
MySQL Cluster 7.3 登場!!
● MySQLサーバーのバージョンが 5.6に
● 外部キー制約のサポート
● NDB APIにおけるボトルネックの解消
● Node.js用ドライバ
● Auto Installer
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 )の撤廃
Copyright © 2013, Oracle and/or its affiliates. All rights reserved.20
待望の外部キー制約サポート
● 普通に使える(尖っていない) DBMSへ一歩近づいた
– 自前で制約を実装する必要がなくなった
● 使い方は InnoDB と同じ
● 参照される(親テーブル)カラムは、主キーないしはユニークキーであること
Copyright © 2013, Oracle and/or its affiliates. All rights reserved.21
NDB API のボトルネック解消
● NDB APIの Transporter Mutexが分割された
● ひとつの SQL ノードで処理可能な性能の上限が上昇
Copyright © 2013, Oracle and/or its affiliates. All rights reserved.22
Node.js 用ドライバ
● NDB APIを用いた JavaScript用の新しいラッパー
– データノードへダイレクトにアクセスすることでパフォーマンスを稼ぐ
– 低レイテンシー
– スケーラブル
● 既に他のラッパーあり
– Java
– memcached
Copyright © 2013, Oracle and/or its affiliates. All rights reserved.23
Auto Installer
● MySQL Clusterをお手軽に構成できるユーティリティ
● Webベース
Copyright © 2013, Oracle and/or its affiliates. All rights reserved.24
パフォーマンス
Copyright © 2013, Oracle and/or its affiliates. All rights reserved.25
InnoDB との性能特性に注意
● InnoDB とは得手不得手が違う
– 同じような感覚で使うとパフォーマンスがでないことも・・・
– 如何に苦手なワークロードを克服することが重要
● 得意な処理は問題にはならない
– スケール戦略も異なる
– ハードウェア要件も異なる
Copyright © 2013, Oracle and/or its affiliates. All rights reserved.26
主キーによるルックアップは速い!
● 負荷が均等に分散するためスケールアウトが容易
SQLノード各データノードに
負荷が均等に分散
Copyright © 2013, Oracle and/or its affiliates. All rights reserved.27
細かいスキャン(範囲検索)が苦手
データノードTC
データノード データノード
SQLノード
1.スキャンリクエスト
2.他のノードへリクエスト
3.データを返送
すべてのデータノードが応答を強いられる
Copyright © 2013, Oracle and/or its affiliates. All rights reserved.28
大規模なスキャンは得意
● Engine Condition Pushdown最適化
ストレージエンジン
SQL実行部
ストレージエンジン
SQL実行部
Pushdownなし Pushdownあり
WHERE句で絞り込み
WHERE句で絞り込み
並列処理
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 で解決できないケースも拾えるようになった
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テーブル
データノード
データノード
データノード
データノード
Copyright © 2013, Oracle and/or its affiliates. All rights reserved.31
もっと高いスケーラビリティが欲しい場合→ InnoDB と連携
データノード
データノード
データノード
データノード
スレーブマスター
INNODBINNODB
スレーブ
INNODBINNODB
スレーブ
INNODBINNODB
更新
SQLノード
JOINアプリケーション
SQLノード
SQLノード
Copyright © 2013, Oracle and/or its affiliates. All rights reserved.32
memcached
データノード
データノード群
管理ノード データノード
データノード
データノード
SQLノード
SQLノード
memcached memcached
SQL ノードと同じデータにアクセス可能!!
Copyright © 2013, Oracle and/or its affiliates. All rights reserved.33
構成例
Copyright © 2013, Oracle and/or its affiliates. All rights reserved.34
アプリケーション、 SQL ノード、データノードが同居
host1 host2
データノード
SQL ノード データノード
SQL ノード
アプリケーション アプリケーション
ロ ー ド バ ラ ン サ ー
Copyright © 2013, Oracle and/or its affiliates. All rights reserved.35
Connector/J
host1 host2
データノード
SQL ノード データノード
SQL ノード
host3
アプリケーション
Connector/J
Copyright © 2013, Oracle and/or its affiliates. All rights reserved.36
MySQL Proxy
host1 host2
データノード
SQL ノード データノード
SQL ノード
host3
アプリケーション
MySQL Proxy
host4
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 ノード
Copyright © 2013, Oracle and/or its affiliates. All rights reserved.38
アプリケーションと SQL ノードが同居
データノード
データノード群
データノード
データノード
データノード
SQL ノード
アプリケーション
ロ ー ド バ ラ ン サ ー
SQL ノード
アプリケーション
SQL ノード
アプリケーション
SQL ノード
アプリケーション
SQL ノード
アプリケーション
SQL ノード
アプリケーション
UNIX Domainソケットで接続
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
Copyright © 2013, Oracle and/or its affiliates. All rights reserved.40
電源USB x 4 x 2
100Mbps8ポート
スイッチングハブBeagleBone
Black x 6
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
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
Copyright © 2013, Oracle and/or its affiliates. All rights reserved.43
0 10 20 30 40 50 60 700
50
100
150
200
250
Aro
Arw
Bro
Brw
Cro
Crw
Dro
Drw
ベンチマーク結果: BeagleBone Black / sysbench
tps
Threads
sysbench 0.5 without ranges
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
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
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
Copyright © 2013, Oracle and/or its affiliates. All rights reserved.47
ベンチマーク結果についての考察
● 数値自体はかなり良い
– マシンが速かったお陰か( 32スレッド+ InfiniBand )
● データノード数に応じてスケールしなかった原因
– テストが不完全だったため確実なことは言えない
– SQL ノードを増やせなかったことが原因か
– より多くのノードを使って再検証予定
● Bパターンの性能が上がらなかったのは測定ミスの可能性
– 再検証で明らかにしたい
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}
Copyright © 2013, Oracle and/or its affiliates. All rights reserved.49
運用のノウハウ
Copyright © 2013, Oracle and/or its affiliates. All rights reserved.50
オンラインで可能なメンテナンス操作
● バックアップ
● テーブル定義変更
– インデックスの追加・削除
– カラムの追加
● 設定変更
● アップグレード・ダウングレード
Copyright © 2013, Oracle and/or its affiliates. All rights reserved.51
バックアップ・リストア
● オンラインバックアップ機能搭載
– 高速
– 各データノードにバックアップファイルを作成
● ndb_restore コマンド
– API ノードとして動作
– バックアップファイルを読み取ってデータを再投入
● 結構遅い
Copyright © 2013, Oracle and/or its affiliates. All rights reserved.52
Pint In Time リカバリ
● ndb_restore + バイナリログ
– ndb_restoreが Epoch と呼ばれる情報を格納
– Epochからバイナリログポジションを特定
– mysqlbinlog コマンドで特定したポジションから再実行
● 任意のポジションで停止可能
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
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/
Copyright © 2013, Oracle and/or its affiliates. All rights reserved.55
Copyright © 2013, Oracle and/or its affiliates. All rights reserved.56 56