MySQL Cluster 技術入門

松信 嘉範 (MATSUNOBU Yoshinori)
MySQL株式会社
シニアコンサルタント
ymatsunobu@mysql.com

Copyright 2007 MySQL AB

The World’s Most Popular Open Source Database1

Agenda• MySQL社の紹介• MySQL Cluster技術解説

Copyright 2007 MySQL AB

The World’s Most Popular Open Source Database

2

MySQL社の紹介• 1995年に設立、日本法人は2006年2月に設立• 社員数約400名、世界24カ国に在籍• 海外での圧倒的な人気– 1,000万以上のインストールベース– 5万ダウンロード/日• TCOの削減を実現– 浮いた費用を用いて品質を向上させるアプローチも可能• 豊富な周辺ツール• 多数のパートナー企業– 住商情報システム様、 HP様、NTTコムウェア様、スマートスタイル様、NRI様他

Copyright 2007 MySQL AB

The World’s Most Popular Open Source Database

3

MySQLを利用している企業• High Volume Websites–––––––Web 2.0
Dynamic contenteCommerce”Look to Book”
Session ManagementGaming & entertainment
Scale Outcraigslist• Enterprise–––Data Warehousing
High-Volume OLTP
Scale Out• Embedded–

Bundled in software applications &hardware components

Copyright 2007 MySQL AB

The World’s Most Popular Open Source Database4先のセッションの復習(1)•MySQL Replication– MySQLが標準機能として持っている– マスター/スレーブ型の非同期レプリケーション– 参照のスケールアウトが可能 (L/Bによるスレーブ分散が一般的)– セットアップが非常に簡単– マスターのHAの仕組みを標準では持っていない– マルチマスターは可能だが、多少複雑で一般的ではない• 特にフェイルバックは難しい

マスター

スレーブ

Copyright 2007 MySQL AB

スレーブ

The World’s Most Popular Open Source Database5先のセッションの復習(2)• Heartbeat + DRBD/SAN + MySQL Replication– マスターのHAを実現– Active/Standby型クラスタ構成– DRBDを使えば共有ディスクは不要– アプリケーションから見て透過的にフェイルオーバー可能– スレーブは別途追加可能– 停止検知→完全停止→fsck→マウント→mysqld起動までダウンタイムになる– 起動後、キャッシュに乗るまでの性能は悪い マスター
マスター(Passive)(Active)– 99.99%の可用性(目安)

スレーブ

Copyright 2007 MySQL AB

スレーブ

The World’s Most Popular Open Source Database

6

MySQL Clusterの特徴(1)•MySQLのストレージエンジンの1つ「NDB」––InnoDBやMyISAMなどのかわりに使う。共存も可能
CREATE TABLE xxx (xxx) ENGINE=NDB;•

最初のバージョンは、2004年にMySQL4.1としてリリース•

インメモリで動作するため非常に高速––

テーブルデータをメモリ上に置くということ
5.1からはデータ領域をディスクに置くことも可能•

インデックス領域は必ずメモリ上に置かれる(高速化のため)••

mysqldを数多く並べることでスケールアウト可能「NDB API」を直接使うことで、超高速化が可能••

トランザクション対応
行レベルロックとMVCCをサポート

Copyright 2007 MySQL AB

The World’s Most Popular Open Source Database

7

MySQL Clusterの特徴(2)• シェアードナッシング型構成• 特別なハードウェアは不要– Data Nodeは64bit機を強く推奨– 共有ディスクは不要• 同期レプリケーションをしている• 高速なフェイルオーバー(秒単位のレベル)• オンラインバックアップが可能

Copyright 2007 MySQL AB

The World’s Most Popular Open Source Database

8

MySQL Clusterの基本アーキテクチャ
mysqldのクライアント→

mysqld:Data Node(ndbd)のクライアント(複数台)→

Web/App
ServerMySQL Server または NDB API
経由で参照/更新を行なう

Web/App
ServerMySQL
ServerMySQL
ServerNDB API

Memory&Disk

DataNode

NDB
Storage Engine

Management
Server
DataNode↑ndbd: レコード本体を格納(複数台)Management
ServerMySQL Cluster
Copyright 2007 MySQL AB

The World’s Most Popular Open Source Database

9

MySQL Clusterの構成要素•

データノード(Data Node)––––•

レコードの保管場所
複数台で同期レプリケーションされる
レプリケーションの仕組みは、mysqldが持っているレプリケーションとは別物
複数台並べて冗長性を高める

SQLノード(SQL Node)––SQL文の構文解析等を担当するノード
通常のmysqldプロセスが該当•––•

NDB APIを用いて自作プログラムを書くことも可能

NDBストレージエンジンでは、レコードをここでは持たない複数台並べてスケールアウト可能

