ProxySQL版Orchestrator v4.30の新機能 ProxySQLネイティブ連携を検証

MySQLの高可用性ツールである Orchestratorは、これまでGitHub本家リポジトリはアーカイブ状態となっており、Percona版フォークでは、Percona製品のPercona Operatorなどに組み込む形で保守・活用が続けられていました。

しかし、2026年4月に ProxySQLから発表があり、ProxySQLがOrchestratorを正式に引き継ぎ、今後の保守・開発を担うことになりました。

Announcing the future of Orchestrator: ProxySQL takes takes the helm — ProxySQL Blog

既にGitHubにリポジトリも確認でき、利用できる段階にあります。

すなわち、ここまでの開発体制を表にまとめると以下の通りとなります。

開発元

リポジトリ

開発状態

openark

openark/orchestrator

× アーカイブ済み

Percona

percona/orchestrator

△ Percona Operator用に限りメンテナンス下

ProxySQL

ProxySQL/orchestrator

〇 メンテナンス下

ProxySQLが引き継ぐことで、データベースプロキシ製品としてのProxySQLとの機能連携の強化も期待されています。

目次

目玉機能の紹介

ProxySQL発表のブログ記事では、主に以下の3点が挙げられています。

  1. ProxySQLネイティブ連携

  2. Kubernetes/クラウドネイティブ対応

  3. PostgreSQL ストリーミングレプリケーション対応

ProxySQLネイティブ連携

MySQLユーザーにとって特に注目したいのが、ProxySQLとのネイティブ連携機能です。従来はフェイルオーバー後にProxySQLのHostgroupを書き換えるため、PostFailoverProcessesにスクリプトを独自に実装するケースが一般的でした。

一方、ProxySQL版Orchestratorバージョンv4.30.0からは、Orchestrator側の設定ファイルに項目を追加するだけでProxySQLとの連携が可能となり、フェイルオーバー時にHostgroupが自動更新されるようになりました。

これにより、

  • 自作スクリプトが不要

  • 保守コスト削減

  • 人為的な設定ミス防止

が期待できます。

Kubernetes/クラウドネイティブ対応

追加されたKubernetes用エンドポイント

  • /health/live

  • /health/ready

  • /health/leader

は、KubernetesのLiveness ProbeやReadiness Probeに利用できるAPIであり、クラウドネイティブ環境で運用しやすくなっています。

PostgreSQL ストリーミングレプリケーション対応

本ブログ記事では扱いませんが、PostgreSQLユーザーにとっては、HA製品の選択肢が増える、非常に大きなトピックになるはずです。

検証環境

早速Orchestrator v4.30を使用して、実機検証をやってみました。

Kubernetes上に以下のリソースをデプロイしました。

ソフトウェア

台数

バージョン

ProxySQL

2台の冗長構成

3.0.7-debian

Orchestrator

3台のRaft構成

v4.30.2

MySQL

Source1台、Replica2台のレプリケーション構成

8.4.6-6.1

検証のために、手軽に簡単にKubernetes上にProxySQL版Orchestratorを構築するHelmチャートを探しましたが見当たりませんでしたので、代替案として、以下を用いて構築しています。

  • Percona Operator for MySQL Serverを使用して、OrchestratorのimageをProxySQL版に差し替えました。

  • ProxySQLの公式Helmチャートは、6年前(2020年)からGitHubにコミットが見られず長期放置の状態でした。大部分は拝借しつつ、imageのバージョンを最新版に差し替えるなどの対策を行いました。

尚、本ブログ記事ではPercona Operatorのインストール手順は簡易的なものに留まります。 具体的なステップバイステップについては公式マニュアルや、前回の記事「KubernetesでMySQL自動フェイルオーバーを検証する(Percona Operator+Orchestrator)」を参照していただけますと幸いです。

Orchestratorイメージのビルド

ここはあまり重要ではないので、説明は簡易的なものに留まります。

Dockerイメージをビルドします。

作成されたDockerイメージを確認します。

これをコンテナレジストリにプッシュして使います。

今回はOCI環境で検証しているため、OCIRを指定します。リージョンや個別の値は適宜読み替えてください。

docker-registry Secretを作成します。

Helmチャートのvalues.yamlのimagePullSecretsにSecret名を指定します。


 

ProxySQLネイティブ連携のための設定

Orchestrator側

特に重要な設定は、ProxySQLネイティブ連携のためのパラメータをOrchestratorの設定ファイルに追加することです。

ユーザーマニュアルの設定例を参考に、以下を追記します。 https://github.com/ProxySQL/orchestrator/blob/master/docs/user-manual.md#setting-up-proxysql-hooks

orchestrator.conf.json

上記設定をConfigMapに保存し、OrchestratorのPodでマウントするように指定してあります。

ConfigMap

OrchestratorのPod側

Hostgroup

ProxySQLでは接続先サーバをHostgroupという単位で管理します。 Writer hostgroupは書き込み対象、Reader hostgroupは読み取り対象として利用され、フェイルオーバー時にはWriter hostgroupのメンバーが入れ替わるのが基本です。

今回の構成で、以下の固定値を指定しています。

  • WriterHostgroup:10

  • ReaderHostgroup:20

