‘Patroni’

Patroniは、Postgresクラスターのレプリケーションとフェイルオーバーを管理するための最も一般的なオープンソースツールの1つです。 Postgresのストリーミングレプリケーションとホットスタンバイ機能に依存しています。これらの機能により、DBAは、高可用性と読み取りスケーラビリティの要件があるクラスターのセットアップと管理のプロセスを簡素化できます。 EDBは、PatroniをPostgreSQL、 EDB Postgres Advanced Server、およびEDB Postgres Extended Serverでテストしました。

Patroniのドキュメントについては、 https://patroni.readthedocs.io を参照してください。

サポートされているトポロジ

主な高可用性コンポーネント:

  • Postgresクラスター通常、プライマリと2つ以上のレプリカで構成されるデータベースクラスター。

*パトローニフェイルオーバー管理ユーティリティとして使用します。

  • etcd構成、正常性、現在のステータスEtcdのクラスター情報を含む分散構成ストア (DCS) として使用されます。

  • HAProxy読み取り/書き込みノードと読み取り専用ノードに接続するためのプロキシとして使用されます。

Supported topology

Supported topology

Postgres

EDBは現在、プライマリサーバーと2つのレプリカでのPatroniとPostgresの_physical_ストリーミングレプリケーションの使用をサポートしています。 PostgreSQL、 EDB Postgres Advanced Server、またはEDB Postgres Extended Serverの使用をサポートしています。

パトローニ

PostgresノードにPatroniをインストールします。 Patroniの latest release に対応しました。

Etcd

Etcdは、強い一貫性のある分散キー値ストアです。これは、分散システムまたはマシンのクラスターがアクセスする必要があるデータを保存するための信頼できる方法を提供します。

詳細については、 etcd documentation を参照してください。

注釈

実稼働環境の場合、3つのノードのetcdクラスターを設定することをお勧めします。 1つのetcdクラスターは、複数のPostgres/Patroniクラスターに対応できます。 Postgresノードとは異なるホストにetcdノードをインストールします。

etcdのインストールと設定については、 'Installing and configuring etcd' を参照してください。

ウォッチドッグ

スプリットブレインの状況を回避するために、Patroniは ウォッチドッグ デバイスをサポートしています。

ウォッチドッグデバイスは、指定された時間枠内にキープアライブハートビートを取得しない場合にシステム全体をリセットするソフトウェアまたはハードウェアメカニズムです。このデバイスは、通常のPatroniスプリットブレイン保護メカニズムが失敗した場合に備えて、フェイルセーフのレイヤーを追加します。

注釈

Patroniでのウォッチドッグメカニズムの使用はオプションですが、実稼働環境での使用をお勧めします。

HAProxy

データベースサーバーに直接接続する代わりに、アプリケーションが代わりにプロキシに接続するようにHAProxyを設定できます。次に、プロキシは要求をPostgresに転送します。この目的でHAProxyを使用すると、読み取り専用リクエストを1つ以上のレプリカにルーティングして負荷を分散できます。

スプリットブレインの場合のデータ損失を避けるために、HAProxyを使用することを強くお勧めします。

HAProxyは独立したサーバーとしてインストールできますが、アプリケーションサーバーまたはデータベースサーバーにインストールすることもできます。

注釈

実稼働環境の場合、少なくとも2つのHAProxyサーバーを設定することをお勧めします。さまざまなポートを使用して、1つのHAProxyサーバーは複数のPostgres/Patroniクラスターに対応できます。

セキュリティに関する考慮事項

セキュリティに関する考慮事項は、このドキュメントの範囲を超えています。

Patroni documentation で分散構成ストレージ(DCS)とPatroni REST

APIの詳細を見つけることができます。

このドキュメントでは説明していませんが、HAProxyでHTTPSを使用できます。