管理ノード(Management Nodes)–

Data NodeとSQLノードの起動時やフェイルオーバー時などに必要

Copyright 2007 MySQL AB

The World’s Most Popular Open Source Database10

ハードウェア/OS要求スペック
論理ノード数・最低3ノード
・最大64ノード、48Data NodeCPU・x86_32またはx86_64、PowerPC、SPARC
・メモリ要求から、64ビットを強く推奨

メモリ・データサイズやData Node数、レプリケーション設定に依存
・Data Node1個あたり16GB～32GB程度が一般的

ディスク

・Data Nodeでも書き込みはある。RAID5は避ける

ネットワーク・Gigabit Ethernetを推奨
・Dolphin Expressにより高速化が可能

OS・Linux、Solaris、HP-UX、AIX等
・Windowsは現在未サポート

Copyright 2007 MySQL AB

The World’s Most Popular Open Source Database11アプリケーションとの相性
テーブルサイズ・メモリ上におさまる範囲
・漸増型テーブルはハウスキーピングを考慮
・5.1ではディスク上への保存も可能

フェイルオーバー

・Data Nodeは自動でフェイルオーバー
・数秒単位でのフェイルオーバーが可能(99.999%の可用性)

リカバリ

・起動時に自動的に最新の状態に復旧

SQL文との相性

・主キー検索、一意キー検索が非常に高速
・ジョインは避ける

データ型

・固定長型(INTEGER等)は良い・TEXT/BLOB型は避ける
・VARCHAR型は5.0まで固定長として扱われる・キャラクタセットと占有バイト数を考慮(VARCHAR(100) CHARSET latin1/utf8)

Copyright 2007 MySQL AB

The World’s Most Popular Open Source Database12

Data Nodeのアーキテクチャ
テーブルデータは分散配置される(主キー値からの線形ハッシュ計算による割当)
ID

CapitalCountry1

Copenhagen

Denmark 22Berlin

Germany 23

New York City USA

Data
NodeUTC
Partition 1-54TokyoJapan

95Athens

Greece26MoscowRussia

47OsloNorway28Beijing

China8• Data Node(4つ)• レプリカ単位(2つ)• ノードグループ(2つ)

Data
Node

P1-Primary

P1-Secondary

P2-Secondary

P2-PrimaryPartition 2

Node Group 1
Partition 3
Partition 4

Data
Node

Data
Node

P3-Primary

P3-Secondary

P4-Secondary

P4-Primary

Node Group 2
Data Node数 = レプリカ単位 × ノードグループ数
Copyright 2007 MySQL AB

The World’s Most Popular Open Source Database13

Data Nodeのアーキテクチャ(2)ID

CapitalCountry1

Copenhagen

Denmark 22

BerlinGermany 23

New York City USA-54TokyoJapan

95

AthensGreece26Moscow

Russia47OsloNorway28Beijing

China8Data
X
NodeUTC

Data
Node

Partition 1
Partition 2

P1-Primary

P1-Secondary

P2-Secondary

P2-PrimaryPartition 3
Partition 4

Node Group 1

Data
X
Node

ノードグループ内の全ノードが全滅しない限りサービスの継続が可能

サービスの継続が可能

Data
Node

P3-Primary

P3-Secondary

P4-Secondary

P4-Primary

Node Group 2
Copyright 2007 MySQL AB

The World’s Most Popular Open Source Database

14

設定方法
• config.ini– MySQL Clusterの設定ファイル– 全体で1個– my.cnfとは別物 (my.cnfは別途
SQL Nodeごとに作成する)– Management Nodeの起動時に読み込まれる[NDBD DEFAULT]NoOfReplicas=2
DataMemory=10G
IndexMemory=7G[NDBD]
Id=1
HostName=ndbd_ip
DataDir=/path/to/ndbd[NDBD]
Id=2
HostName=ndbd_ip
DataDir=/path/to/ndbd…

Copyright 2007 MySQL AB

The World’s Most Popular Open Source Database

15MySQL Clusterによるスケールアウト
MySQL
ServerMySQL
ServerMySQL
ServerMySQL
ServerMySQL
ServerNDB API

Data
Node

Data
Node

NDB
Storage Engine

Data
Node

Data
Node

ManagementServerManagementServer

MySQL Cluster
アプリケーションパーティショニングよりも簡単にスケールアウト可能
Copyright 2007 MySQL AB

The World’s Most Popular Open Source Database

16

MySQL Clusterによるスケールアウト(フェイルオーバー時)

MySQL
ServerXMySQL
ServerXMySQL
ServerXMySQL
ServerXMySQL
ServerNDB API

Data
NodeData
X
NodeNDB
Storage Engine

Data
NodeData
X
NodeManagement
ServerManagement
X
ServerMySQL Cluster
Copyright 2007 MySQL AB

