目次
第1章 MySQL Clusterのコンセプト
1-1 MySQL Clusterの特徴
- MySQL Clusterのユースケース
- MySQL Clusterの13の特徴
- シェアードナッシングアーキテクチャの強み
- コラム NDBCLUSTERストレージエンジン
1-2 アーキテクチャ概要
- 3種類のノード
- ノード間でデータの連係をとる仕組み
- 複製されたデータが同じであることを保証する2フェーズコミット
- データを永続化するための2つのチェックポイント処理
- 全体の性能低下を防ぐための仕組み
- データノードの内部構造をのぞく(NDBカーネルブロック)
第2章 インストールと設定
2-1 システム計画のポイント
- 3つ以上のレプリカ数を選択する際は慎重に
- ネットワークの分断でシステムを停止させない仕組み
- トポロジーの4つの方針
- コラム マルチサイトクラスター
2-2 システム要件のポイント
- サーバマシンを選定するうえで確認すべきこと
- 各ノードごとのハードウェア選定基準
- ネットワーク設計の2つのポイント
- コラム MySQL Clusterにとってのサーキット
- ディスクオブジェクトを利用する
- コラム ディスク型テーブルのクラッシュリカバリ
2-3 パッケージをインストールする
- RPMパッケージのインストール
- 全部入りパッケージのインストール
- コラム 権限テーブルを同期させる
2-4 設定ファイルを変更する
- config.iniの書式
- 管理ノードのオプション
- コラム 運用中にオプションを変更したいときに知っておきたい4つの再起動
- データノードのオプション
- メモリ割り当て
- トランザクション
- チェックポイント
- コラム REDOログのサイズはLCPとGCPのデータサイズに依存する
- バックアップ
- その他のオプション
- SQLノードのオプション
- トランスポーター(TCP)のオプション
- config.iniの設定例
- コラム 直結する場合もBondingドライバなどで経路を冗長化しておく
- コラム InfiniBandは利用できるか?
- コラム 仮想環境における設定値
第3章 基本操作を身につける
3-1 本章で利用する設定
3-2 MySQL Clusterを起動/停止する
- 下準備
- 起動手順
- 停止手順
3-3 コマンドオプションを把握する
- 共通の起動オプション
- 管理ノードの起動オプション
- データノードの起動オプション
- SQLノードの起動オプション
3-4 状態を確認する
- 管理ノード上でステータスを確認する
- SQLノード上でステータスを確認する
第4章 アプリケーションを開発するために知っておくべきこと
4-1 スキーマ設計のポイント
- テーブルを作成する
- 3種類のインデックスを把握する
- 主キーとユニークインデックスの2重構造の理由
- 5通りのインデックス構成を使い分ける
- コラム T-TREEインデックス=
- テーブルサイズを見積もる
- コラム 最新版に対応したサイジングツール「sizer」
- テーブルの定義を調べる
- ディスクオブジェクトを利用する
- コラム ディスク型テーブルを使う上での7つの注意点
- テーブルスペースを作成する
4-2 テーブルのデータを操作する
- テーブルへアクセスする2つの方法
- アプリケーションとSQLノードを同居させる
- SQLに関する制限事項
第5章 NoSQLとしてのMySQL Cluster
5-1 SQLより高い性能を発揮するNDB APIとは
- NDB APIを利用するのに必要なもの
- NDB APIを用いてアプリケーションをビルドする
- コラム GNU Autotoolsを利用して移植性を高める
5-2 プログラミングのポイント
- プログラミングの流れ
- 例1:レコードの参照
- 例2:レコードの挿入/更新/削除
5-3 スキャンの概要
- 例3:スキャン
5-4 リトライ処理を実装してエラーハンドリングする
- 例4:エラーハンドリング
5-5 ClusterJを利用する
- ClusterJの使い方
- 例5:ClusterJのサンプル
- コラム:さらにもっと詳しく知りたい方は
5-5 memcached APIを利用する
- memcachedの利点
- NDB-memcachedをセットアップする
- プレフィクスを設定する
第6章 最大限の性能を引き出すパフォーマンスチューニングの原則
6-1 基本的な設定を見直す
- 省電力機能を停止する
- NUMAの利点を生かす
- スレッド数を調整する
- Hyper-Threadingをオフにする
- コネクションプールを利用する
6-2 リアルタイム処理を効率化する
- 特定のCPUにスレッドの処理を割り当てる
- リアルタイムスケジューラーを利用する
6-3 SQLを工夫する
- JOINを高速化する
- ユーザー定義パーティショニングを利用する
- エンジンコンディションプッシュダウンを利用する
- コミットのサイズを調整する
6-4 その他の対策
- SSDを利用する
- ノード追加の効果を最大化する
- 高速なインターコネクトを利用する
- NoSQLを利用する
第7章 レプリケーション
7-1 レプリケーションの基礎
- Clusterレプリケーションのメリット
- レプリケーションの仕組み
7-2 Clusterレプリケーションをセットアップする
- 新規にセットアップする
- 既存のClusterにスレーブを追加する
- デュアルチャネルでフェイルオーバーを実装する
7-3 マルチマスターレプリケーションと衝突検出
- 衝突検出の5つの方式
- 衝突検出を設定する4つのステップ
- アプリケーションを実装する際の注意点
- ステータスを監視する
7-4 InnoDBへのレプリケーション
- 前提条件
- レプリケーションの設定手順
- マスター側のSQLノードを多重化しておく
- InnoDBをスレーブにする場合の注意点
7-5 レプリケーション利用時に注意すべきこと
- バイナリログを記録するSQLノード数を調整する
- 同じぐらいのスペックのサーバーを利用する
- スレーブの更新性能を高める
- Clusterレプリケーションを監視する
- コラム レプリケーション関連のオプション
第8章 監視のポイント
8-1 プロセスを監視する
8-2 ステータス表示コマンドを利用する
- 管理ノード上からステータス情報を得る
- コラム MasterとPresident
- データのステータスを表示する
- SQLノード上のコマンドでステータスを確認する
- コラム MySQL Cluster NDB 7.0でNDB$INFOを有効にする
8-3 ログ
- クラスターログ
- ノードログ
- データノードのエラーログとトレースログ
- コラム データノードのコアファイルの注意点
- SQLノードのログ
- コラム クラスターログに記録されるイベント
第9章 メンテナンスのコツ
9-1 バックアップとリストア
- バックアップとリストアの基本
- バックアップの準備をする
- バックアップを実行する
- バックアップの進捗状況を監視する
- バックアップを中止する
- リストアを実行する
- 特定のテーブルだけをリストアする
- バックアップファイルをCSVファイルに変換する
- ログファイルを適用する
- コラム ログファイルの中身
- Epochをリストアする
- リストアを高速化する
- シングルユーザーモードを利用する
- ロールフォワードリカバリを使う
- コラム バイナリログの意味を考えてみよう
9-2 テーブルをメンテナンスする
- テーブル定義を変更する
- インデックス統計情報を更新する
- テーブルを最適化する
- コラム フラグメンテーションが起きていることを検知するには?
9-3 ローリングリスタート
- 管理ノード
- データノード
- SQLノード
9-4 データノードを追加する
- 1. マシンの準備
- 2. config.iniを編集
- 3. ローリングリスタート
- 4. 追加したデータノードを起動
- 5. ノードグループを構成
- 6. データを再分散
- 7. 空いた領域を回収
- コラム SQLノードを追加する場合のポイント
9-5 アップグレード
- アップグレードのリスクと向き合う
- ローリングアップグレード
- オフラインアップグレード
- レプリケーション構成のアップグレード
- リハーサルのポイント
第10章 典型的なトラブルと対処法
- 10-1 GCP Stopが起きたら
- 10-2 スプリットブレインが起きたら
- 10-3 エラー処理に対応するには
- 10-4 Watchdog Timeoutに対処するには
- 10-5 Swap Insanityに対処するには
- 10-6 起動時の問題に対処するには
- コラム もしもバグだと思ったら
Appendix
- A-1 データノードのオプション
- A-2 ステータス変数