MySQL Clusterを
運用して10ヶ月間
MySQL Cluster Casual Talks #2
2014/06/25
誰
❖ いとう ひろゆき
❖ サーバ運用/保守が仕事
❖ ネットワークからOS、ミドルウェアまでアプリケーシ
ョン以外はなんでも面倒を見ないといけない(程度の差
はあります)
❖ MySQL好き。酒好き。
お題
❖ サーバ構成
❖ パラメータ検討
❖ サービスインから発生した障害と対応
❖ 監視について
❖ その他
❖ 終わりに
サーバ構成
LB
WEB/SQLノード/管理ノード(2台)
データノード
1ノードグループ構成
パラメータ検討
H/Wに適したパラメータは?
InnoDBみたいなお約束なパラメータはあるの?
とりあえず情報収集
データノードのパラメータ
http://dev.mysql.com/doc/refman/5.6/en/mysql-cluster-ndbd-
definition.html
❖ MaxNoOfExecutionThreads (デフォルト2)
❖ ndbmtdのみのパラメータ
❖ 主要な動作スレッドの動作スレッド数が決まる
❖ LDM, TC, Send, Receive Threads
❖ 設定数によってスレッド数は自動設定される
❖ 最大で物理CPUコア数と同じにする(目安)
❖ 7.3系では最大36まで指定可能
❖ ThreadConfig
❖ MaxNoOfExecutionThreadsより詳細に動作スレッドを指定可能
❖ 設定例
❖ ThreadConfig=main={cpubind=1},ldm={count=4,cpubind=2,3,8,
9},recv={cpubind=5},rep={cpubind=7},io={cpubind=4}
❖ 各スレッドがどのCPUコアで動作するか固定される(taskset的な)
❖ Numa (デフォルト1)
❖ /proc/[ndbmtdのPID]/numa_maps を見る限り numactl --
interleave=all で起動してくれる
❖ NUMA環境ならSwap Insanity対策のためにも
❖ ODirect(デフォルト0)
❖ innodb_flush_method=O_DIRECTと同様ダイレクトIOを使用
❖ TransactionDeadlockDetectionTimeout(デフォルト1200)
❖ 設定値の単位はmsなので1.2秒がデフォルト
❖ tcがクエリ実行を待てる時間。innodb_lock_wait_timeoutに近い
感じ。大きすぎるとデッドロック待ちでクエリが滞留してしまう
事がある。大きすぎる設定値はMaxNoOfConcurrentScansの上限
に引っかかる原因になったりする。
❖ MaxNoOfConcurrentScans(デフォルト256, 最大500)
❖ スキャンクエリの最大並列実行数(テーブルスキャン、インデッ
クススキャンで利用される)
❖ データノード単位で持つのでデータノードの数が2個なら最大並
列実行数は1000になる
❖ InnoDBには無い制限なので瞬間的に大量のアクセスが来た場合
にSQLノードのエラーログにToo many active scansと出力され
ていることがあります
❖ MaxNoOfConcurrentTransactions(デフォルト4096)
❖ データノード全体で同時実行可能なトランザクション数(でも1ト
ランザクションで1消費するわけではない)
❖ MaxNoOfConcurrentScansと同様データノード単位で持つ値
❖ マニュアルより計算式
❖ TotalNoOfConcurrentTransactions = (maximum number of
tables accessed in any single transaction + 1) * number of
cluster SQL nodes
❖ NoOfFragmentLogFiles(デフォルト16)
❖ Redoログのファイル数。
❖ FragmentLogFileSize(デフォルト16MB)
❖ Redoログ1つのファイルサイズ
❖ デフォルトの場合 NoOfFragmentLogFiles * 4 *
FragmentLogFileSizeで1024MB
❖ The default parameter value is 16, which by default means 16
sets of 4 16MB files for a total of 1024MB)
SQLノードのパラメータ
http://dev.mysql.com/doc/refman/5.6/en/mysql-cluster-program-
options-mysqld.html
❖ ndb-cluster-connection-pool(デフォルト1)
❖ SQLノードがデータノード1つ辺りに接続する数
❖ 増やすと接続数が増えるので負荷状況次第で性能が向上
❖ 但し増やすとSQLノードとしてのNodeIdが消費されるため、
config.iniに書く[MYSQLD]の数を増やす必要がある
❖ query_cache_type, query_cache_size
❖ MySQL Cluster環境では無効にする
サービスインから発生した
障害と対応
障害1
❖ SQLノードのエラーログに以下内容が出力
❖ [ERROR] /usr/local/mysql/bin/mysqld: Got temporary error 245 'Too many
active scans' from NDBCLUSTER
❖ 対応
❖ そもそも受けきれないのならフロントのWeb(Apache)のMaxClientsを下
げる(一時しのぎ)。
❖ TransactionDeadlockDetectionTimeoutをリトライ処理しっかりしてるな
ら小さくする
❖ クエリの見直し
障害2
❖ データノードのログに以下内容が出力
❖ Signal lost, out of long signal memory, please increase
LongMessageBuffer (Resource configuration error)
❖ 対応
❖ LongMessageBufferを増やす。
❖ 使用していたバージョンではデフォルトが4MBだった
❖ This parameter seldom needs to be changed from the default.
❖ 7.3.5から64MBがデフォルトに(#^ω^)ビキビキ
障害3?
❖ 仮想環境のndbd 3 x 2ノードグループをndbmtdの3 x 1ノ
ードグループへ変更する際に発生。
❖ 良くない事に時間がなく、ノードグループ数が変わる場
合にstart backupで取れるバックアップデータを使用出
来るか検証出来なかった。そのためmysqldumpしてリス
トアを試みました
障害3?
❖ 結果、見事にリストア時にエラーが発生
❖ 出力メッセージ
❖ Got temporary error 410 'REDO log files overloaded (decrease
TimeBetweenLocalCheckpoints or increase NoOfFragmentLogFiles)' from
NDBCLUSTER
❖ マニュアル見る(http://dev.mysql.com/doc/refman/5.6/en/mysql-
cluster-ndbd- definition.html#ndbparam-ndbd-
timebetweenlocalcheckpoints)
障害3?
❖ マニュアルより
❖ All the write operations in the cluster are added together. Setting
TimeBetweenLocalCheckpoints to 6 or less means that local
checkpoints will be executed continuously without pause,
independent of the cluster's workload.
❖ TimeBetweenLocalCheckpointsを6以下にしてリストア
して成功
❖ しかしndbmtdの再起動が発生したため大きく時間ロス。
障害4
❖ デイリーのcronのタイミングでndbmtdが落ちる
❖ 出力メッセージ
INFO -- Internal program error (failed ndbrequire)
INFO -- DBTC (Line: 7783) 0x00000002
INFO -- Error handler shutting down system
INFO -- Error handler shutdown completed - exiting
ALERT -- Node 20: Forced node shutdown completed. Caused by
error 2341: 'Internal program error (failed ndbrequire)(Internal error, programming error or
missing error message, please report a bug). Temporary error, restart node'.
障害4
❖ 環境依存せず複数環境で発生
❖ 最悪のケースで全部のデータノードが停止(1回だけ)
❖ 気付いたらスワップ使っていた
❖ I/O負荷の高いであろうcron(updatedb実行)を停止
❖ スワップとの兼ね合いでTimeBetweenWatchDogCheckに引っか
かって停止したと考えられたため
❖ ついでにvm.swappiness = 0 に設定
監視について
データノード
❖ CPUコア毎の使用率を監視
❖ ロードアベレージ監視やCPU使用率監視(全体)はあまり役に立た
ない
❖ 負荷の高い状態でもロードアベレージがほとんど上がらない(せ
いぜいldmスレッド数+1,2ぐらい)
データノード
❖ ネットワークトラフィックを監視
❖ データノードの特徴として負荷が無い状態でもネットワークトラ
フィックが発生する
❖ 極端にトラフィックが発生しなくなったら何かしら異常が発生し
ているためアラートとする
❖ 負荷が無い状態でも100Kbps前後は常時トラフィックが発生
❖ 現在サービス中のデータノードでは負荷が最も低い時間でも
10Mbps前後で推移
データノード
❖ DataMemory, IndexMemoryの使用率監視
❖ 管理ノード(ndb_mgmd)で定期的にチェック
ndb_mgm> all report memoryusage;
Connected to Management Server at: localhost:1186
Node 1: Data usage is 30%(177824 32K pages of total 589824)
Node 1: Index usage is 11%(44203 8K pages of total 393344)
Node 2: Data usage is 30%(177824 32K pages of total 589824)
Node 2: Index usage is 11%(44203 8K pages of total 393344)
Node 3: Data usage is 30%(177894 32K pages of total 589824)
Node 3: Index usage is 11%(44313 8K pages of total 393344)
Node 4: Data usage is 30%(177894 32K pages of total 589824)
Node 4: Index usage is 11%(44313 8K pages of total 393344)
ndb_mgm>
SQLノード
❖ 通常のMySQLと同様、接続監視は必須
❖ 但しengine=ndbなテーブルに対する参照や更新処理が行えるか
設定するべき
❖ DBのデータがデータノードにあるMySQL ClusterだがSQLノードも
割とリソース消費するので一般的な監視は行い、台数を増やすタイ
ミングに気を配る
その他
OS周り
❖ パケットドロップやエラーは発生しにくいように設定
❖ NICのリングバッファは最大に(RXは必須)
❖ RSS対応NICを使用する
❖ データノードでスワップ発生は致命的
❖ vm.swappiness=0に設定しつつメモリに余裕があるか安定するま
では気を配る
使用バージョン
❖ MySQL Clusterに関してはリリースされている最新バー
ジョンを使用する
❖ 7.2系と7.3系でJOINの性能がクエリによって本当に30倍ぐらい差
が出るため
❖ 7.2系だと30秒前後かかるが7.3系だと1秒もかからないクエリ
に実際に遭遇
終わりに
❖ MySQL Clusterは通常のMySQLと比較するとレンジ系のク
エリ、セカンダリインデックスを使用したクエリが苦手。
かつ結構制限があるので注意が必要
❖ 設定を間違えない限りは1台ダウンしてもサービスは継続
するので運用している側からすると喜楽
❖ 落ちたら起動すれば自動的に復旧する
❖ 主キーに対するconstなSELECTはひたすら速いしクエリに
よってはデータノードを増やせば勝手にスケールする
❖ 新しいバージョンならJOINも十分高速
❖ MySQL Clusterは標準機能として冗長化される、クエリ
によってはノードを増やせばスケールするといったメリ
ットはあるが、先に挙げた通り向き不向き、制限がある
ので通常のMySQLの方が向いているケースも多いので
事前に十分に検討を行って下さい