The World’s Most Popular Open Source Database

17

耐障害性

サービス継続コネクション継続トランザクション
継続

SQL Node障害○△△

Data Node障害○○○

Management
Node障害○○○SQL-Data
Node間障害○○×

Data-Data
Node間障害○○×

Copyright 2007 MySQL AB

The World’s Most Popular Open Source Database18

Data Node障害の検知メカニズム
DataNodeData
Node

Data
Node

Data
Node

Data
Node

Data
Node

Data
Node

Data
Node

Data
Node

Data
Node

Data
Node

Data
NodeData
Node

Data
Node

Data
Node

Data
Node

Copyright 2007 MySQL AB

The World’s Most Popular Open Source Database19

Data Nodeの障害とリカバリ••

Server 3 の障害が検知されるServer 4 が Server 3 への処理要求も処理する

1 Data2 Data3 Data4 Data

Node

Node

Node

Node

P1 - Primary

P1 - Replica

P3 - Primary

P3 - Replica

P2 - Replica

P2 - Primary

P4 - Replica

P4 - Primary

Node Group 0

Copyright 2007 MySQL AB

Node Group 1

The World’s Most Popular Open Source Database20

Data Nodeの障害とリカバリ•

Server 3 は Server 4 をコピーする•

障害後の差分をコピー

1 Data2 Data3 Data4 Data

Node

NodeNode

NodeP1 - Primary

P1 - Replica

P3 - Primary

P3 - Replica

P2 - Replica

P2 - Primary

P4 - Replica

P4 - Primary

Node Group 0Copyright 2007 MySQL AB

Node Group 1

The World’s Most Popular Open Source Database21

Data Nodeの障害とリカバリ•リカバリが終われば、通常通り処理要求をさばくようになる

1 Data2 Data3 Data4 Data

Node

Node

NodeNodeP1 - Primary

P1 - Replica

P3 - Primary

P3 - Replica

P2 - Replica

P2 - Primary

P4 - Replica

P4 - Primary

Node Group 0

Copyright 2007 MySQL AB

Node Group 1

The World’s Most Popular Open Source Database22データの永続性• インメモリデータベース• 本体プロセスが停止したらデータは消失する?
– MEMORYストレージエンジンなら消失する• 消失したら困るケースがほとんど• 消失しない仕組みを持っている• 定期的にディスクに書き込む– チェックポイント処理• ローカルチェックポイント(LCP)• グローバルチェックポイント(GCP)

Copyright 2007 MySQL AB

The World’s Most Popular Open Source Database23チェックポイント処理
メモリの中身をディスクに書き出す処理•ローカルチェックポイント (LCP)––––––

全テーブルデータをディスクに書き出す
全Data Node上で実行
更新/参照処理を一切ブロックしない
設定パラメータで間隔を制御可能
シャットダウン時にも実行される
起動時はLCPによって生成されたファイルを読み込む
UNDO
Log

Data
Node

LCP

Copyright 2007 MySQL AB

The World’s Most Popular Open Source Database24チェックポイント処理•

グローバルチェックポイント (GCP)– トランザクションのコミット情報をディスクに書く– コミット時同期書き込みではない• 別ノードに同期レプリケーションすることで代用– 設定パラメータで間隔を制御可能 (デフォルト2秒)

Data
Node

Transactions
Synchronized

Data
Node

REDO
Log
GCP

Copyright 2007 MySQL AB

GCPThe World’s Most Popular Open Source Database25オンラインバックアップ・リカバリ
バックアップ•••••オンラインバックアップが可能
Management Nodeで実行
各Data Nodeにバックアップ指示が行く
各Data Nodeのローカルディスク上にバックアップ
参照/更新ともブロックしない

リストア• ndb_restore –m でメタデータをリストア• ndb_restore –r で実データをリストア• 全Data Nodeで繰り返すCopyright 2007 MySQL AB

The World’s Most Popular Open Source Database

26

MySQL Cluster間のレプリケーション(5.1-)
Writes & Reads

Web/AppServerWrites
relaybinlog
mysqldI/O
Threadbinlog_index

SQLThreadindex &binlogs

Data Nodes
NDB

Data Nodes
NDB

binlogReplication
mysqldapply_status

MySQL Master
MySQL Cluster

MySQL SlaveMySQL Cluster

主にディザスタリカバリーの用途
Copyright 2007 MySQL AB

The World’s Most Popular Open Source Database

27

MySQL Cluster NDB API•••••

NDBストレージエンジン(Data Node)に直接アクセスする
ためのC++ API
Java版もある (NDB/J)ODBCやJDBCなどの標準には準拠していない。独自仕様
mysqldを必要としない (mysqldはNDB APIを用いてDataNodeにアクセスしている)
Web上でAPIが公開されている

