Loading...

We've detected that your browser language is Chinese. Would you like to visit our Chinese website? [ Dismiss ]
By: Dylan

PostgreSQL自動フェイルオーバーとは何か

PostgreSQLの自動フェイルオーバーとは、現行プライマリノードが利用不可になった際、スタンバイデータベースを自動的にプライマリに昇格させる仕組みのことです。

PostgreSQLに自動フェイルオーバー機構を導入することは、データベースの高可用性を実現するために不可欠です。データ災害、サイバー攻撃、システムクラッシュが発生した場合でも業務継続性を確保し、停止時間を最小限に抑えます。

PostgreSQLは堅牢なレプリケーション機能を標準搭載していますが、自動フェイルオーバーを統制する仕組みは備えていません。そのためDBAは障害検知、ノード状態確認、スタンバイの手動昇格を行う必要があり、停止時間の長期化や人的操作ミスのリスクが生じます。

PostgreSQLフェイルオーバーの主要な課題

適切な自動フェイルオーバーツールを選定するには、フェイルオーバーに伴う課題を把握する必要があります。

  • スプリットブレイン:適切な調停機構がない場合、複数ノードが自身をプライマリと認識し、データの不整合や破損が発生します。
  • レプリケーションラグ:プライマリとスタンバイ間のデータ転送遅延により、フェイルオーバー後にトランザクション損失が発生する可能性があります。
  • 障害検知の複雑さ、実際の障害と一時的なネットワーク異常を区別するのが困難で、誤検知による不要なフェイルオーバーが発生します。例:瞬断や一時的な応答なしで不要な切り替えが実行されるケース。
  • アプリケーション接続管理:フェイルオーバー完了後もアプリケーションは新プライマリに再接続する必要があり、プロキシやロードバランサーといった接続制御層がないとサービスが断絶します。

続いて、PostgreSQLの自動フェイルオーバー・切り替えに広く活用される代表的なツールを紹介します。

pg_auto_failoverによる自動フェイルオーバー

オープンソースのPostgreSQL拡張機能で、フェイルオーバーを自動化し高可用性を実現します。依存要素が少なく、比較的簡単に構築できる環境を求める運用チームに適しています。

監視ノードを用いてプライマリ・スタンバイの健全性を監視し、プライマリ障害時に監視ノードがスタンバイを自動昇格させます。分散コンセンサスシステムの複雑な設定なしで簡易的なHAを構築したい場合に最適です。

手順1. pg_auto_failoverのインストール

公式パッケージリポジトリを追加し、インストールを実行します。

Ubuntu/Debianの場合

apt install -y postgresql-14 pg-auto-failover

RHEL/CentOSの場合:

yum install -y pg-auto-failover

手順2. 監視ノードの作成・起動

監視ノードはクラスタ状態管理とフェイルオーバー判定を担います。

pg_autoctl create monitor --pgdata /var/lib/pgsql/14/monitor
pg_autoctl run monitor

手順3. プライマリノードの初期化

pg_autoctl create postgres \
--pgdata /var/lib/pgsql/14/data \
--monitor postgres://監視ノードIP:5432/pg_auto_failover \
--name node-primary
pg_autoctl run

手順4. スタンバイノードの追加

2台目のサーバー上でホットスタンバイとして登録します。

pg_autoctl create postgres \
  --pgdata /var/lib/pgsql/14/data \
  --monitor postgres://監視ノードIP:5432/pg_auto_failover \
  --name node-standby
pg_autoctl run

手順5. クラスタ状態の確認

pg_autoctl status
pg_autoctl events

クラスタは自動的にストリーミングレプリケーションを有効化し、PostgreSQL自動フェイルオーバーの準備が完了します。

Patroni

PatroniはPostgreSQL HAで最も普及しているツールの一つで、etcdやConsulといった分散設定ストアを利用し、リーダー選出とフェイルオーバーを制御します。

動作原理:

  • 各ノードにPatroniを起動
  • 分散ストアがクラスタ全体の状態を保持
  • コンセンサスに基づきPatroniが自動的にフェイルオーバーを実行

手順1. 3台構成のetcdクラスタを構築

etcdは分散コンセンサスを提供し、スプリットブレインを防止します。

# etcdインストール

yum install -y etcd

# 全ノードでetcdを設定・起動

systemctl enable --now etcd

手順2. Patroniと依存パッケージのインストール

pip3 install patroni python-etcd psycopg2-binary

手順3. Patroni設定ファイル(patroni.yml)作成