More Related Content

PPTX
dimSTATから見るベンチマーク
PDF
ゆるふわMySQLフェイルオーバー
PDF
MySQL 4.0で9年動き続けたサーバを リプレイスしてバージョンアップした話
PDF
MySQL Cluster 7.4で楽しむスケールアウト @DB Tech Showcase 2015/06
PDF
MySQLの冗長化 2013-01-24
PDF
Art of MySQL Replication.
PPTX
MySQLメインの人がPostgreSQLのベンチマークをしてみた話
PPTX
最近始めたあなたも今日から語れるようになるMySQLの{概要と最新情報}入門@
dimSTATから見るベンチマーク
ゆるふわMySQLフェイルオーバー
MySQL 4.0で9年動き続けたサーバを リプレイスしてバージョンアップした話
MySQL Cluster 7.4で楽しむスケールアウト @DB Tech Showcase 2015/06
MySQLの冗長化 2013-01-24
Art of MySQL Replication.
MySQLメインの人がPostgreSQLのベンチマークをしてみた話
最近始めたあなたも今日から語れるようになるMySQLの{概要と最新情報}入門@

What's hot (19)

PDF
MySQL Clusterのトラブル事例
PDF
MySQL5.7とMariaDB10.1の性能比較(簡易)
PDF
MySQL Cluster 解説 & MySQL Cluster 7.3 最新情報
PPT
Handlersocket 20140218
PPTX
MySQL clients
PPTX
innodb_thread_concurrencyとtransparent hugepageの影響
PDF
MHAの次を目指す mikasafabric for MySQL
PDF
カジュアルにMySQL Clusterを使ってみよう@MySQL Cluster Casual Talks 2013.09
PDF
Mysql toranomaki
PDF
MySQL 5.7とレプリケーションにおける改良
PPTX
MySQLの運用でありがちなこと
PDF
MHA for MySQLとDeNAのオープンソースの話
PDF
MySQL 5.7の次のMySQLは
PDF
tcpdump & xtrabackup @ MySQL Casual Talks #1
PDF
MySQLバックアップの基本
PDF
What's New in MySQL 5.7 InnoDB
PDF
[C21] MySQL Cluster徹底活用術 by Mikiya Okuno
PDF
MySQL 5.6新機能解説@dbtechshowcase2012
PDF
MySQL 5.7 InnoDB 日本語全文検索
MySQL Clusterのトラブル事例
MySQL5.7とMariaDB10.1の性能比較(簡易)
MySQL Cluster 解説 & MySQL Cluster 7.3 最新情報
Handlersocket 20140218
MySQL clients
innodb_thread_concurrencyとtransparent hugepageの影響
MHAの次を目指す mikasafabric for MySQL
カジュアルにMySQL Clusterを使ってみよう@MySQL Cluster Casual Talks 2013.09
Mysql toranomaki
MySQL 5.7とレプリケーションにおける改良
MySQLの運用でありがちなこと
MHA for MySQLとDeNAのオープンソースの話
MySQL 5.7の次のMySQLは
tcpdump & xtrabackup @ MySQL Casual Talks #1
MySQLバックアップの基本
What's New in MySQL 5.7 InnoDB
[C21] MySQL Cluster徹底活用術 by Mikiya Okuno
MySQL 5.6新機能解説@dbtechshowcase2012
MySQL 5.7 InnoDB 日本語全文検索
Ad