http://dev.mysql.com/doc/ndbapi/en/index.html

Copyright 2007 MySQL AB

The World’s Most Popular Open Source Database

28

NDB APIの例
myTransaction = myNdb->startTransaction();myOperation = myTransaction->getNdbOperation(myTable);myOperation->readTuple();myOperation->equal("ATTR1", i);myRecAttr = myOperation->getValue("ATTR2", NULL);
if (myRecAttr == NULL) APIERROR(myTransaction->getNdbError());
if(myTransaction->execute( NdbTransaction::Commit ) == -1)
APIERROR(myTransaction->getNdbError())
printf(" %2d %2d¥n", i, myRecAttr->u_32_value());
myNdb->closeTransaction(myTransaction);

Copyright 2007 MySQL AB

The World’s Most Popular Open Source Database

29

MySQL Clusterのチューニング
• サーバ構成– Data NodeとSQLノードの台数分
散– Data Nodeの動的追加は運用上難しい• ジョインは避ける• my.cnf– table_cache– ndb_force_send– ndb_use_exact_count– engine_condition_pushdown
Copyright 2007 MySQL AB• config.ini– DataMemory– IndexMemory– NoOfReplicas– NoOfFragmentLogFiles– TimeBetweenLocalCheckpoints– TimeBetweenGlobalCheckpoints– DiskCheckpointSpeed (5.1)– MaxNoOfConcurrentTransactions– MaxNoOfConcurrentOperations– MaxNoOfAttributes– MaxNoOfTables– MaxNoOfOpenFiles– RedoBuffer– SendBufferMemory
The World’s Most Popular Open Source Database30

DBT-2ベンチマークの結果•

TPC-Cと類似したOLTP型ベンチマーク•ベンチマーク結果 (Ethernet, 中間報告)––––•

変動要因は多い––––––•

2台のマシンにndbd, mysqld同居 → 22,000tpm
2台にndbd、4台にmysqld →70,000tpm
mysqldの配置によってはもっと高い値を出せると思われる
InnoDBやMyISAM1台構成で70,000tpmは不可能 →スケールアウト

アプリケーションの性質
テーブル設計SQL文
パラメータ設定
サーバ台数と配置
ネットワークカード

チューニングは重要– コンサルティングやトレーニングは有効な手段

Copyright 2007 MySQL AB

The World’s Most Popular Open Source Database

31

MySQL Clusterに向かないもの•NDBテーブル間のジョイン– ジョインは極力避けるようにテーブル設計とクエリを考慮•

レコードサイズが急増し、退避もできないもの– Data Nodeの追加は、長時間のシステム全面停止を伴うので難しい※Data Node数固定で、メモリを増設するのであればサービス停止無しでDataMemory,IndexMemoryの増加が可能• メモリの動的追加が可能なハードウェアが比較的安価で購入可能– ノード数が多ければ、その分1ノードあたりのメモリ消費量は少なくなる– 最初の見積が大事• サイジングをする• ndb_size.pl– サイズの大きな列を排除できればかなり多くのレコードを扱える– ハウスキーピングが理想•巨大なTEXT/BLOBデータ– テーブルを分けて別のストレージエンジンで扱うと良い

Copyright 2007 MySQL AB

The World’s Most Popular Open Source Database

32

MySQLコンサルティングサービス– MySQLアーキテクチャデザイン
– MySQL Cluster Jumpstart– MySQL Scale-out, HA and Replication Jumpstart–––––MySQLパフォーマンスチューニングMySQLデータベース管理
MySQLマイグレーション
MySQL Time Hire
その他、MySQLの専門知識が必要なもの全般

http://www-jp.mysql.com/consulting
consulting-jp@mysql.com
Copyright 2007 MySQL AB

The World’s Most Popular Open Source Database

33

MySQL User Conference Tokyo• 2007年9月11日(火)、12日(水)• http://www-jp.mysql.com/news-andevents/news/article_1325.html• 日本科学未来館(東京・お台場)にて開催• Marten Mickos、Brian Akerらが来日予定• 事前申込は7月下旬～8月上旬頃より開始予定

Copyright 2007 MySQL AB

The World’s Most Popular Open Source Database34

Case Study: Alcatel-Lucent
Leader in fixed, mobile and converged broadband
networking, IP technology, applications and services
Products
HLR/AuC
IM-HSS
UMA
AAA

Requirements• Performance of read/write queries• ATCA hardware support• Small footprint• Flexible architecture for administration of application and database• Scalable to millions of subscribers• ACID transactions• Local and geographic redundancy• Ability to modify schemas online• Low TCO

http://www.mysql.com/why-mysql/case-studies/mysql_cs_alcatel.pdf
Copyright 2007 MySQL AB

The World’s Most Popular Open Source Database35