MySQL InnoDB Cluster (Group Replication + MySQL Router)
MySQLレベル: 上級所要時間: 90–120 分同一データセンター内のインストール済み MySQL サーバー 3 台 (または 5–9 台) から single-primary の InnoDB Cluster を構築します。MySQL Shell AdminAPI による dba.configureInstance、createCluster、clone を使った addInstance、MySQL Router の bootstrap (6446 RW / 6447 RO)、cluster.status() による監視、フェイルオーバーテスト、クォーラム喪失・完全停止・ローリング再起動の runbook を扱います。最終的に、プライマリがダウンすると自動でフェイルオーバーし、アプリケーションが Router 経由で接続するクラスタが得られます。遠隔サイトや単純な読み取りスケーリングにはクラシックレプリケーションを、構築済みクラスタの日常運用には InnoDB Cluster 運用ガイドを使用します。
構成: MySQL ノード 3–9 台 + Router サーバー 1 台
開始前の確認
- すべてのノードに MySQL … が同じマイナーバージョンでインストールされている (DBAtlas のMySQL シングルサーバーインストールガイド)、GTID が有効、各ノードの server_id が異なる。OS の root が mysql でパスワードなしで接続できる。
- ノード 2..… に保持すべきデータがない。クラスタへの追加時に clone でノード 1 (…) のコピーを受け取り、既存のデータは削除されます。
- ノード 1 のすべてのテーブルが InnoDB で、主キーを持っている (Group Replication の要件)。確認クエリの結果は空である必要があります。
- ノード同士が 3306 (MySQL および Group Replication の通信)、33060 (X Protocol)、33061 ポートで、Router サーバーがノードに 3306/33060 で到達できる。レイテンシが低い (同一データセンター。< 1–2 ms)。
- 時刻が同期されている (chrony)。
- ノード数が奇数 (…) である。… ノードで許容できるノード障害は最大 … 台です。偶数にしても許容数は増えません。
- クラスタ管理者アカウント (…) 用の強力なパスワードを用意している (8 文字以上、大文字/小文字、数字、特殊文字)。MySQL Shell と Router は各手順でパスワードを画面に表示せずに入力を求めます。Shell にはパスワードを保存しないよう指定します。
- Router サーバーが repo.mysql.com にアクセスできる (MySQL リポジトリはこのガイドで追加します)。
ガイドのフェーズ
- 事前準備 (すべての MySQL ノード) — ファイアウォールでクラスタのポートを開放する · SELinux に Group Replication のポートを登録する · クラスタ設定を追加する (…) · MySQL を再起動する · MySQL Shell をインストールする
- インスタンスの構成 (dba.configureInstance) — クラスタ管理者アカウントを作成する (…) · インスタンスをリモートでチェックする
- クラスタを作成する — クラスタを作成する · ノードをクラスタに追加する (…) · クラスタの状態を確認する
- MySQL Router — MySQL リポジトリを追加する (Router サーバー) · Router と Shell をインストールする · Router を bootstrap する · Router サービスを起動する · ファイアウォールで Router のポートを開放する · Router 経由の接続をテストする
- 検証と監視 — 詳細な状態 · SQL でメンバーを監視する
- フェイルオーバーテスト — フェイルオーバー: プライマリを停止する · フェイルオーバー: プライマリを停止する · フェイルオーバー: 新しいプライマリを確認する · フェイルオーバー: 新しいプライマリを確認する · フェイルオーバー: Router が新しいプライマリに振り向けているか · フェイルオーバー: Router が新しいプライマリに振り向けているか …
- クォーラムの喪失と完全停止 — クォーラム: 状態を診断する · クォーラム: 状態を診断する · クォーラム: 稼働しているパーティションで強制的にクォーラムを構成する · クォーラム: 稼働しているパーティションで強制的にクォーラムを構成する · クォーラム: 復帰したノードで旧グループを停止する (…) · クォーラム: 復帰したノードで旧グループを停止する (…) …
- ローリング再起動 (メンテナンス) — ローリング: セカンダリを再起動する (…) · ローリング: セカンダリを再起動する (…) · ローリング: プライマリのロールを引き渡す · ローリング: プライマリのロールを引き渡す · ローリング: 旧プライマリを再起動する · ローリング: 旧プライマリを再起動する …