マニュアルに記載のあるように、WriterHostgroupは1以上である必要があります。

https://github.com/ProxySQL/orchestrator/blob/3e00b7f424b2a64960a68868305e74bde60ded05/docs/user-manual.md#setting-up-proxysql-hooks

Writer hostgroup ID. Must be > 0 to enable hooks.

Writer HostgroupにはSourceのみが登録され、Reader HostgroupにはSourceとReplicaの両方が登録されます。

AdminUser

ProxySQLのadminはローカル接続前提の構成で使われることが多いため、Podを跨ぐ Orchestratorからの接続では利用できません。そのため、外部からのリモート接続を想定したradminを用意し、OrchestratorからはこのアカウントでProxySQL管理APIにアクセスするようにしています。

ProxySQL側でradminユーザは以下のように定義してあります proxysql.cnf

ProxySQL側

OrchestratorとProxySQLの設定ファイルで Writer hostgroupとReader hostgroupの数値が合うようにProxySQL設定ファイルを構成します。

file/proxysql.cnf

上記設定をConfigMapに保存し、ProxySQLのPodでマウントするように指定してあります。

proxysqlのServiceにradmin用の6032ポートを追加する。

Hostgroupの確認方法

ここまで設定が完了したら、ProxySQLのAPIを実際に叩いて、トポロジーの状態を確認してみます。 /api/proxysql/serversでは、現在Orchestratorが認識しているProxySQL上のHostgroup構成を取得できます。

結果例

mysql-0 Podのhostgroup_idが10なのでWriterであることが確認できます。

新しいヘルスチェック用エンドポイントの指定

  • /health/live:LivenessProbe用のエンドポイント

  • /health/ready:ReadinessProbe用のエンドポイント

  • /health/leader:現在のPodがRaftリーダーかどうかを確認するためのエンドポイント

OrchestratorのPodに新しいエンドポイントでのヘルスチェックを行うように設定しました。

/health/leaderエンドポイントについては、APIを直打ちした結果例を以下に示しておきます。


現在のトポロジーを確認する(初期状態)

ここからは、フェイルオーバー挙動を確認します。 フェイルオーバー前後でHostgroupの割り当てがどのように変化するかを確認してみましょう。

観察ポイント

  • Orchestratorで SourceとReplicaの関係が正しく表示されているか

  • ProxySQLの/api/proxysql/serversでWriter=10 / Reader=20が正しく割り当てられているか

  • 特にWriter hostgroupにSourceが1台だけ入っているかが重要

実行例

ProxySQLの/api/proxysql/serversから確認しても良いのですが、JSON形式より、表形式の方が少し視認性が良いので、直接ProxySQLのPodからSQLを実行して確認しました。

OrchestratorのPodから確認

期待される状態

  • ProxySQL側

    • mysql-0 が hostgroup_id=10(Writer)

    • mysql-0, mysql-1, mysql-2 が hostgroup_id=20(Reader)

  • Orchestrator側

    • mysql-0 が Source(rw)

    • mysql-1, mysql-2 が Replica(ro)


Sourceを強制ダウンさせる(フェイルオーバー発火)

方法例

SourceのPodを削除


フェイルオーバー後のトポロジー変動を確認する

観察ポイント

  • Orchestratorで新しいSourceが正しく昇格しているか

  • ProxySQLのWriter hostgroupが新Sourceに切り替わっているか

  • Reader hostgroupが自動的に再構成されているか

実行例

ProxySQLのPodから確認する

OrchestratorのPodから確認する

期待される状態

  • ProxySQL側

    • 旧Source(mysql-0)のstatusがSHUNNEDになり、hostgroupから除外される

    • 新Source(例:mysql-2)がhostgroup_id=10に入る

    • 残りReplicaがhostgroup_id=20のまま

  • Orchestrator側

    • 旧Source(mysql-0)は Replica(ro)に入る

    • 新Source(例:mysql-2)がrwになる

    • 残りReplicaはroのまま

本検証環境では旧SourceはReplicaとして再参加しました。

なお、この挙動はPercona OperatorやMySQLレプリケーション構成、再参加設定などによって異なる場合があります。


旧Source が復帰したときの挙動(リカバリ)

観察ポイント

  • ProxySQLのhostgroup に自動で戻るか

実行例

SHUNNEDから復帰させる

ProxySQLのPodから確認する

期待される状態

  • SHUNNEDがONLINEに戻る

  • 他はそのまま

まとめ

今回の検証で特に大きいと感じたのは、フェイルオーバー時の後処理がシンプルになった点です。 ProxySQLネイティブ連携により従来必要だったPostFailoverProcessesのカスタム自作スクリプトを利用せず、Hostgroupが自動更新されることを確認できました。

設定も数項目追加するだけで済み、運用負荷を大きく下げられる点は大きなメリットと言えます。

一方で、Helmチャートの整備状況やOperatorとの組み合わせなど、導入時に考慮すべき点も残っています。

今後、クラウドネイティブ環境での利用が進めば、MySQL高可用性構成における有力な選択肢の一つになる可能性があります。

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

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

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