スマートスタイル TECH BLOG

データベース&クラウド技術情報

MySQL Cluster でスケールアウト検証

MySQL Cluster で各ノードのスケールアウトを検証する

MySQL Cluster の各ノード(SQL ノード・データノード)を最大 8 台ずつまで拡張し、どれだけスケール出来るのかを検証してみたいと思います。
なお、検証用のベンチマークツールとしては、tpcc-mysql を今回は使用しています。

MySQL Cluster とは

MySQL Cluster はシェアードナッシングシステムでのインメモリーデータベースのクラスタリングを可能にするテクノロジです。シェアードナッシングアーキテクチャーでは、非常に安価なハードウェアでシステムが動作し、ハードウェアやソフトウェアの要件が最小限に抑えられます。

MySQL Cluster は、単一障害点が発生しないように設計されています。シェアードナッシングシステムでは、各コンポーネントに固有のメモリーとディスクが用意され、ネットワーク共有、ネットワークファイルシステム、SAN などの共有ストレージメカニズムの使用は推奨またはサポートされません。

MySQL Cluster は、標準の MySQL Server と NDB (「Network DataBase」 を表します) と呼ばれるインメモリーのクラスタ化されたストレージエンジンを統合したものです。

[ 引用元 : MySQL リファレンスマニュアル 18.1 MySQL Cluster の概要 ]

検証環境

検証環境として Amazon Web Services(以下 AWS) 上に 最大 8×8 のノード数で MySQL Cluster 環境を以下の図のように構築しました。

MySQLCluster構成図

各インスタンスサイズ

  • 管理ノード :t2.small
  • SQLノード :t2.small
  • データノード:t2.xlarge
  • tpcc-mysql  :t2.large

実際にスケールアウト構成を検証する際には、SQL ノード 2 台、データノード 2 台からはじめ、それぞれのノード数を 4、6、8 台と増やしていき、最大 8 × 8 のノード数で検証しております。
今回は、各ノード追加後にデータのリストアを行っているため、データ再配置は全てリストア時に行われております。

また、使用パッケージ・バージョンは以下のパッケージを使用しております。

[sh] mysql-cluster-community-client-7.5.4-1.el7.x86_64.rpm
mysql-cluster-community-common-7.5.4-1.el7.x86_64.rpm
mysql-cluster-community-data-node-7.5.4-1.el7.x86_64.rpm
mysql-cluster-community-libs-7.5.4-1.el7.x86_64.rpm
mysql-cluster-community-libs-compat-7.5.4-1.el7.x86_64.rpm
mysql-cluster-community-management-server-7.5.4-1.el7.x86_64.rpm
mysql-cluster-community-ndbclient-7.5.4-1.el7.x86_64.rpm
mysql-cluster-community-server-7.5.4-1.el7.x86_64.rpm
[/sh]

tpcc-mysql は GitHub から Clone し、コンパイルしたものを使用しています。
実行に関しては、warehouse を 50、コネクションを 128、計測時間は 60 分、助走時間を 5 分としています。

各種設定ファイルは、ほぼデフォルト設定とし、下記のパラメータを追加・変更しています。
※メモリ設定等の性能に関する部分を抜粋しています。
[ini] /var/lib/mysql-cluster/config.ini
[ndbd default] NoOfReplicas = 2
DataMemory = 11264M
IndexMemory = 2048M
ODirect = true
MaxNoOfConcurrentOperations = 131072
MaxNoOfConcurrentTransactions = 131072
TimeBetweenLocalCheckpoints = 6
NoOfFragmentLogFiles = 384
[/ini] [ini] /etc/my.cnf(SQLノード)
[mysqld] ndbcluster
ndb_use_exact_count = 0
ndb_index_stat_enable = 0
ndb_force_send = 1
ndb_log_update_as_write = OFF
optimizer_switch = “engine_condition_pushdown=on”
transaction_isolation = REPEATABLE-READ
explicit_defaults_for_timestamp = ON
default_storage_engine = NDBCLUSTER
sql_mode = NO_ENGINE_SUBSTITUTION
max_connections = 1000
[/ini]

ベンチマーク

  1. データノード×2、SQLノード×2(D2 × S2)
  2. データノード×2、SQLノード×4(D2 × S4)
  3. データノード×2、SQLノード×6(D2 × S6)
  4. データノード×2、SQLノード×8(D2 × S8)
  5. データノード×4、SQLノード×2(D4 × S2)
  6. データノード×4、SQLノード×4(D4 × S4)
  7. データノード×4、SQLノード×6(D4 × S6)
  8. データノード×4、SQLノード×8(D4 × S8)
  9. データノード×6、SQLノード×2(D6 × S2)
  10. データノード×6、SQLノード×4(D6 × S4)
  11. データノード×6、SQLノード×6(D6 × S6)
  12. データノード×6、SQLノード×8(D6 × S8)
  13. データノード×8、SQLノード×2(D8 × S2)
  14. データノード×8、SQLノード×4(D8 × S4)
  15. データノード×8、SQLノード×6(D8 × S6)
  16. データノード×8、SQLノード×8(D8 × S8)
    上記の各ノード状態で tpcc-mysqlを用い、tpmC を計測した結果が下記の表となります。
S2 S4 S6 S8
D2 9,874.150 17,184.117 18,148.650 18,399.316
D4 8,589.150 18,276.301 25,260.584 26,821.684
D6 8,380.884 16,530.617 22,719.717 26,667.934
D8 9,224.533 17,906.166 24,117.684 27,118.283

トランザクション数

まとめ

  • SQL ノード 4 台まではデータノード数に関係なくスケールアウトしていますが、データノードが 2 台では、それ以上スケールアウトできませんでした。
  • データノードを 4 台、6 台、8 台と増やしていくと、SQL ノードの台数に比例してスケールしています。
  • tpcc-mysql のデータ・クエリでは、SQL ノード・データノード双方を増やしたほうがスケールし、性能向上が見込める結果となりました。
  • データノードをスケールアウトさせると、各ノードの消費メモリ量が減るので、スペックダウンも検討することが出来ると考えられます。

MySQL

 

Return Top