Viewers also liked (13)

PDF
NDBCLUSTERを使わない理由
PDF
5分で作るMySQL Cluster環境
PPTX
チューニンガソン5の復讐
PPT
Linux/DB Tuning (DevSumi2010, Japanese)
PDF
Introduction to Project atomic (CentOS Dojo Bangalore)
PDF
Docker向け軽量os 3製品比較
PDF
Multi thread slave_performance_on_opc
PDF
【18-E-3】クラウド・ネイティブ時代の2016年だから始める Docker 基礎講座
PDF
MySQLアンチパターン
PDF
10GbE時代のネットワークI/O高速化
ODP
Memory management in Linux
PDF
MySQLerの7つ道具 plus
PDF
データモデルについて知っておくべき7つのこと 〜NoSQLに手を出す前に〜
NDBCLUSTERを使わない理由
5分で作るMySQL Cluster環境
チューニンガソン5の復讐
Linux/DB Tuning (DevSumi2010, Japanese)
Introduction to Project atomic (CentOS Dojo Bangalore)
Docker向け軽量os 3製品比較
Multi thread slave_performance_on_opc
【18-E-3】クラウド・ネイティブ時代の2016年だから始める Docker 基礎講座
MySQLアンチパターン
10GbE時代のネットワークI/O高速化
Memory management in Linux
MySQLerの7つ道具 plus
データモデルについて知っておくべき7つのこと 〜NoSQLに手を出す前に〜
Ad