scope: postgres-ha
namespace: /service/
name: node1

restapi:
listen: 0.0.0.0:8008

etcd:
  host: node1-ip:2379

postgresql:
  listen: 0.0.0.0:5432
  connect_address: node1-ip:5432
  data_dir: /var/lib/pgsql/14/data
  pgpass: /tmp/pgpass
  replication:
    username: replicator
password: secure-password

手順4. Patroniサービス起動

patroni /etc/patroni.yml

手順5. クラスタ状態確認

patronictl -c /etc/patroni.yml list

Patroniはプライマリ昇格、レプリケーション、PostgreSQL自動フェイルオーバーを一括で自動管理します。

repmgr(軽量フェイルオーバー管理ツール)

repmgrはレプリケーション管理とフェイルオーバー自動化に特化したシンプルなツールで、完全自動運用にはカスタムスクリプトと併用することが多いです。小規模な環境に適しています。

動作原理:

  • レプリケーションクラスタのメタデータを管理
  • スタンバイノード昇格用コマンドを提供
  • デーモンモードによる自動フェイルオーバーに対応

以下にPostgreSQL自動フェイルオーバーにrepmgrを導入する手順を記載します。

手順1. repmgrインストール

sudo apt install repmgr

手順2: repmgr.conf設定

node_id=1
node_name=node1
conninfo='host=node1 user=repmgr dbname=repmgr'
data_directory='/var/lib/postgresql/data'

手順3: プライマリノード登録

repmgr primary register

手順4: スタンバイノード複製・登録

repmgr standby clone
repmgr standby register

手順5: 自動フェイルオーバー有効化

repmgrd -f /etc/repmgr.conf

i2Availability:停止時間ほぼゼロを実現する高可用性ソリューション

i2Availabilityはエンタープライズ向け高可用性ソリューションで、あらゆる障害シナリオにおいて停止時間とデータ損失を限りなくゼロに抑え、予測可能な復旧を実現します。

i2Availabilityの主な機能:

  • データ損失ほぼゼロ:同期レプリケーションとリアルタイムデータコピーによりRPOをほぼゼロに保証。ミリ秒単位の障害検知とVIP移行により秒単位のRTOを実現。
  • 外部DCS不要:クォーラム/調停ノードによる仲裁機構、二重ハートビート、リソースロックによりスプリットブレインを回避。ネットワーク分断時は調停ノードと接続したノードのみ稼働し、もう一方はサービスを遮断することで単一プライマリとデータ整合性を確保。
  • シームレスな自動フェイルバック:旧プライマリが復旧後、差分データ同期により自動的にスタンバイとしてクラスタに復帰。手動設定やスクリプト不要でクラスタが自己修復。
  • 統合Web管理コンソール:レプリケーション状況・ノード健全性をリアルタイム監視、一括ポリシー設定、エージェント一括配布、完全な監査ログを搭載し、コンプライアンス対応とトラブルシューティングを簡素化。
  • マルチデータセンター・リージョン間対応:ネットワーク最適化、帯域制御、ハイブリッドクラウド対応によりデータセンター間同期レプリケーションを標準サポート。グローバル企業のマルチ拠点災害復旧に最適。
60日間無料トライアル

よくある質問:PostgreSQL自動フェイルオーバーの課題と解決策

本セクションでは、データベース運用チームがPostgreSQL自動フェイルオーバー導入時に直面する主要な課題に対し、各ツールに応じた実行可能な解決策を記載します。

Q1:PostgreSQL自動フェイルオーバーにおけるスプリットブレインを回避する方法は?

スプリットブレインとは、2台以上のノードが自身をプライマリと認識し、データ破損を引き起こす現象です。

  • Patroni/Stolon:etcdなどの分散コンセンサスストア(DCS)によるクォーラム投票を活用。単一点障害を避けるためDCSを3台構成で導入。
  • repmgr:データを保持しない軽量な調停ノードを追加し、クォーラムを維持。
  • pg_auto_failover:中央監視ノードと状態遷移ロジックにより単一プライマリを強制。
  • i2Availability:ノード+ストレージの二重クォーラム仲裁により堅牢な保護を実現、外部DCS不要。

Q2:レプリケーションラグとは何か、フェイルオーバーにどのような影響を与えるか?

