KubernetesでMySQL自動フェイルオーバーを検証する(Percona Operator+Orchestrator)

 

目次

はじめに

Percona Operator for MySQL は、複雑なDB運用をKubernetesのカスタムリソースとして簡略化してくれる強力なツールです。本ツールは、2種類のレプリケーションタイプをサポートしています。それぞれ以下のような特徴があります。

  • グループレプリケーション(Group Replication):GA済み。分散合意アルゴリズムに基づき、ノード間の高い一貫性と読み取りスケーリングを提供します。
  • 非同期レプリケーション(Async Replication):tech preview。MySQL伝統のレプリケーション方式です。書き込みレイテンシが低く、グループレプリケーションと比較し、より柔軟なトポロジー構成が可能です。

レプリケーションタイプの変更は、稼働中のクラスターではサポートされていません。設定を変更する際には、一度クラスターを停止させる必要があります。

非同期レプリケーションは現時点の Percona Operator for MySQL 1.0.0 (2025-11-17) バージョンではtech preview段階であり、本番環境での使用は推奨されません。 詳細は以下の公式ドキュメントをご参照ください。

Design and architecture – Percona Operator for MySQL

Asynchronous replication (tech preview)

(…)

  • Status – Currently in tech preview and not recommended for production use.

本記事では、tech preview段階ではありますが、あえて非同期レプリケーションを選択し、高可用性管理ツールである Orchestratorを組み合わせた構成を検証します。

Orchestratorは、複雑なトポロジーの可視化と、障害検知からの昇格を自動化してくれる、MySQLレプリケーション運用の定番とも言えるコンポーネントです。

インストール方法に加えて、障害検知時の自動フェイルオーバー挙動について実際の検証手順とともに解説します。


検証環境

本検証では以下のバージョンを使用しています。

 


Percona Operator のインストール

Helm を使用して Operator を導入します。

参考: Install with Helm – Percona Operator for MySQL

まずは、Operatorのチャートをインストールします。

任意の名前(my-op)と、任意のnamespace名(percona)を付け、インストールします。

 

Helmチャートのインストールが確認できました。

 

インストール後の確認コマンドが提示されているので、実行してみましょう。

 


DBクラスターのインストール

次に、DBクラスター本体のチャートをインストールします。

今回の検証用にデフォルト値を変更したいので、あらかじめvalues.yamlファイルに修正を記述しておいて、インストール時にファイルから変数を読み込むようにします。

 

以下の点を修正しました。

  • mysql.clusterTypeasyncへ変更
  • orchestrator.enabledtrueに変更

 

任意の名前を付け(my-db)、インストールします。 この時に先ほどのyamlファイルを指定しています。

Perconaロゴの素敵なASCIIアートが表示されましたね。

これで二つのHelmチャートがインストールされました。

 

リソースが作成されるのを少し待ちます。 全てのPodがRunningになるまで、経過を--watchで見ると良いでしょう。 最終的に、MySQLとHAProxyとOrchestratorのPodがそれぞれ3つできます。

 

DBへの接続サンプルコマンドがあるので実行してみましょう。

 

接続確認としてMySQL Podに直接アタッチしていますが、HAProxyのServiceをエンドポイントとして接続することが推奨されます。 HAProxyエンドポイントを使用することで、アプリ側で接続先を意識しなくて済みます。

以下は接続例です。

 

デプロイ後、Orchestrator Podにアタッチしてorchestrator-clientコマンドを実行し、Orchestrator のトポロジーを確認してみます。 すると、mysql-0 が Master(rw)、他がSlave(ro)として認識されていることがわかります。

 

また、OrchestratorのWebUI画面からもトポロジー図を確認しておきましょう。

localhost:3000にポートフォワードするコマンド例

ブラウザでhttp://localhost:3000を開きます。


フェイルオーバー試験

実際に稼働中の Pod (mysql-0) を削除し、Orchestrator がどのように新 Master を選出するかを観測します。

Pod の削除

OrchestratorがMasterのダウンを検知しました。

昇格の観測

数秒後、Orchestrator が mysql-2 を新たな Master(rw)として昇格させ、mysql-0(再起動後)と mysql-1 をその配下の Slave(ro) として再構成します。

 

Podの自動再作成

deleteしたmysql-0Podは再起動しクラスターに再参加しました。

 

Orchestratorのログ

Orchestrator の Web UI やログを確認すると、トポロジー変更の履歴が記録されています。

Web UIでは以下のように確認できます。

フェイルオーバーした際の新Masterや、開始終了時間、処理したOrchestratorなどの情報が確認できます。

項目 詳細内容
Analysis DeadMaster
Failed Instance mysql-0
Successor mysql-2
Cluster alias my-db-ps-db.percona
Affected Replicas 2 (mysql-1, mysql-2)
Start Time 2026-04-03 07:28:36Z
End Time 2026-04-03 07:28:36
Processed By my-db-ps-db-orc-1

またOrchestrator Podのログでも確認可能です。

検証は以上です。

Podの削除(障害発生)からOrchestratorによる新Masterの選出、そして他Slaveの向き先変更までが迅速に完結しました。

OrchestratorのWeb UIによって、今どのノードが書き込み許可されているのか、レプリケーションの遅延はないかといった状況が可視化されるのもポイントです。


まとめ

Percona Orchestrator を採用することで、 Kubernetes 上の MySQL 運用において不可欠な「自動フェイルオーバー」と「トポロジーの可視化」が容易になります。

ただし、Percona Operatorの公式ドキュメントにある通り、非同期レプリケーション構成は現時点で tech preview 段階のため、本番環境への採用は推奨されません。こちらは将来的な展望としつつ、構築にあたっては既に GA されているグループレプリケーション構成の検討を強くお勧めします。

KubernetesでのDB運用はOperatorを活用することでインフラ管理の多くを自動化できます。本記事が、最新のクラウドネイティブなDB運用を目指す一助となれば幸いです。

スマートスタイルTECHブログについて

スマートスタイルTECHブログでは、日頃MySQLのサポート業務に従事している有資格者で構成された技術サポートチームがMySQLに関する技術情報を発信しています。データベースのお困りごとはお気軽にご相談下さい。

スマートスタイルTECHブログについて

スマートスタイルTECHブログでは、日頃オープンソースデータベースのサポート業務に従事している有資格者で構成された技術サポートチームがPerconaに関する技術情報を発信しています。データベースのお困りごとはお気軽にご相談下さい。

よかったらシェアしてね!
  • URLをコピーしました!
目次