Similar to MySQL Clusterを運用して10ヶ月間 (20)

PPTX
[A22] SE(SE One)をもっと有効活用しよう(db tech showcase 大阪 2014)
PDF
Pacemaker+DRBDでHAクラスタを作る
PPTX
20140518 JJUG MySQL Clsuter as NoSQL
PDF
[db tech showcase Tokyo 2015] C17:MySQL Cluster ユーザー事例紹介~JR東日本情報システム様における導入事例...
PDF
お金が無いときのMySQL Cluster頼み
PDF
Hadoopのシステム設計・運用のポイント
PDF
MySQL Cluster 新機能解説 7.5 and beyond
PDF
守る - cybozu.com 運用の裏側
PDF
Pacemaker 操作方法メモ
PDF
NTTデータ流 Hadoop活用のすすめ ~インフラ構築・運用の勘所~
PDF
20121115 オープンソースでハイアベイラビリティ! ~クラスタ管理の設計構築ハウツー&エンジニア思考力~
PDF
Hadoop operation chaper 4
PPTX
OpenMange Power Center のご紹介
PDF
Guide to Cassandra for Production Deployments
PDF
最新版Hadoopクラスタを運用して得られたもの
PPT
BP Study #16
PDF
オープンソース統合運用管理ツール『Hinemos』 --- その利便性及びインシデント管理について ---
PDF
hbstudy#06
PDF
MySQL at Yahoo! JAPAN #dbts2018
PDF
Cloudera Manager4.0とNameNode-HAセミナー資料
[A22] SE(SE One)をもっと有効活用しよう(db tech showcase 大阪 2014)
Pacemaker+DRBDでHAクラスタを作る
20140518 JJUG MySQL Clsuter as NoSQL
[db tech showcase Tokyo 2015] C17:MySQL Cluster ユーザー事例紹介~JR東日本情報システム様における導入事例...
お金が無いときのMySQL Cluster頼み
Hadoopのシステム設計・運用のポイント
MySQL Cluster 新機能解説 7.5 and beyond
守る - cybozu.com 運用の裏側
Pacemaker 操作方法メモ
NTTデータ流 Hadoop活用のすすめ ~インフラ構築・運用の勘所~
20121115 オープンソースでハイアベイラビリティ! ~クラスタ管理の設計構築ハウツー&エンジニア思考力~
Hadoop operation chaper 4
OpenMange Power Center のご紹介
Guide to Cassandra for Production Deployments
最新版Hadoopクラスタを運用して得られたもの
BP Study #16
オープンソース統合運用管理ツール『Hinemos』 --- その利便性及びインシデント管理について ---
hbstudy#06
MySQL at Yahoo! JAPAN #dbts2018
Cloudera Manager4.0とNameNode-HAセミナー資料

MySQL Clusterを運用して10ヶ月間