レプリケーションラグとは、プライマリの書き込み処理完了からスタンバイへ反映されるまでの遅延時間のことです。

  • リスク:非同期レプリケーションではフェイルオーバー時に直近のトランザクションが失われる可能性がある。同期レプリケーションはこれを防ぐが処理遅延が発生。
  • 解決策:
    • データ損失ゼロ要件の場合は同期レプリケーションを選択(i2Availabilityは標準搭載)。
    • pg_auto_failoverにラグ閾値を設定し、過剰な遅延のスタンバイを昇格対象から除外。
    • Patroniのメトリクス、i2Availability管理画面、Prometheus/Grafanaによるラグ監視を導入。

Q3:フェイルオーバー後、旧プライマリを復旧させる方法は?

フェイルオーバー完了後、データ不整合を防ぐため旧プライマリはスタンバイとして再参加する必要があります。

  • Patroni:再接続後pg_rewindにより旧ノードを自動再初期化。
  • repmgr:repmgr rejoinコマンドで新プライマリのデータを複製しノードを再接続。
  • pg_auto_failover:pg_autoctl rejoinで復旧ノードを監視ノードに再登録。
  • i2Availability:ノード復旧後、リアルタイムデータコピーにより自動再同期、手順不要。

Q4:自身のPostgreSQLクラスタに適したツールの選び方は?

ツール選定はクラスタ規模、運用スキル、要件に依存します。

  • 大規模エンタープライズ、データ損失ゼロ、マルチデータセンター:i2Availability(統合管理、二重仲裁、外部DCS不要)
  • クラウド/K8s、大規模本番環境:Patroni(成熟、普及度高くK8sネイティブ対応)
  • 簡単構築、DCS不要:pg_auto_failover(監視ノード型の簡易構成)
  • 小規模オンプレクラスタ:repmgr(軽量、外部依存なし)
  • HA+接続プール+ロードバランスを一括:Pgpool-II(オールインワンミドルウェア)

Q5:フェイルオーバー導入時の一般的な障害のトラブルシューティング方法は?

  • ノード間通信異常:ファイアウォール、NTP時刻同期、pg_hba.confアクセス権限を確認。ノード間のSSH・ネットワーク疎通テストを実施。
  • レプリケーション設定エラー:WAL関連パラメータ(wal_level、max_wal_senders)を確認、スタンバイがプライマリからストリーミング可能か検証。
  • DCS/監視ノード障害:Patroni/Stolonの場合はetcd/Consulを再起動しログ確認。pg_auto_failoverの場合は監視ノードの健全性を検証。
  • i2Availabilityの障害:Webコンソールの監査ログからノードハートビート・ストレージ状況を確認。エージェント導入状況とVIP割り当てを検証。

まとめ

信頼性の高いPostgreSQL自動フェイルオーバーを導入することで、停止時間を抑え重要データを保護し業務の継続稼働を保証する、耐障害性の高い本番用データベースクラスタを構築できます。Patroni、repmgr、pg_auto_failoverといったオープンソースツールからエンタープライズ向けプラットフォームまで、クラスタ規模、運用の複雑さ、可用性要件に応じて最適な選択肢が存在します。

中小規模環境では軽量なオープンソース製品で基礎的な高可用性を比較的簡単に実現できます。しかし、データ損失ゼロ、運用簡素化、強固な障害隔離が必須となるミッションクリティカルシステムには、Info2Softのi2Availabilityがより完全なエンタープライズ向けソリューションを提供します。二重仲裁によるスプリットブレイン防止、自動フェイルバック、統合Webコンソール、マルチデータセンター標準対応といった機能により、DCS依存型アーキテクチャに伴う多くの課題を解消します。

オンプレミス、クラウド、ハイブリッド環境いずれに導入する場合でも、適切に設計された自動フェイルオーバー戦略により、PostgreSQLクラスタはあらゆる障害状況下で稼働維持、データ整合性、復旧可能性を確保します。適切なソリューションを選定し、確立されたベストプラクティスに従うことで、最重要業務においてほぼゼロのRTOと堅牢なデータ完全性保証を達成できます。

概要は準備中です

関連記事

目次:
最新情報を購読
最新のインサイト、ニュース、限定コンテンツをお届けします。いつでも配信解除が可能です。
購読する
ビジネスデータのセキュリティ強化を始めませんか?
60日間の無料トライアルまたはデモで、Info2softが企業データをどのように保護するかをご確認ください。
フォームにご記入の上、送信してください。担当者より追ってご連絡いたします。
このフォームを送信することにより、 プライバシー通知を読み、同意したことを確認します。
{{ isSubmitting ? '送信中...' : '送信する' }}