リリースノート

バージョン4.1.0

2025-09-23リリース

New features

  • systemd /"notify/"ユニットタイプのサポートを追加します Ronan Dunklau

    通知ユニットタイプがないと、Patroniを起動し、すぐにsystemdを使用してSIGHUP信号を送信し、シグナルハンドラーを設定する前に効果的に強制終了することができます。

  • APIとctlで受信および再生LSN /ラグ情報を提供する Polina Bungina

    Patroni REST API /cluster エンドポイントと patronictl list コマンドは、各レプリカメンバーの受信LSN、再生LSN、受信ラグ、および再生ラグ情報を提供するようになりました。

  • スタンバイクラスターへのクリーンな降格を保証します。Polina Bungina

    動的構成への standby_cluster セクションの導入が、クリーンなクラスター降格につながることを確認します。

  • patronictl demote-cluster および promote-cluster コマンドを実装します。Polina Bungina

    クラスターの降格とプロモーションの新しいコマンドは、動的な構成の編集と結果ステータスの確認の両方を処理します。

  • sync_priority タグの実装Polina Bungina

    このパラメーターは、 synchronous_mode が on に設定されている場合、同期レプリカ選択中にメンバーが持つ優先順位を制御します。

  • --validate-config の --print オプションを実装します。Polina Bungina

    検証が成功した後、ローカル構成環境構成オーバーライドを含むを出力します。

  • kubernetes.bootstrap_labels の実装Polina Bungina

    この機能を使用すると、 initializing new cluster 、 running custom bootstrap script 、 starting after custom bootstrap 、または creating replica 状態にあるときにメンバーポッドに割り当てられるラベルを定義できます。

  • 重複したハートビートログを抑制する構成オプションを追加しました Michael Morris

    true に設定されている場合、同一の連続したハートビートログは出力されません。

  • オプションの cluster_type 属性を永続的なレプリケーションスロットに追加します Michael Bank

    これにより、特定の永久レプリケーションスロットを常に作成するか、プライマリまたはスタンバイクラスターでのみ作成するかを設定できます。

  • HTTP Serverヘッダーを構成可能にする デビッド・グリアソン

    HTTP Serverヘッダーで公開される情報を制限できる restapi.server_tokens 構成パラメーターを導入します。

  • レプリカメンバーでのレプリケーションの準備APIチェックを実装しますAnts Aasma

    以前の実装では、PostgreSQLが開始されるとすぐにレプリカの準備ができていると考えられました。この変更により、レプリカポッドは、PostgreSQLがレプリケートし、リーダーからそれほど遠くない場合にのみ準備ができていると見なされます。

Improvements

  • ウォッチドッグ構成障害のログレベルを削減します。Ants Aasma

    ウォッチドッグが required モードで構成されていない限り、デバッグログレベルで`Could not promote Linux watchdog device`ログラインを表示します。以前は情報レベルで表示されていました。

  • pg_stat_wal_receiver から written_lsn および latest_end_lsn を活用します Alexander Kukushkin

    実際の書き込みLSNである written_lsn は、実際にフラッシュLSNである pg_last_wal_receive_lsn() によって返されるものよりも優先されるようになりました。 latest_end_lsn は、ソースホスト上のWALフラッシュをポイントします。プライマリの場合、DCSに保存されている値は loop_wait 秒ごとにのみ更新されるため、リプレイラグのより適切な計算が可能になります。

  • failover=true オプションで作成されたスロットとの相互作用を回避します。Alexander Kukushkin

    この変更は、論理フェールオーバースロット機能を完全に機能させるために必要です。

  • PostgreSQL状態を /metrics REST APIエンドポイントに追加します Ivan Filianin

    PostgreSQLインスタンスの状態情報を、 /metrics REST APIエンドポイントのPrometheus形式の出力で利用できるようになりました。

バージョン4.0.7

2025-09-22リリース

New features

  • PostgreSQL 18 RC1のサポートを追加します Alexander Kukushkin

    GUCのバリデータールールが拡張されました。 Patroniは、新しいバックグラウンドI/Oワーカーを適切に処理するようになりました。

Bugfixes

  • WindowsでのローカルホストのIPv6への解決に関する潜在的な問題を修正しました。András Váczi

    PostgreSQLで listen_addresses を構成する場合、 0.0.0.0 または 127.0.0.1 を使用すると、IPv6を除くIPv4のみのリッスンが制限されます。ただし、一般的なWindowsシステムでは、 localhost は多くの場合、デフォルトでIPv6アドレス ::1 に解決されます。互換性を保証するために、Patroniは、 Windowsシステムで localhost の代わりに 127.0.0.1 でリッスンするようにPostgreSQLを構成します。

  • /config キーがDCSに存在する場合にのみグローバル構成を返すようになりました Alexander Kukushkin

    DCSで /config キーが欠落している場合、Patroni REST APIはエラーを発生する代わりに空の構成を返していました。

  • Etcdが利用できない場合にフェイルセーフモードがトリガーされない問題を修正しました Alexander Kukushkin

    Patroniは etcd3 例外を常に適切に処理していなかったため、フェイルセーフモードがトリガーされませんでした。

  • シグナルハンドラーのリエントランシーデッドロックを修正します Waynerv

    一部の特殊な場合に PID=1 を使用してDockerコンテナで実行されているPatroniは、 SIGCHLD を受信した後にデッドロックが発生していました。

  • WALを予約しない場合、永続的な物理スロットを再作成します イスラエル・バース・ルビオ

    WALを予約せずにPatroniスコープの外部で作成された永続的な物理レプリケーションスロットは、 replication slot cannot be advanced エラーを発生させていました。これを回避するために、パトローニはそのようなスロットを再作成します。

  • etcd3 の監視キャンセルメッセージを適切に処理するようになりました Alexander Kukushkin

    etcd3 は、監視チャネルにキャンセルメッセージを送信しても、接続は閉じません。これにより、Patroniは古いデータを使用することになります。 Patroniは、チャンク応答の読み取りループを中断し、Patroni側で接続を閉じることにより、それを解決します。

  • HTTPConnection ソケットが pyopenssl でラップされている場合のハンドルケース、Alexander Kukushkin

    Patroniは、 python-etcd で適用された pyopenssl インターフェイスを正しく使用していませんでした。

Documentation improvements

  • 2ノードクラスターガイダンスの向上 Nikolay Samokhvalov

    フェイルオーバー中の動作とDCS要件を明確にします。

バージョン4.0.6

2025-06-06リリース

Bugfixes

  • より高い優先度のリーダーからのフェイルオーバーのバグを修正しました。Alexander Kukushkin

    Patroniが現在のノードと同じ LSN を報告する場合、優先度の高い元リーダーを無視するようにします。

  • PGDATA の外部で作成された postgresql.conf ファイルのアクセス許可を修正しました。Michael Bankk

    PGDATA ディレクトリの外部に postgresql.conf ファイルを作成するときは、システム全体のumask値を尊重します。

  • synchronous_mode=quorum のスイッチオーバーのバグを修正しました。Alexander Kukushkin

    候補が指定されている場合、クォーラム要件をチェックしません。

  • クラスター用語を比較することにより、古いEtcdノードを無視します。Alexander Kukushkin

    Etcdクラスターの最後の既知の/"raft_term/"を記憶し、クライアント要求を実行するときに、Etcdノードから報告された/"raft_term/"と比較します。

  • SIGHUP のPostgreSQL構成ファイルの更新 Alexander Kukushkin

    以前は、Patroniは、グローバルまたはローカル構成の変更が検出された場合にのみPostgreSQL構成ファイルを置き換えていました。

  • etcd3 によって発生した Unavailable 例外を適切に処理するようになりました。Alexander Kukushkin

    Patroniは、同じ etcd3 ノードでこのような要求を再試行していましたが、別のノードに切り替えることがより良い戦略です。

  • etcd3 リース処理の改善 Alexander Kukushkin

    PatroniがHAループごとに少なくとも1回 etcd3 リースを更新するようにしてください。

  • リーダーロックを取得しようとしたときに409ステータスコードの注釈を再確認します Alexander Kukushkin

    Patroniバージョン4.0.3で読み込まれたリーダーオブジェクトに対して行われたのと同じ動作を実装します。

  • スロットを進めるときは replay_lsn を考慮してください Polina Bungina

    replay_lsn を超えてレプリカのスロットを進めないでください。さらに、レプリカ上のこのスロットの confirmed_flush_lsn を既に超えているが、レプリカがこのスロットがプライマリにある実際の LSN をまだ再生していない場合、スロットを replay_lsn 位置に進めます。

  • プロモート後に CHECKPOINT が実行されるようにしました。 Alexander Kukushkin

    CHECKPOINT がまだ完了していないため、降格時にチェックポイントタスクがリセットされなかった可能性があります。これにより、次のプロモートがトリガーされたときに古い result を使用することになりました。

  • /"offline/"降格の同時実行は避けてください Alexander Kukushkin

    遅いシャットダウンの場合、次のハートビートループがDCSエラー処理メソッドに再度ヒットし、 AsyncExecutor is busy, demoting from the main thread 警告が発生し、オフライン降格が再度開始される場合があります。

  • 初期化失敗時にデータディレクトリの名前を変更する前に data_dir 値を正規化する Waynerv

    data_dir パラメーター値の末尾のスラッシュによって、初期化失敗の後に名前変更プロセスが中断されないようにします。

  • synchronous_standby_names に期待値が含まれていることを確認してください Alexander Kukushkin

    以前は、非クォーラム同期レプリケーションのステートマシンを実装するメカニズムは、 synchronous_standby_names の実際の値をチェックせず、その結果、 pg_stat_replication が synchronous_standby_names のサブセットである場合、 synchronous_standby_names の古い値が使用されました。

バージョン4.0.5

2025-02-20リリース

Stability improvements

  • python-json-logger>=3.1 との互換性。Alexander Kukushkin

    古いAPIの使用によって生成された警告を削除します。

  • Python 3.13との互換性 Alexander Kukushkin

    Python 3.13に対してテストを実行します。

  • pyinstaller>=4.4 との互換性ジョー・ジェンセン

    pyinstaller toc 属性が存在しない場合、デフォルトの iter_modules にフォールバックします。

  • PostgreSQL 9.5サポートに関する問題を修正しました。Alexander Kukushkin

    • pg_rewind 出力フォーマットを適切に処理します。

    • synchronous_standby_names フォーマットが/"num/"仕様をサポートしていないことを検討します。

  • urlparse の最新の変更との互換性 Alexander Kukushkin

    urlparse は、URLに [] 文字を含む複数のホストを受け入れなくなりました。問題を軽減するには、可能な場合は libpq から PQconninfoParse() のネイティブラッパーに切り替え、 libpq の古いバージョンにリンクされている古い psycopg2 バージョンにのみ実装を使用します。

Bugfixes

  • 再起動の確認時に再起動するメンバーのみを表示します András Váczi

    以前は、 patronictl restart <clustername> --pending を実行すると、再起動が保留中かどうかに関係なく、確認にすべてのメンバーがリストされていました。

  • Patroniでの長時間実行ジョブをキャンセルして、レプリカブートストラップ障害が発生したデータディレクトリを削除する Alexander Kukushkin

    以前は、Patroniは pg_basebackup / wal-g / pgBackRest / barman または同様のものが実行されているときにレプリカブートストラップを実行できました。

  • patronictl edit-config のスラッシュを含むクラスター名を適切に処理するようになりました。Antoni Mur

    cluster_name のスラッシュをアンダースコアに置き換えます。

  • 物理スロットのドロップが早すぎるのは避けてください Alexander Kukushkin

    フェールオーバーの後、新しいプライマリでは--このメンバーが昇格するまで、レプリカでは-クラスター内にリーダーが存在するまで、 xmin を含む物理レプリケーションスロットの削除を延期します。

  • controldata() のサブプロセスによって発生したすべての例外を処理するようになりました。Alexander Kukushkin

    Patroniは、 pg_controldata ユーティリティを呼び出したときに発生する可能性のあるすべての例外を適切に処理していませんでした。

  • フェイルオーバー時に保持されない元リーダーのスロットのバグを修正しました Alexander Kukushkin

    フェールオーバーでは、元のリーダーの /member キーが正確に同時に有効期限が切れる間、DCSに存在するメンバーに誤って依存しないようにします。

  • クォーラムステートマシンのいくつかのバグを修正しました。Alexander Kukushkin

    • リーダーレースの正常なノードが存在するかどうかを評価する場合、降格する前に、クォーラム要件を考慮する必要があります。それがないと、元のリーダーは非同期ノードに囲まれてリカバリーすることになる可能性があります。

    • QuorumStateResolver は、レプリカノードがすぐに参加および切断された場合を正しく処理していませんでした。

Improvements

  • 空または非辞書構成ファイルのエラーを改善しましたJulian

    Patroni構成ファイルに有効な Mapping オブジェクトが含まれるかどうかを検証するときに、より明示的な例外をスローします。

バージョン4.0.4

2024-11-22リリース

Stability improvements

  • py-consul モジュールとの互換性を追加しました。Alexander Kukushkin

    python-consul モジュールは長い間メンテナンスされていませんが、 py-consul は公式の代替品です。 python-consulとの下位互換性は保持されます。

  • prettytable>=3.12.0 モジュールとの互換性を追加しました。Alexander Kukushkin

    非推奨の警告に対処します。

  • ydiff==1.4.2 モジュールとの互換性 Alexander Kukushkin

    最新バージョンの互換性問題を修正し、 requirements.txt でバージョンを制約し、最新バージョンの互換性テストを導入します。

Bugfixes

  • プライマリリカバリが失敗した後に on_role_change コールバックを実行します。Polina Bungina、Alexander Kukushkin

    さらに、クラッシュ後に起動に失敗したプライマリの on_role_change コールバックを実行して、レプリカとしてのさらなる起動が失敗した場合でも、コールバックが実行される可能性を高めます。

  • patronictl list -W のスレッドリークを修正しました。Alexander Kukushkin

    DCSインスタンスオブジェクトをキャッシュして、スレッドリークを回避します。

  • サポートされているパラメーターのみが接続文字列に書き込まれるようにしました Alexander Kukushkin

    Patroniは、新しいバージョンで導入されたパラメーターを接続文字列に渡していましたが、これが接続エラーを引き起こしていました。

バージョン4.0.3

2024-10-18リリース

Bugfixes

  • パスワードを公開しないようにユーザーを作成するときに pgaudit を無効にする kviset

    Patroniは、 pgaudit 拡張機能が有効になっているときに、作成時に superuser 、 replication 、および rewind パスワードをログに記録していました。

  • 混合セットアップの問題を修正しました。パトロニv4以前のプライマリとv4+のレプリカ。 Alexander Kukushkin

    リーダーで実行されているパトロニバージョンが4.0.0より前の場合、 /status キーからメンバーのスロット位置を取得しようとするのではなく、 /members キーから抽出した xlog_location を使用します。そうしないと、レプリカでのWALの蓄積が発生しています。

  • Patroniバリデーターのない有効なPostgreSQL GUCを無視しないでください Polina Bungina

    GUCにPatroniバリデーターがないが、実際に有効なGUCであるかどうかを postgres --describe-config に対してチェックします。

Improvements

  • K8sでリーダーオブジェクトを読み取るときに409ステータスコードの注釈を再確認します。Alexander Kukushkin

    要求はターゲットを正常に更新しましたが、 PATCH 要求がパトロニによってキャンセルされた場合、追加の更新を回避します。

  • sslnegotiation クライアントサイド接続オプションのサポートを追加しました Alexander Kukushkin

    sslnegotiation は、最終的なPostgreSQL 17リリースに追加されました。

バージョン4.0.2

2024-09-17リリース

Bugfixes

  • 構成検証ファイルの検出中に例外を処理する Alexander Kukushkin

    Patroniがリスト操作を実行するための十分な権限を持っていないディレクトリをスキップします。

  • 非アクティブなホット物理レプリケーションスロットが xmin を保持しないことを確認します。Alexander Kukushkin、Polina Bungina

    バージョン3.2.0以降、Patroniはレプリカにすべてのメンバーの物理レプリケーションスロットを作成し、定期的に pg_replication_slot_advance() ファンクションを使用してそれらを前進させます。ただし、何らかの理由で hot_standby_feedback が有効になっており、プライマリがレプリカに降格されている場合、現在非アクティブなスロットには NOT NULL xmin 値が新しいプライマリに伝播されます。これにより、 xmin ホリゾンは前方に移動されず、バキュームはデッドタプルをクリーンアップできません。この修正では、Patroniは非アクティブであるはずが NOT NULL xmin 値を持つ物理レプリケーションスロットを再作成します。

  • スタートアップフェーズ中に未処理の DCSError を修正しました Waynerv

    ノード名の一意性を確認する前に、DCS接続を確認してください。

  • pg_settings を照会するときに CMDLINE_OPTIONS GUCを明示的に含めます Alexander Kukushkin

    Patroniが実行中のスタンバイに参加するときに、コマンドラインパラメーターとしてポストマスターに渡されたすべてのGUCが復元されていることを確認します。これは、Patroni 3.2.2で修正されたバグのフォローアップです。

  • synchronous_standby_names クォーティングロジックのバグを修正しました。Alexander Kukushkin

    PostgreSQLドキュメントによると、 ANY および FIRST キーワードは二重引用符で囲まれることになっていますが、Patroniは以前にこれをしていません。

  • キープアライブ接続の範囲外の問題を修正する hadizamani021

    ttl セットに基づいて計算された keepalive オプション値が、現在のプラットフォームの最大許可値を超えていないことを確認します。

バージョン4.0.1

2024-08-30リリース

Bugfix

  • Patroniは自分自身に不要なレプリケーションスロットを作成していました Alexander Kukushkin

    name に大文字または特殊文字が含まれている場合に発生していました。

バージョン4.0.0

2024-08-29リリース

警告

  • このバージョンでは、/"primary/"を優先して、/"master/"用語を削除する作業が完了しました。これは、いくつかの破壊的な変更を意味します。リリースノートを注意深くお読みください。 Patroni 4+へのアップグレードは、Patroni 3.1.0以降を実行している場合にのみ確実に機能します。古いバージョンから4+に直接アップグレードすることは可能ですが、ノードの残りの部分が他のパトロニバージョンで実行されているときにプライマリに障害が発生すると、予期しない動作が発生する可能性があります。

Breaking changes

  • Patroniコードから非包括的な/"master/"用語を削除するときに、次の重大な変更が導入されました。

    • Kubernetesでは、Patroniはデフォルトで role labelを primary に設定します。古い動作を維持し、ダウンタイムまたは長く複雑な移行を回避したい場合は、パラメーター kubernetes.leader_label_value および kubernetes.standby_leader_label_value master を構成できます。続きを読む role 。

    • Patroniロールは、 master ではなく primary としてDCSに書き込まれます。

    • Patroni REST APIによって返されるPatroniロールが master から primary に変更されました。

    • Patroni REST APIは、 /switchover 、 /failover 、 /restart エンドポイントへの要求で role=master を受け入れなくなりました。

    • /metrics REST APIエンドポイントは patroni_master メトリックを報告しなくなります。

    • patronictl は、どのコマンドの --master オプションを受け入れなくなりました。 代わりに --leader または --primary オプションを使用する必要があります。

    • カスタムレプリカ作成方法の宣言的構成の no_master オプションは特別なオプションとして扱われなくなりました。代わりに no_leader を使用してください。

    • patroni_wale_restore スクリプトは --no_master オプションを受け入れなくなりました。

    • patroni_barman スクリプトは --role=master オプションを受け入れなくなりました。

    • すべてのコールバックスクリプトは、 role=master の代わりに渡された role=primary オプションを使用して実行されます。

  • patronictl failover は、Patroni 3.2.0以降非推奨になった --leader オプションを受け入れません。

  • Patroni 3.2.0が削除されたため、ユーザー作成機能 bootstrap.users 構成セクションは非推奨になりました。

New features

  • クォーラムベースのフェイルオーバーAnts Aasma、Alexander Kukushkin

    この機能は、クォーラムベースの同期レプリケーションPostgreSQL v10から利用可能を実装しています。これは、1つのスタンバイへのレプリケーションのより高いレイテンシを他のスタンバイで補うことができるため、通常動作中でもワーストケースのレイテンシを削減するのに役立ちます。 Patroniは、追加の安全対策を実装して、受信した最新のトランザクションに基づいてフェールオーバー候補を選択することにより、ユーザーに可視的なデータの損失を防ぎます。

  • pg_dist_node にCitusセカンダリを登録する Alexander Kukushkin

    Patroniは、 role==replica 、 state==running を含むノードのリストを維持するようになりました。 noloadbalance role==replica pg_dist_node

  • メンバーのレプリケーションスロットの構成可能な保持期間 Alexander Kukushkin

    メンバーキーが存在しないときにメンバーレプリケーションスロットを保持する時間を制御する member_slots_ttl グローバル構成パラメーターのサポートを実装します。

  • Patroniによって作成されたログファイルのアクセス許可を設定可能にします Alexander Kukushkin

    Patroniによって作成されたログファイルに特定の権限を設定できます。指定しない場合、権限は現在の umask 値に基づいて設定されます。

  • PostgreSQL 17 beta3との互換性 Alexander Kukushkin

    GUCのバリデータールールが拡張されました。 Patroniは、シャットダウン中にすべての新しい補助バックエンドを処理し、論理レプリケーションスロットの同期に必要なため、 primary_conninfo に dbname を設定します。

  • Patroni構成検証のための --ignore-listen-port オプションを実装します Sahil Naphade

    patroni --validate-config の実行時に、既にバインドされたポートを無視できるようにします。

Improvements

  • wal_log_hints を構成可能にする Paul_Kim

    use_pg_rewind が off に設定されている場合、 wal_log_hints 構成のオーバーヘッドを回避できます。

  • pg_basebackup コマンドを DEBUG レベルでログWaynerv

    失敗した初期化のデバッグを容易にします。

Bugfixes

  • フェイルセーフになっているときにカスケードノードの永久スロットを進めます Alexander Kukushkin

    フェイルセーフモードがアクティブになっているときに、カスケードレプリカのスロットがプライマリで適切に進められていることを確認します。これは、 POST /failsafe REST API要求でのレプリカ応答を xlog_location で拡張することにより実行されます。

  • 現在のノードを同期として選択しないでください Alexander Kukushkin

    現在のプライマリの名前と一致する application_name を使用して、現在のプライマリノードからストリーミングしている/"something/"が存在する可能性があります。 Patroniはこの状況を適切に処理していなかったため、プライマリが同期ノードとして宣言される可能性があり、その結果、スイッチオーバーをブロックしていました。

  • POST /failsafeの restapi.allowlist_include_members を無視する Alexander Kukushkin

  • GUC検証の向上Polina Bungina

    postgres --describe-config コマンドの実行を介した追加の検証のため、以前はパトロニ構成を介してそこにリストされていないGUCを設定することはできませんでした。この制限は削除されました。

  • UNIXソケットが検出されたときに、 localhost の行を .pgpass ファイルに追加します Alexander Kukushkin

    指定された host パラメーターが / 文字で始まる場合、Patroniは .pgpass ファイルに追加行を追加します。これにより、 host がデフォルトのソケットディレクトリパスと一致する場合のコーナーケースをカバーできます。

  • ロギングの問題を修正する Waynerv

    フェイルセーフ処理ログで適切な要求URLを定義し、ポストマスターチェックログのタイムスタンプの順序を修正しました。

バージョン3.3.2

2024-07-11リリース

Bugfixes

  • プレーンPostgres同期レプリケーションモードを修正しました。Israel Barth Rubio

    synchronous_mode がPatroniに導入されてから、プレーンのPostgres同期レプリケーションは機能していませんでした。このバグ修正では、Patroniは synchronous_mode が無効になっている場合、ユーザーの構成に従って synchronous_standby_names の値を設定します。その場合、

  • スタンバイでの論理スロットの無効化を処理します。Polina Bungina

    スタンバイのPG16論理レプリケーションスロットは、ホライズンによって無効にすることができます。今後、パトロニは無効になったスロットのコピー、つまり再作成を強制します。

  • 論理スロットアドバンスとコピーで競合状態を修正しました Alexander Kukushkin

    このバグのため、無効な論理レプリケーションスロットがPostgreSQLの再起動で複数回コピーされた場合に発生する可能性がありました。

バージョン3.3.1

2024-06-17リリース

Stability improvements

  • Python 3.12との互換性 Alexander Kukushkin

    logging.LogRecord に追加された新しい属性をハンドルします。

Bugfixes

  • replicatefrom タグ処理の無限再帰を修正しました Alexander Kukushkin

    この修正の一部として、 is_physical_slot() のチェックと調整のドキュメントも改善します。

  • スタンバイクラスターでの間違ったロール報告を修正しました Alexander Kukushkin

    synchronous_standby_names および同期レプリケーションは、実際のプライマリノードでのみ動作し、カスケードレプリケーションの場合、Postgresによって単に無視されます。この修正の前に、 patronictl list および GET /cluster は一部のノードを同期として誤って報告していました。

  • allow_in_place_tablespaces GUCの可用性を修正しました Polina Bungina

    allow_in_place_tablespaces はPostgreSQL 15に追加されただけでなく、PostgreSQL 10-14にバックパッチされました。

バージョン3.3.0

2024-04-04リリース

警告

古いPartoniバージョンはすべて ydiff>=1.3 と互換性がありません。

問題を/"fix"するために使用できる次のオプションがあります。

  1. Patroniを最新バージョンにアップグレードする

  2. Patroniをインストールした後、 ydiff<1.3 をインストールします

  3. cdiff モジュールのインストール

New features

  • auth_data をZookeeperクライアントに渡す機能を追加します。Aras Mumcuyan

    接続に使用する認証資格情報を指定できます。

  • Barman 統合のためのcontribスクリプトを追加しました。Israel Barth Rubio

    Barman 操作をリモートで実行でき、カスタムブートストラップ/カスタムレプリカメソッドまたは on_role_change コールバックとして使用できるアプリケーション patroni_barman を提供します。詳細については、 patroni_barman を確認してください。

  • JSON ログ形式のサポートalisalemmi

    plain デフォルトとは別に、Patroniは json ログ形式もサポートするようになりました。 python-json-logger>=2.0.2 ライブラリをインストールする必要があります。

  • pending_restart_reason 情報の表示 Polina Bungina

    pending_restart フラグが設定される原因となったPostgreSQLパラメーターに関する拡張情報を提供します。 patronictl list と /patroni の両方のREST APIエンドポイントは、パラメーター名とその/"diff/"を pending_restart_reason として表示するようになりました。

  • nostream タグの実装 Grigory Smolkin

    nostream タグが true に設定されている場合、ノードはレプリケーションプロトコルを使用してWALをストリーミングせず、代わりにアーカイブリカバリに依存します restore_command が構成されている場合。また、ノード自分自身とそのすべてのカスケードレプリカの永久論理レプリケーションスロットのコピーと同期も無効にします。

Improvements

  • log セクションの検証を実装します。Alexander Kukushkin

    これまで、バリデーターは、提供されたロギング構成の正しさをチェックしていませんでした。

  • PostgreSQLパラメーター変更のロギングを向上させました。Polina Bungina

    古い値を人間が判読可能な形式に変換し、 pg_controldata とPatroniグローバル構成の不一致に関する情報をログに記録します。

Bugfixes

  • 許可されない pg_basebackup オプションを適切にフィルターして除外する Israel Barth Rubio

    バグのため、Patroniは - setting: value 形式で提供されている場合、 basebackup レプリカブートストラップ方法用に構成された許可されていないオプションを適切にフィルタリングしていませんでした。

  • etcd3 認証エラー処理を修正しました Alexander Kukushkin

    要求を実行する直前に認証が行われなかった場合、 etcd3 認証エラーが常に1回リトライします。また、再認証時にウォッチャーを再起動しないでください。

  • バリデーターファイル検出のロジックの改善 Waynerv

    importlib ライブラリを使用して、可能な場合は使用可能な構成パラメーターを含むファイルを検出しますPython 3.9以降の場合。この実装はより安定しており、 zip アーカイブに基づいたPatroniディストリビューションを中断しません。

  • standby_cluster セクションで複数のホストが指定されている場合にのみ target_session_attrs を使用します。Alexander Kukushkin

    standby_cluster.host セクションにコンマで区切られた複数のホストが含まれる場合にのみ、 target_session_attrs=read-write がスタンバイリーダーノードの primary_conninfo に追加されるようになりました。

  • ydiff ライブラリバージョン1.3+の互換性コードを追加しました Alexander Kukushkin

    Patroniは、Pythonモジュールではなく単なるターミナルツールであると考えられているため、パブリックではない ydiff のいくつかのAPIに依存しています。残念ながら、1.3のAPIの変更により、古いPatroniバージョンが壊れました。

バージョン3.2.2

2024-01-17リリース

Bugfixes

  • DCSがワイプされたときにレプリカを復元させないでください Alexander Kukushkin

    これは、パトローニがスタンドアロンのPGクラスターを引き継ぐことになっている方法で発生していました。

  • Consulから更新されたばかりの同期キーを取得するときに一貫した読み取りを使用するようになりました。Alexander Kukushkin

    Consulは、更新したキーの ModifyIndex をすぐに取得するインターフェイスを提供していないため、明示的な読み取り操作を実行する必要があります。古い読み取りはデフォルトで許可されているため、キーの古いバージョンを取得する場合がありました。

  • 再起動が必要なパラメーターが元の値にリセットされた場合、Postgres構成をリロードします Polina Bungina

    以前は、Patroniは構成を更新せず、 pending_restart をリセットするだけでした。

  • 同期モードで非同期候補へのフェイルオーバーを実行する際の確認プロンプトメッセージの誤った反転ロジックを修正しました。Polina Bungina

    この問題は patronictl にのみ存在しました。

  • patronictl のフェイルオーバー候補からリーダーを除外する ポリナ・ブンギナ

    クラスターが正常な場合、既存のリーダーへのフェールオーバーはno-opです。

  • Citusデータベースと拡張機能を冪等に作成する Alexander Kukushkin、Zhao Junwang

    Citusデータベースに依存関係を追加する必要がある場合に、 post_bootstrap スクリプトでそれらを作成できます。

  • 矛盾する nofailover タグをフィルタリングしないでください。Polina Bungina

    ノードに設定された構成 {nofailover: false, failover_priority: 0} では、レースに参加できませんでしたが、 nofailover タグが優先される必要があるため、レースに参加する必要があります。

  • PyInstallerのフリーズした問題を修正しました Sophia Ruan

    freeze_support() は argparse の後に呼び出されたため、PatroniはPostgresを起動できませんでした。

  • patronictl および Citus 構成の構成ジェネレーターのバグを修正しました。Israel Barth Rubio

    これにより、環境変数を介して設定された patronictl および Citus 構成パラメーターが生成された構成に書き込まれません。

  • 実行中のスタンバイに参加するときに、リカバリGUCと一部のパトローニ管理パラメーターを復元します Alexander Kukushkin

    Patroniは、内部構造の1つで port が欠落していることに関するエラーが発生し、Postgres v12以降の再起動に失敗していました。

  • pending_restart フラグ周辺の修正Polina Bungina

    recovery_target_action = promote でカスタムブートストラップしている場合、または誰かがたとえば ALTER SYSTEM を使用して hot_standby または wal_log_hints を変更したときは、 pending_restart を公開しないでください。

バージョン3.2.1

2023-11-30リリース

Bugfixes

  • patronictl の --format 引数の受け入れられる値を制限します Alexander Kukushkin

    任意の文字列を受け入れ、値が認識されない場合は出力を生成していませんでした。

  • リーダーキーを解放する前に、シャットダウン時にレプリカノードがチェックポイントLSNを受信したことを確認します。Alexander Kukushkin

    以前は、場合によっては、CHECKPOINTが続くSWITCHレコードのLSNを使用していましたアーカイブモードが有効になっている場合。その結果、以前のプライマリは場合によって pg_rewind を実行する必要がありましたが、データの損失は関係ありません。

  • ノード名の一意性チェックを実行するときに実際のHTTP要求を実行します Alexander Kukushkin

    コンテナでPatroniを実行している場合、トラフィックがポートでリッスンし、着信接続を受け入れる docker-proxy を使用してルーティングされる可能性があります。それは偽陽性を引き起こしていました。

  • Etcd v2でのCitusサポートを修正しました。Alexander Kukushkin

    Patroniは、Etcd v2を使用した新しいCitusクラスターの展開に失敗していました。

  • Postgres v16+での pg_rewind の動作を修正しました。Alexander Kukushkin

    pg_waldump のエラーメッセージ形式がv16で変更されたため、必要でない場合でもパトロニによって pg_rewind が呼び出されました。

  • カスタムブートストラップのバグを修正しました。Alexander Kukushkin

    Patroniは、ブートストラップコマンド自分自身である --command 引数を誤って適用していました。

  • REST APIヘルスチェックエンドポイントに関する問題を修正しました Sophia Ruan

    接続が適切にクローズされていないため、Postgresの再起動後、Postgresの unknown 状態を返す可能性がありました。

  • postgres --describe-config 出力結果をキャッシュする Waynerv

    これらは、PostgreSQL構成の検証にどのGUCが利用できるかを判断するために使用され、Patroniの実行中にこのリストが変更されることは想定されていません。

バージョン3.2.0

2023-10-25リリース

Deprecation notice

  • bootstrap.users サポートはバージョン4.0.0で削除されます。新しいクラスターを展開した後にユーザーを作成する必要がある場合は、 bootstrap.post_bootstrap フックを使用してください。

Breaking changes

  • loop_wait + 2*retry_timeout <= ttl ルールを適用し、最小可能値をハードコードする Alexander Kukushkin

    最小値 loop_wait=2 、 retry_timeout=3 、 ttl=20 。値が小さいか、ルールに違反している場合、それらは調整され、警告がPatroniログに書き込まれます。

New features

  • フェイルオーバーの優先順位 Mark Pekala

    tags.failover_priority の助けを借りて、リーダーレース中にノードの優先順位を高くできるようになりました。詳細については、ドキュメントrefタグを参照してください。

  • patroni --generate-config [--dsn DSN] および patroni --generate-sample-config を実装しました Polina Bungina

    実行中のPostgreSQLクラスターの構成ファイル、または新しいPatroniクラスターのサンプル構成ファイルを生成できます。

  • Patroni REST APIのPostgresへの専用接続を使用する Alexander Kukushkin

    システムにストレスがかかっている場合、メインハートビートループのブロックを回避するのに役立ちます。

  • ノードsskserkの name でいくつかのエンドポイントを強化する

    モニタリングエンドポイントの場合、 name は scope の横に追加され、メトリックエンドポイントの場合、 name がタグに追加されます。

  • 厳密なフェイルオーバー/スイッチオーバーの違いを保証します Polina Bungina

    ログメッセージの精度が向上し、正常な同期クラスターの非同期ノードへのフェールオーバーが可能になります。

  • 永続的な物理レプリケーションスロットを永続的な論理スロットと同様に動作させます Alexander Kukushkin

    リーダーになることができるすべてのノードで永続的な物理レプリケーションスロットを作成し、 pg_replication_slot_advance() ファンクションを使用してスタンバイノード上のスロットの restart_lsn を進めます。

  • patronictl の --dcs 引数を介して名前空間を指定する機能を追加しました。Israel Barth Rubio

    構成ファイルなしで patronictl を使用すると便利です。

  • カスタムブートストラップ構成での追加パラメーターのサポートを追加します。Israel Barth Rubio

    以前は、カスタム引数を command に追加することのみが可能でしたが、それらをマッピングとしてリストできるようになりました。

Improvements

  • citus.local_hostname GUCを、パトロニがPostgresに接続するために使用する値と同じ値に設定します。Alexander Kukushkin

    CitusがローカルPostgresに接続したい場合があります。デフォルトでは、 localhost を使用しますが、常に使用できるわけではありません。

Bugfixes

  • スタンバイクラスターの synchronous_mode 設定を無視する Polina Bungina

    Postgresはカスケード同期レプリケーションをサポートしておらず、 synchronous_mode がスタンバイクラスターでのスイッチオーバーを中断していたことは無視されません。

  • on_reload コールバックのSIGCHLDを処理します Alexander Kukushkin

    これを行わないと、ゾンビプロセスが発生し、次の on_reload が実行された場合にのみ刈り取られます。

  • Etcd v3で作業する際の AuthOldRevision エラーを処理します。Alexander Kukushkin、Kenny Do

    このエラーは、EtcdがJWTを使用するように構成されている場合、Etcdのユーザデータベースが更新されたときに発生します。

バージョン3.1.2

2023-09-26リリース

Bugfixes

  • wal_keep_size チェックのバグを修正しました。Alexander Kukushkin

    wal_keep_size は、通常ユニットがあるGUCであり、パトロニはその値を int にキャストできませんでした。その結果、 bootstrap.dcs の値はその後 /config キーに書き込まれませんでした。

  • /sync キーと synchronous_standby_names 間の不一致を検出および解決するようになりました。Alexander Kukushkin

    通常、Patroniは非常に特定の順序で /sync および synchronous_standby_names を更新しますが、バグの場合、または誰かが手動でリセットした場合 synchronous_standby_names 、Patroniは一貫性のない状態になってしまいました。その結果、フェールオーバーが非同期ノードで発生する可能性がありました。

  • 実行中のPostgresに参加するときにGUCの値を読み取ります Alexander Kukushkin

    pause で再起動すると、Patroniは postgresql.conf から synchronous_standby_names GUCを破棄していました。それを解決し、同様の問題を回避するために、Patroniは、既に実行中のPostgresに参加する場合、GUCの値を読み取ります。

  • ノードの一意性をチェックする際の迷惑な警告を沈黙させました Alexander Kukushkin

    Patroniがすぐに再起動された場合、 WARNING メッセージは urllib3 によって生成されます。

バージョン3.1.1

2023-09-20リリース

Bugfixes

  • プロモート時にフェイルセーフ状態をリセットする ChenChangAo

    フェールセーフモードがアクティブになった直後にスイッチオーバー/フェールオーバーが発生した場合、フェールセーフが非アクティブになった後、新しく昇格したプライマリは自分自身を降格していました。

  • patronictl の無駄な警告を沈黙させます。Alexander Kukushkin

    patronictl がPatroniと同じpatroni.yamlファイルを使用し、 PGDATA ディレクトリにアクセスできる場合、グローバル構成の不正な値に関する迷惑な警告が表示されていた可能性があります。

  • コーナーケースの同期モードを明示的に有効にする Alexander Kukushkin

    プライマリからストリーミングするレプリカがない場合、同期モードは事実上アクティブ化されません。

  • 0 整数値検証のバグを修正しました。Israel Barth Rubio

    ほとんどの場合、それは問題を発生させず、警告だけでした。

  • スタンバイクラスターの論理スロットを返さないでください Alexander Kukushkin

    Patroniはスタンバイクラスターに論理レプリケーションスロットを作成できないため、グローバル構成で定義されている場合は無視する必要があります。

  • patronictl --help 出力でのdocstringの表示を回避します。Israel Barth Rubio

    click モジュールは、そのための特別なヒントを取得する必要があります。

  • kubernetes.standby_leader_label_value のバグを修正しました。Alexander Kukushkin

    この機能は事実上動作しませんでした。

  • クラスターシステム識別子が patronictl list 出力に返されました Polina Bungina

    この問題は、Citusのサポートを実装しているときに発生しました。コーディネーターとすべてのワーカーで異なるため、識別子を非表示にする必要があります。

  • Kubernetes実装の write_leader_optime メソッドをオーバーライドする Alexander Kukushkin

    このメソッドは、新しいプライマリになることができる正常なレプリカがない場合に、シャットダウンLSNをリーダーエンドポイント/構成マップに書き込むことになっています。

  • 一時停止中に停止したpostgresを開始しないでください Alexander Kukushkin

    競合状態のため、パトロニは、一部のリカバリパラメーター primary_conninfo または同様のものが変更されたため、スタンバイを再起動する必要があると誤って仮定していました。

  • patronictl query コマンドのバグを修正しました。Israel Barth Rubio

    -m 引数のみが指定された場合、または -r または -m のいずれも提供されない場合、機能しませんでした。

  • コマンドラインで使用される整数パラメーターを適切に処理してpostgresを起動するようにしました。Polina Bungina

    値が文字列として提供され、整数にキャストされない場合、Citusクラスターの max_connections に基づいて max_prepared_transactions の誤った計算が発生しました。

  • pg_rewind を決定するときは pg_stat_wal_receiver に依存しないでください。 Alexander Kukushkin

    pg_stat_wal_receiver によって報告された received_tli は、実際の再生タイムラインより進んでいる場合がありますが、レプリケーション接続を介して DENTIFY_SYSTEM によって報告されるタイムラインは常に正しいです。

バージョン3.1.0

2023-08-03リリース

Breaking changes

  • restapi.keyfile および restapi.certfile のセマンティックが変更されました。Alexander Kukushkin

    以前、Patroniは、 ctl セクションに各構成パラメーターが存在しない場合、フォールバックとして restapi.keyfile および restapi.certfile をクライアント証明書として使用していました。

警告

クライアント証明書の検証を有効にしている場合 restapi.verify_client が required に設定されている場合、 restapi.verify_client は ctl.certfile 、 ctl.keyfile 、 ctl.keyfile_password に restapi.verify_client を提供します。提供されない場合、Patroniは正しく動作しません。

New features

  • ポッドのロールラベルを構成可能にする Waynerv

    kubernetes.leader_label_value 、 kubernetes.follower_label_value および kubernetes.standby_leader_label_value パラメーターを使用して値をカスタマイズできます。この機能は、 master ロールを primary に変更する場合に非常に役立ちます。機能と移行手順の詳細 kubernetes.leader_label_value を読むことができます。

Improvements

  • patroni --validate-config のさまざまな改善。Alexander Kukushkin

    さまざまなDCS、 bootstrap.dcs 、 ctl 、 restapi 、および watchdog セクションのパラメーター検証が向上しました。

  • パトローニの実行中にリカバリー中にクラッシュした場合、リカバリーしていないスタートPostgres。Alexander Kukushkin

    これにより、リカバリ時間が短縮され、不必要なタイムラインのインクリメントを防ぐことができます。

  • /status キーの不要な更新を回避します。Alexander Kukushkin

    永続的な論理スロットがない場合、Patroniは、プライマリのLSNが前進しない場合でも、ハートビートループごとに /status を更新していました。

  • 失効した予備選にリーダー争いを勝たせてはいけない アレクサンダー・ククシュキン

    リソースの不足がために重要な時間パトローニがハングしていた場合、リーダーロックを取得する前に他のノードがPostgresを昇格させていないことをさらにチェックします。

  • 特定のPostgreSQLパラメーター検証の可視性を実装しました Alexander Kukushkin、Feike Steenbergen

    max_connections 、 max_wal_senders 、 max_prepared_transactions 、 max_locks_per_transaction 、 max_replication_slots 、または max_worker_processes の検証が失敗した場合、 Patroniは正常なデフォルト値を使用していました。これに加えて、警告も表示されます。

  • PGDATA で作成されたファイルとディレクトリのアクセス許可を設定します。Alexander Kukushkin

    Patroniによって作成されたすべてのファイルは、所有者の読み取り/書き込み権限のみを持っていました。この動作は、別のユーザーで実行され、グループの読み取り権限に依存しているバックアップツールを破壊していました。今、Patroniは PGDATA の権限を尊重し、 PGDATA 内に作成するすべてのディレクトリとファイルの権限を正しく設定します。

Bugfixes

  • シェルWaynervを介して archive_command を実行する

    Patroniは、シングルユーザーモードでクラッシュリカバリーを実行する前、または pg_rewind の前に、一部のWALセグメントをアーカイブする場合があります。 archive_commandに && のようなシェル演算子が含まれている場合、Patroniでは動作しませんでした。

  • /"on switchover"のシャットダウンチェックを修正しました。Polina Bungina

    指定された候補はまだストリーミング中であり、シャットダウンチェックを受信していない可能性がありますが、他の一部のノードが正常だったため、リーダーキーが削除されました。

  • /"isprimary"チェックを修正しました Alexander Kukushkin

    リーダーレース中に、レプリカは、古いリーダーのPostgresがまだプライマリとして実行されていることを認識できませんでした。

  • patronictl list を修正しました。Alexander Kukushkin

    クラスター名前フィールドは、 tsv 、 json 、および yaml 出力フォーマットにありませんでした。

  • 一時停止後の pg_rewind の動作を修正しました Alexander Kukushkin

    特定の条件下では、Patroniは、メンテナンスモードから復帰した後、 pg_rewind を使用して偽のプライマリをクラスターに参加させることができませんでした。

  • Etcd v3実装のバグを修正しました。Alexander Kukushkin

    リビジョンの不一致のため、 create_revision / mod_revision フィールドを使用してキー更新が実行された場合、内部KVキャッシュを無効にします。

  • 一時停止中のスタンバイクラスターのレプリカの動作を修正しました Alexander Kukushkin

    リーダーキーの有効期限が切れると、スタンバイクラスターのレプリカはリモートノードをフォローせず、 primary_conninfo をそのまま維持します。

バージョン3.0.4

2023-07-13リリース

New features

  • スタンバイノードのレプリケーションステータスを可視化します Alexander Kukushkin

    PostgreSQL 9.6+の場合、Patroniは、スタンバイが他のノードからストリーミングされている場合は streaming として、またはレプリケーション接続がなく、 restore_command が設定されている場合は in archive recovery としてレプリケーション状態を報告します。状態は、DCSの member キー、REST API、および patronictl list 出力に表示されます。

Improvements

  • Etcd v3のエラーメッセージの向上 Alexander Kukushkin

    Etcd v3クラスターにアクセスできない場合 Patroniは、 /v2 エンドポイントにアクセスできないと報告していました。

  • 可能であれば patronictl のクォーラム読み取りを使用します Alexander Kukushkin

    EtcdまたはConsulクラスターは読み取り専用に低下する可能性がありますが、 patronictl ビューからはすべて問題ありませんでした。今では、エラーで失敗します。

  • 構成内の重複した名前からのスプリットブレインを防止します。 Mark Pekala

    Patroniは、起動時に、同じ名前のノードがDCSに登録されているかどうかを確認し、そのREST APIを照会しようとします。 REST APIがアクセス可能な場合、Patroniはエラーで終了します。人的エラーからの保護に役立ちます。

  • パトローニの実行中にクラッシュした場合、スタートPostgresがリカバリーしていません。Alexander Kukushkin

    リカバリー時間を短縮することができ、不必要なタイムラインのインクリメントから役立ちます。

Bugfixes

  • REST API SSL証明書は、SIGHUPの受信時にリロードされませんでした。Israel Barth Rubio

    リグレッションは3.0.3で導入されました。

  • max_connections のようなパラメーターの整数GUC検証を修正しました。Feike Steenbergen

    パトローニは引用符で囲まれた数値を好みませんでした。リグレッションは3.0.3で導入されました。

  • synchronous_mode の問題を修正しました。Alexander Kukushkin

    synchronous_mode_strict が有効になっているときに不在の同期スタンバイを誤って待機しないように、 synchronous_commit=off とともに txid_current() を実行します。

バージョン3.0.3

2023-06-22リリース

New features

  • PostgreSQL 16 beta1との互換性 Alexander Kukushkin

    拡張されたGUCのバリデータールール。

  • PostgreSQL GUCのバリデーターを拡張可能にする Israel Barth Rubio

    バリデータールールは、 patroni/postgresql/available_parameters/ ディレクトリにあるYAMLファイルからロードされます。ファイルはアルファベット順に並べられ、次々に適用されます。非標準のPostgresディストリビューションのカスタムバリデーターを使用できるようになります。

  • restapi.request_queue_size オプションを追加しました。Andrey Zidenkov、Aleksei Sukhov

    Patroni REST APIが使用するTCPソケットの要求キューサイズを設定します。キューがいっぱいになると、それ以降の要求は/"Connection denied/"エラーを取得します。デフォルト値は5です。

  • 新しいクラスターを初期化するときに initdb を直接呼び出します。Matt Baker

    以前は pg_ctl を介して呼び出され、 initdb に渡されるパラメーターの特別な引用符が必要でした。

  • 停止フックの前に追加Le Duane

    フックは postgresql.before_stop を介して構成でき、 pg_ctl stop の直前に実行されます。終了コードはシャットダウンプロセスに影響を与えません。

  • カスタムPostgresバイナリ名のサポートを追加しました Israel Barth Rubio、Polina Bungina

    カスタムPostgresディストリビューションを使用する場合、 PostgresバイナリがコミュニティPostgresディストリビューションで使用されるものとは異なる名前でコンパイルされる場合があります。カスタムバイナリ名は、 postgresql.bin_name. * および ``PATRONI_POSTGRESQL_BIN_* `` 環境変数を使用して構成できます。

Improvements

  • patroni --validate-config のさまざまな改善Polina Bungina

    • bootstrap.initdb をオプショナルにします。これは新しいクラスターにのみ必要ですが、構成に欠落している場合、 patroni --validate-config は不平を訴えていました。

    • postgresql.bin_dir が空であるか、設定されていない場合にエラーを出さないようにします。代わりに、最初にデフォルトのPATHでPostgresバイナリを見つけてみてください。

    • postgresql.authentication.rewind セクションをオプショナルにします。それが見つからない場合、Patroniはスーパーユーザーを使用しています。

  • patronictl のエラーレポートの向上Israel Barth Rubio

    /n シンボルは、実際の改行シンボルの代わりに、そのままレンダリングされました。

Bugfixes

  • Citusサポートの問題を修正しました。Alexander Kukushkin

    スイッチオーバー中に昇格したワーカーからコーディネーターへのREST API呼び出しが失敗した場合、特定のCitusグループが無期限にブロックされたままになっていました。

  • patronictl`の--dcs-url`オプションで`etcd3` URLを許可します。Israel Barth Rubio

    ユーザが`patronictl`の`--dcs-url`オプションを介して`etcd3` URLを渡そうとすると、例外が発生します。

バージョン3.0.2

2023-03-24リリース

警告

バージョン3.0.2は、3.6より古いPythonのサポートを終了しました。

New features

  • 同期スタンバイレプリカステータスを /metrics エンドポイントに追加しました。Thomas von Dein、Alexander Kukushkin

    以前は、 primary / standby_leader / replica のみをレポートしていました。

  • patronictl での PAGER の使いやすい処理Israel Barth Rubio

    PAGER 環境変数を介してページャーを構成可能になります。これは、デフォルトの less および more をオーバーライドします。

  • K8sを再試行可能なHTTPステータスコードを構成可能にします Alexander Kukushkin

    一部の管理対象プラットフォームでは、ステータスコード 401 Unauthorized を取得することができますが、これは数回の再試行後に解決される場合があります。

Improvements

  • recovery_target_action が promote に設定されている場合にのみ、カスタムブートストラップ中に hot_standby を off に設定します。 Alexander Kukushkin

    recovery_target_action=pause を正しく動作させる必要がありました。

  • on_reload コールバックが他のコールバックをkillすることを許可しないでください Alexander Kukushkin

    on_start / on_stop / on_role_change は、通常、仮想IPを追加/削除するために使用され、 on_reload はそれらに干渉しないはずです。

  • awsコールバックサンプルスクリプトで IMDSFetcher に切り替えました Polina Bungina

    IMDSv2 は使用するトークンを必要とし、 IMDSFetcher はそれを透過的に処理します。

Bugfixes

  • Kubernetesで実行されているCitusクラスターの patronictl switchover を修正しました。Lukáš Lalinský

    default とは異なる名前空間では機能しませんでした。

  • メジャーバージョンが不明な場合は PGDATA に書き込まないでください Alexander Kukushkin

    start直後に PGDATA が空であった場合まだマウントされていない場合、PatroniはPostgreSQLバージョンについて誤った仮定を立て、実際のメジャーバージョンがv10+であっても recovery.conf ファイルを誤って作成していました。

  • コーディネーターフェイルオーバー後のCitusメタデータのバグを修正しました。Alexander Kukushkin

    citus_set_coordinator_host() 呼び出しはメタデータの同期を発生させず、変更はワーカーノードでは不可視でした。この問題は、 citus_update_node() に切り替えることにより解決されます。

  • すべてのetcdノードが/"failed"した場合、構成ファイルにリストされているetcdホストをフォールバックとして使用します Alexander Kukushkin

    etcdクラスターは時間の経過とともにトポロジを変更する場合があり、Patroniはそれに従おうとします。ある時点ですべてのノードが到達不能になった場合、Patroniは、構成からのノードと、再接続しようとするときに最後の既知のトポロジの組み合わせを使用します。

バージョン3.0.1

2023-02-16リリース

Bugfixes

  • 適切なロール名を on_role_change コールバックスクリプトに渡します。 (アレクサンダー・ククシュキン、ポリーナ・ブンギナ)

    Patroniは、プロモーション時に promoted ロールを on_role_change コールバックスクリプトに誤って渡していました。渡されたロール名は master に戻りました。この回帰は3.0.0で導入されました。

バージョン3.0.0

2023-01-30リリース

このバージョンでは、 Citus _との統合を追加し、プライマリを降格せずに一時的なDCSの停止を乗り切ることができます。

警告

  • バージョン3.0.0は、Python 2.7をサポートする最後のリリースです。次のリリースでは、3.7より古いPythonバージョンのサポートを終了します。

  • RAFTサポートは非推奨です。メンテナンスには最善を尽くしますが、発生する可能性のある問題については保証も責任も負いません。

  • このバージョンは、/"primary/"を優先して、/"master/"を削除する最初のステップです。次のメジャーリリースへのアップグレードは、少なくとも3.0.0を実行している場合にのみ確実に機能します。

New features

  • DCSフェイルセーフモード Alexander Kukushkin、Polina Bungina

    この機能が有効になっている場合、Patroniクラスターは一時的なDCSの停止を生き延びることができます。詳細については、 documentation をご覧ください。

  • Citusのサポート Alexander Kukushkin、Polina Bungina、Jelte Fenema

    Patroni enables easy deployment and management of Citus clusters with HA. Please check here page for more information.

Improvements

  • 不明ながアクティブなレプリケーションスロットをドロップする際の再発エラーの抑制 Michael Bankk

    Patroniはこれらのログを書き込みますが、デバッグでのみです。

  • HAループごとに1つのモニタリングクエリーのみを実行します。Alexander Kukushkin

    同期レプリケーションが有効になっている場合は、そうではありません。

  • 最新の障害データディレクトリのみを保持します。William Albertus Dembo

    ブートストラップが失敗した場合、Patroniはタイムスタンプサフィックスを使用して$PGDATAフォルダーの名前を変更していました。今後、サフィックスは .failed になり、そのようなフォルダーが存在する場合、名前を変更する前に削除されます。

  • 同期レプリケーション接続のチェックの向上 Alexander Kukushkin

    新しいホストが synchronous_standby_names に追加されると、 pg_stat_replication.sync_state = 'sync' に加えてプライマリに追いついた場合にのみDCSで同期として設定されます。

Removed functionality

  • patronictl scaffold の削除 Alexander Kukushkin

    これを使用する唯一の理由は、スタンバイクラスターを実行するハッキングな方法でした。

バージョン2.1.7

2023-01-04リリース

Bugfixes

  • 古いPythonモジュールとの小さな非互換性を修正しました。Alexander Kukushkin

    彼らは、Debianバスター/Ubuntu bionicでPatroniをビルド/実行できませんでした。

バージョン2.1.6

2022-12-30リリース

Improvements

  • sslソケットのシャットダウン時の迷惑な例外を修正しました Alexander Kukushkin

    HAProxyは、HTTPステータスコードを取得するとすぐに接続を閉じているため、PatroniがSSL接続を適切にシャットダウンする時間がありません。

  • arm64のDockerfileの例を調整する (Polina Bungina)

    明示的な amd64 および x86_64 を削除します。 libnss_files.so.* は削除しないでください。

Security improvements

  • 非レプリケーション接続に search_path=pg_catalog を適用する Alexander Kukushkin

    Patroniはスーパーユーザー接続に大きく依存しているため、 pg_catalog の対応するオブジェクトと同じ名前とシグネチャを持つ public スキーマのユーザー定義ファンクションおよび/または演算子を使用して実行される可能性のある攻撃から保護したいと思います。そのため、 search_path=pg_catalog は、Patroniによって作成されたすべての接続レプリケーション接続を除くに適用されます。

  • パスワードが pg_stat_statements に記録されないようにします Feike Steenbergen

    これは、ユーザーを作成するときに pg_stat_statements.track_utility=off を設定することにより実現されます。

Bugfixes

  • proxy_address をオプショナルとして宣言します Denis Laxalde

    これは事実上不要なオプションであるため。

  • 安全でないオプションの動作を改善しました Alexander Kukushkin

    REST API要求にクライアント証明書が使用される場合、Ctlの insecure オプションは適切に動作しませんでした。

  • 新しいクラスターがブートストラップされるときに bootstrap.dcs からウォッチドッグ構成を取得します。Matt Baker

    Patroniは、DCSのブートストラップに使用される構成を取得するのではなく、新しいクラスターをブートストラップするときに、デフォルトでウォッチドッグを最初に構成していました。

  • WIN32で実行可能ファイルを検索するときにファイル拡張子が処理される方法を修正しました。Martín Marqués

    拡張子がまだない場合、ファイル名にのみ .exe を追加します。

  • Consul TTLセットアップを修正しました。Alexander Kukushkin

    HTTPクライアントで値を設定するときに ttl/2.0 を使用しましたが、クラスのプロパティで現在の値を2で乗算するのを忘れました。その結果、Consul TTLが2倍オフになりました。

Removed functionality

  • patronictl configure の削除 Polina Bungina

    別個の patronictl 構成を作成する必要はありません。

バージョン2.1.5

2022-11-28リリース

このバージョンは、 PostgreSQL 15との互換性を強化し、Etcd v3サポートを実稼働対応として宣言します。 Raftのパトローニはベータ版のままです。

New features

  • patroni --validate-config の改善 Denis Laxalde

    構成が無効な場合はコード1で終了し、標準エラー出力にエラーを出力します。

  • 一時停止中にレプリケーションスロットをドロップしないでください Alexander Kukushkin

    Patroniは、メンバーがクラスターに参加/離脱するときに、物理レプリケーションスロットを自動的に作成/削除します。一時停止中のスロットは削除されなくなります。

  • モニタリングエンドポイントの HEAD 要求メソッドのサポート Robert Cutajar

    GET の代わりに使用される場合、PatroniはHTTPステータスコードのみを返します。

  • Windowsでの動作テストのサポート Alexander Kukushkin

    新しいREST APIエンドポイント POST /sigterm を導入することにより、 Windowsで正常なPatroniシャットダウン SIGTERM をエミュレートします。

  • postgresql.proxy_address の紹介 Alexander Kukushkin

    これは proxy_url としてDCSのメンバーキーに書き込まれ、サービスディスカバリに使用/役立つ可能性があります。

Stability improvements

  • スレッドから pg_replication_slot_advance() を呼び出します。Alexander Kukushkin

    多くの論理レプリケーションスロットを持つビジーなクラスターでは、 pg_replication_slot_advance() 呼び出しがメインHAループに影響を与え、メンバーキーの有効期限が発生する可能性がありました。

  • 古いプライマリで pg_rewind を呼び出す前に、欠落している可能性のあるWALをアーカイブします Polina Bungina

    プライマリがクラッシュして、かなりの時間ダウンしている場合、一部のWALファイルがアーカイブと新しいプライマリから失われる可能性があります。 pg_rewind は、古いプライマリからこれらのWALファイルを削除し、スタンバイとして起動できなくする可能性があります。 ready WALファイルをアーカイブすることにより、この問題を軽減するだけでなく、一般的に継続的なアーカイブエクスペリエンスが向上します。

  • Kubernetesサービスを作成しようとするときは 403 エラーを無視します。Nick Hudson、Polina Bungina

    Patroniは、サービスを作成しようとして失敗したことによりログをスパム送信していましたが、実際には既に存在する可能性があります。

  • livenessプローブの向上 Alexander Kukushkin

    ライブネス問題は、ハートビートループがプライマリの`ttl`またはレプリカの`2*ttl`より長く実行されている場合に失敗し始めます。これにより、Kubernetesで watchdog の代替として使用できます。

  • スイッチオーバー時に同期ノードのみがロックを取得しようとするようにしました Alexander Kukushkin、Polina Bungina

    以前は、ターゲットを指定せずに手動スイッチオーバーが実行された場合、最新の非同期メンバーがリーダーになる可能性はほとんどありませんでした。

  • ブートストラップの実行中のクローン作成を回避する Ants Aasma

    クラスターブートストラップの実行中は、リーダーをトリガーする必要のないレプリカ作成メソッドを許可しないでください。

  • kazoo-2.9.0との互換性 Alexander Kukushkin

    Pythonバージョンによっては、閉じたソケットで select() が呼び出される場合、 SequentialThreadingHandler.select() メソッドは TypeError および IOError 例外を発生させる場合があります。

  • ソケットをシャットダウンする前にSSL接続を明示的にシャットダウンします Alexander Kukushkin

    これを行わないと、OpenSSL 3.0で unexpected eof while reading エラーが発生しました。

  • `prettytable>=2.2.0`との互換性 Alexander Kukushkin

    内部APIの変更が原因で、クラスター名前ヘッダーが誤った行に表示されました。

Bugfixes

  • Etcd resume_grantの有効期限が切れたトークンを処理する monsterxx03

    エラーが発生した場合は、新しいトークンを取得して、要求を再試行します。

  • GET /read-only-sync エンドポイントのバグを修正しました。Alexander Kukushkin

    これは、以前のリリースで導入されたもので、事実上動作しませんでした。

  • データディレクトリストレージが消失した場合の処理 Alexander Kukushkin

    Patroniは、PGDATAが存在し空ではないことを定期的にチェックしていますが、ストレージに問題が発生した場合、 os.listdir() は OSError 例外を発生させ、ハートビートループを中断しています。

  • ユーザーのバックエンドが閉じるのを待機するときに master_stop_timeout を適用する Alexander Kukushkin

    ユーザーのバックエンドのように見えるものは、実際には停止に失敗しているバックグラウンドワーカーCitusメンテナンスデーモンなどである可能性があります。

  • postgresql.listen の *:<port> を受け入れます Denis Laxalde

    patroni --validate-config は、無効であることについて苦情を述べていました。

  • Raftのタイムアウトの修正 Alexander Kukushkin

    Patroniまたはpatronictlが起動すると、既知のメンバーからRaftクラスタートポロジを取得しようとします。これらの呼び出しは、適切なタイムアウトなしで行われました。

  • トークンが変更された場合に領事サービスを強制的に更新します。 John A. Lotoski

    そうしないと、エラー/"rpc error Making call: rpc error Making call: ACL not found/"が発生します。

バージョン2.1.4

2022-06-01リリース

New features

  • 一般的なDebian / Ubuntuシステムでの pg_rewind の動作を改善します Gunnar /"Nick/" Bluth

    postgresql.conf`をデータディレクトリの外部に保持するPostgresセットアップたとえば、Ubuntu/Debianパッケージでは、 ``pg_rewind --restore-target-wal` は restore_command の値を理解できません。

  • Consulサービスチェックで TLSServerName の設定を許可する マイケル・グメリン

    チェックがIPによって実行され、Consul node_name がFQDNではない場合に役立ちます。

  • ウォッチドッグに ppc64le サポートを追加しました。Jean-Michel Scheiwiler

    また、一部の非x86プラットフォームでのウォッチドッグのサポートを修正しました。

  • aws.pyコールバックを boto から boto3 に切り替えました。Alexander Kukushkin

boto 2.xは2018年から放棄され、python 3.9で失敗します。

  • K8sのサービスアカウントトークンを定期的に更新します。 Haitao Li

    Kubernetes v1.21以降、サービスアカウントトークンは1時間で有効期限が切れます。

  • /read-only-sync モニタリングエンドポイントDennis4bを追加しました

    /read-only に似ていますが、同期レプリカのみが含まれます。

Stability improvements

  • プライマリとの論理デコードセットアップに構成の不一致がある場合、論理レプリケーションスロットをレプリカにコピーしないでください。 Alexander Kukushkin

    スロットが plugin または database 構成オプションと一致しない場合、レプリカはプライマリから論理レプリケーションスロットをコピーしません。以前は、スロットがこれらの構成オプションと一致するかどうかのチェックは、レプリカがスロットをコピーして起動するまで実行されず、不要な再起動が繰り返されていました。

  • PostgreSQL v12+のリカバリ構成パラメーターの特別な処理 Alexander Kukushkin

    レプリカとしてスタートしている間、パトロニは、 pg_settings から照会する代わりに現在のパラメーター値をキャッシュすることにより、リーダーアドレスが変更された場合、 postgresql.conf を更新し、リスタート/リロードできる必要があります。

  • postgresql.listen パラメーターでのIPv6アドレスの処理の向上 Alexander Kukushkin

    listen パラメーターにはポートがあるため、IPv6アドレスを角かっこ内に入力しようとしますが、リストに複数のIPがある場合、これは正しく削除されませんでした。

  • PostgreSQL v10以前でのみ発散チェックを実行する場合に replication 資格情報を使用する Alexander Kukushkin

    rewind が有効になっている場合、Patroniは新しいPostgresバージョンで superuser または rewind 資格情報を再度使用します。

Bugfixes

  • dateutil.parser のインポートの欠落を修正しました。Wesley Mendes

    他のモジュールからインポートされたという理由だけで、テストは失敗していませんでした。

  • optime アノテーションが文字列であることを確認しました Sebastian Hasler

    特定の場合、パトローニはそれを数値として渡そうとしていました。

  • 失敗した pg_rewind 試行の処理の向上 Alexander Kukushkin

    pg_rewind 中にプライマリが利用できなくなると、 $PGDATA は破損した状態のままになります。その後、Patroniは、構成で許可されていない場合でもデータディレクトリを削除します。

  • PostgreSQLの準備ができていない場合は、リーダー ConfigMap / Endpoint から slots アノテーションを削除しないでください。 Alexander Kukushkin

    slots 値が渡されない場合、アノテーションは現在の値を保持します。

  • K8s APIウォッチャーによる同時実行問題の処理 Alexander Kukushkin

    特定の不明な条件下では、ウォッチャーが古くなる場合があります。その結果、 attempt_to_acquire_leader() メソッドはHTTPステータスコード409により失敗する可能性があります。その場合、ウォッチャー接続をリセットし、最初からリスタートします。

バージョン2.1.3

2022-02-18リリース

New features

  • patronictl の暗号化されたTLSキーのサポートを追加しました Alexander Kukushkin

    ctl.keyfile_password または PATRONI_CTL_KEYFILE_PASSWORD 環境変数を介して構成できます。

  • /metricsエンドポイントにメトリックを追加しました。Alexandre Pereira

    具体的には、 patroni_pending_restart および patroni_is_paused 。

  • スタンバイクラスタ構成で複数のホストを指定できるようにしますマイケル・バンク

    スタンバイクラスターがPatroniクラスターからレプリケートしている場合、PostgreSQL v10以降の libpq で利用可能なクライアントサイドのフェールオーバーに依存するのが良いかもしれません。つまり、スタンバイリーダーの primary_conninfo と pg_rewind 接続文字列の target_session_attrs=read-write を設定します。 pgpass ファイルは複数行ホストごとに1行で生成され、プライマリクラスターノードで CHECKPOINT を呼び出す代わりに、スタンバイクラスターは pg_control が更新されるのを待機します。

Stability improvements

  • 古い psycopg2 との互換性。Alexander Kukushkin

    たとえば、Ubuntu 18.04パッケージからインストールされた psycopg2 には、 UndefinedFile 例外がまだありません。

  • すべてのEtcdノードが応答しない場合は、 etcd3 ウォッチャーを再起動します。 Alexander Kukushkin

    ウォッチャーが生きている場合、すべてのEtcdノードに障害が発生している場合でも、 get_cluster() メソッドは古い情報を返し続けます。

  • 一時停止中にスタンバイクラスターのリーダーロックを削除しないでください Alexander Kukushkin

    以前は、ロックは、スタンバイリーダーではなく、プライマリとして実行されているノードによってのみ維持されていました。

Bugfixes

  • スタンバイリーダーブートストラップのバグを修正しました。Alexander Kukushkin

    Patroniは、Postgresが60秒後に接続の受け入れを開始しない場合、ブートストラップが失敗したと考えていました。このバグは2.1.2リリースで導入されました。

  • カスケードスタンバイへのフェイルオーバーのバグを修正しました。Alexander Kukushkin

    カスケードスタンバイでどのスロットを作成するかを判断するとき、リーダーが存在しない可能性があることを考慮するのを忘れていました。

  • Postgres構成バリデータの小さな問題を修正しました。Alexander Kukushkin

    validator.pyで最小値と最大値が引用符で囲まれていたため、PostgreSQL v14で導入された整数パラメーターは検証に失敗していました

  • リーダーのステータスを確認するときにレプリケーション資格情報を使用する Alexander Kukushkin

    remove_data_directory_on_diverged_timelines は設定されている可能性がありますが、 rewind_credentials は定義されておらず、ノード間のスーパーユーザーアクセスは許可されていません。

  • REST API証明書の置換時の/"port in use/"エラーを修正しました Ants Aasma

    証明書を切り替えるときに、同時API要求との競合状態が発生しました。置換期間中にアクティブなものがある場合、置換はポート使用中エラーでエラーになり、PatroniはアクティブなAPIサーバーがない状態でスタックします。

  • パスワードに % 文字が含まれる場合、クラスターブートストラップのバグを修正しました。 Bastien Wirtz

    ブートストラップメソッドは、すべてのパラメーターを適切に引用して DO ブロックを実行しますが、 cursor.execute() メソッドは渡されたパラメーターを含む空のリストを好みませんでした。

  • /"AttributeError: no property 'leader'/"例外を修正しました。Hrvoje Milković

    これは、同期モードが有効になっており、DCSコンテンツがワイプアウトされた場合に発生する可能性があります。

  • ダイバージェンスタイムラインチェックのバグを修正しました。Alexander Kukushkin

    パトローニは、タイムラインが分岐したと誤って仮定していました。 pg_rewindの場合、問題は発生しませんでしたが、 pg_rewindが許可されず、 remove_data_directory_on_diverged_timelines が設定されている場合、以前のリーダーが再初期化される結果になりました。

バージョン2.1.2

2021-12-03リリース

New features

  • psycopg>=3.0 との互換性。Alexander Kukushkin

    デフォルトでは、 psycopg2 が優先されます。 psycopg>=3.0`は、 ``psycopg2` が利用できない場合、またはそのバージョンが古すぎる場合にのみ使用されます。

  • dcs_last_seen フィールドをREST APIに追加します Michael Bank

    このフィールドは、クラスターメンバーがDCSと正常に通信した最後にUNIXエポックとしてノートします。これは、ネットワークパーティションを特定および分析するのに役立ちます。

  • pg_controldata が/"shut down/"を報告したときにリーダーロックを解放します Alexander Kukushkin

    archive_command が遅い/障害がある場合の遅いスイッチオーバー/シャットダウンの問題を解決するために、 pg_controldata が shut down としてPGDATAをきれいに報告し始め、すべての変更を受け取った少なくとも1つのレプリカが存在することを確認した直後に、パトロニはリーダーキーを削除します。この条件を満たすレプリカがない場合、リーダーキーは削除されず、古い動作が保持されます。つまり、パトローニはロックを更新し続けます。

  • sslcrldir 接続パラメーターのサポートを追加しました Kostiantyn Nemchenko

    新しい接続パラメーターはPostgreSQL v14で導入されました。

  • ZookeeperでZNodesのACL設定を許可します。Alwyn Davis

    新しい構成オプション zookeeper.set_acls を導入して、Kazooが作成する各ZノードにデフォルトのACLを適用するようにします。

Stability improvements

  • 次のHAループまで、次のリカバリーの試行を遅らせます。Alexander Kukushkin

    ディスク領域たとえば、Postgresがクラッシュし、そのために起動に失敗した場合、Patroniはそれを回復しようとすることにあまりにも熱心にログを氾濫させています。

  • 降格する前にログを追加します。これには時間がかかる場合があります。 Michael Bank

    降格が完了するまでに時間がかかる場合があり、ログを見ても、正確に何が起こっているのかが明らかでない場合があります。

  • /"I am/"ステータスメッセージを改善しました Michael Bank

    no action. I am a secondary ({0}) vs no action. I am ({0}), a secondary

  • wal_keep_size に変換するときにint wal_keep_segments にキャストするようになりました。 Jorge Solórzano

    グローバル wal_keep_segments の文字列として wal_keep_segments を指定することが可能であり、Pythonは動的型付け言語であるため、文字列は単に乗算されました。例 wal_keep_segments: /"100/" は 100100100100100100100100100100100100100100100100MB に変換されました。

  • 同期レプリケーションが有効になっている場合、同期ノードへのスイッチオーバーのみを許可します Alexander Kukushkin

    それに加えて、リーダーは既知の同期ノードに対してのみレースを行います。

  • Postgresが遅い場合に、キャッシュされたロールをフォールバックとして使用する Alexander Kukushkin

    一部の極端なケースでは、Postgresが非常に遅いため、通常の監視クエリが数秒で終了しない場合があります。 statement_timeout 例外が適切に処理されない場合、リーダーキーの有効期限が切れた場合、または更新が失敗したときにPostgresが時間通りに降格されない状況が発生する可能性があります。このような例外が発生した場合、Patroniはキャッシュされた role を使用して、Postgresがプライマリとして実行されているかどうかを判断します。

  • メンバーZNodeの不必要な更新を回避します。Alexander Kukushkin

    メンバーデータの値が変更されていない場合、更新は発生しないはずです。

  • プロモート後のチェックポイントの最適化 Alexander Kukushkin

    最新のタイムラインが既に pg_control に保存されている場合は、 CHECKPOINT の実行を避けてください。 initdb で新しいクラスターを初期化した直後に、不必要な CHECKPOINT を回避するのに役立ちます。

  • 同期ノードを選択するときに nofailover のないメンバーを優先する Alexander Kukushkin

    以前の同期ノードはレプリケーションラグにのみ基づいて選択されていたため、 nofailover タグが付いているノードは他のノードと同じ同期になる機会がありました。プライマリに障害が発生した場合、フェールオーバーは自動的に発生しないため、この動作は混乱を招くと同時に危険でした。

  • etcdマシンキャッシュから重複ホストを削除します Michael Bank

    etcdクラスター内のアドバタイズされたクライアントURLは、誤って構成されている可能性があります。この場合、Patroniで重複を削除するのは簡単な成果です。

Bugfixes

  • スロット管理中に一時的なレプリケーションスロットをスキップする Alexander Kukushkin

    v10から pg_basebackup は、WALストリーミング用の一時的なレプリケーションスロットを作成します。パトローニは、スロット名が不明に見えるため、それをドロップしようとしていました。それを修正するために、 pg_stat_replication_slots ビューを照会するときにすべての一時スロットをスキップします。

  • pg_replication_slot_advance() がタイムアウトしないことを確認します Alexander Kukushkin

    この場合、パトロニはデフォルトの statement_timeout を使用していましたが、呼び出しが失敗すると、回復しない可能性が非常に高いため、 pg_wal および pg_catalog のサイズが増加します。

  • /status は、降格時に更新されませんでした Alexander Kukushkin

    PostgreSQLを降格した後、古いリーダーはDCSの最後のLSNを更新します。 2.1.0 から、新しい /status キーが導入されましたが、optimeは引き続き /optime/leader に書き込まれます。

  • 降格時のハンドルDCS例外 Alexander Kukushkin

    リーダーロックの更新に失敗したためにマスターを降格しているときに、DCSが完全にダウンし、 get_cluster() 呼び出しが例外を発生する場合があります。適切に処理されない場合、DCSが回復するまでPostgresは停止したままになります。

  • use_unix_socket_repl は場合によっては機能しませんでした Alexander Kukushkin

    具体的には、 postgresql.unix_socket_directories が設定されていない場合。この場合、Patroniは libpq のデフォルト値を使用することになっています。

  • Patroni REST APIのいくつかの問題を修正しました Alexander Kukushkin

    clusters_unlocked は定義できない場合があり、 GET /metrics エンドポイントで例外が発生しました。それに加えて、エラー処理方法は、 connect_address タプルに常に2つの要素があることを前提としていましたが、実際には、IPv6の場合にはもっと多くの要素がある可能性があります。

  • 巻き戻しを決定する前に、新しく昇格したノードの復旧が完了するのを待ってください Alexander Kukushkin

    実際のプロモートが発生し、新しいタイムラインが作成されるまでに時間がかかる場合があります。待機せずに、レプリカは巻き戻しが必要ではないという結論に達する可能性があります。

  • 巻き戻しを決定するときに履歴ファイルの欠落したタイムラインを処理する Alexander Kukushkin

    現在のレプリカのタイムラインがプライマリの履歴ファイルにない場合、レプリカはリワインドが必要でないという誤った想定をしていました。

バージョン2.1.1

2021-08-19リリース

New features

  • ETCD SRV名前サフィックスのサポート David Pavlicek

    Etcdを使用すると、同じドメインの下の複数のEtcdクラスターを区別できます。今後、Patroniもそれをサポートします。

  • 新しいリーダーhuiyalin525で歴史を豊かにします

    新しい列を patronictl history 出力に追加します。

  • クラスター内のKubernetes構成用にCAバンドルを構成可能にします Aron Parsons

    デフォルトでは、Patroniは /var/run/secrets/kubernetes.io/serviceaccount/ca.crt を使用しており、この新機能によりカスタム kubernetes.cacert を指定できます。

  • Consulサービスとしての動的な登録/登録解除とタグの変更をサポート Tommy Li

    以前は、Patroniの再起動が必要でした。

Bugfixes

  • REST APIの不必要なリロードを回避します。Alexander Kukushkin

    以前のリリースでは、ディスクで変更された場合にREST API証明書をリロードする機能を追加しました。残念ながら、リロードは開始直後に無条件で発生していました。

  • etcd.use_proxies が設定されているときにクラスターメンバーを解決しないでください Alexander Kukushkin

    Patroniは、起動時に、メンバーのリストを照会することにより、Etcdクラスターの正常性をチェックします。それに加えて、ホスト名を解決しようとしましたが、これはプロキシを介してEtcdで作業する場合に必要ではなく、不要な警告を発生させていました。

  • pg_stat_replication のNULL値を含む行をスキップする Alexander Kukushkin

    pg_stat_replication ビューは、 state = 'streaming' の場合でも、 replay_lsn 、 flush_lsn 、または write_lsn フィールドにNULL値を含めることができるようです。

バージョン2.1.0

2021-07-06リリース

このバージョンでは、 PostgreSQL v14との互換性を追加し、フェールオーバー/スイッチオーバーを生き抜くための論理レプリケーションスロットを作成し、REST APIのホワイトリストのサポートを実装し、ログ数をハートビートごとに1行に削減します。

New features

  • PostgreSQL v14との互換性 Alexander Kukushkin

    Patroniが/"pause/"モード自分自身にない場合、WAL再生の一時停止を解除します。プライマリの max_connections などの特定のパラメーターの変更により、/"paused/"になる可能性があります。

  • フェールオーバー論理スロット Alexander Kukushkin

    PostgreSQL v11以降で論理レプリケーションスロットがフェールオーバー/スイッチオーバーを生き残るようにします。レプリケーションスロットは、リスタートでプライマリからレプリカにコピーされた場合、後で pg_replication_slot_advance() _ファンクションを使用して前方に移動します。その結果、スロットはフェイルオーバー前に既に存在し、イベントが失われることはありませんが、一部のイベントは複数回配信される可能性があります。

  • Patroni REST APIの許可リストを実装しました Alexander Kukushkin

    構成されている場合、ルールと一致するIPのみが安全でないエンドポイントを呼び出すことができます。それに加えて、クラスターのメンバーのIPをリストに自動的に含めることができます。

  • Unixソケットを介したレプリケーション接続のサポートを追加しました。 Mohamed El-Rifai

    以前、Patroniはレプリケーション接続に常にTCPを使用していましたが、SSL検証で問題が発生する可能性がありました。 UNIXソケットを使用すると、レプリケーションユーザーをSSL検証から免除できます。

  • ユーザー定義タグのヘルスチェックArman Jafari Tehrani

    predefined tags: と合わせて、 patronictl list 出力およびREST APIで表示されるカスタムタグを指定できます。今後、ヘルスチェックでカスタムタグを使用できるようになります。

  • Prometheus /metrics エンドポイントを追加しました。Mark Mercado、Michael Bank

    /patroni と同じメトリックを公開するエンドポイント。

  • Patroniログのおしゃべり性の低下 Alexander Kukushkin

    すべてが正常な場合、 HAループの実行ごとに1行のみが書き込まれます。

Breaking changes

  • 古い permanent logical replication slots 機能は、PostgreSQL v10以前では動作しなくなりました。Alexander Kukushkin

    プロモーションを実行した後に論理スロットを作成する戦略では、論理イベントが失われないこと、したがって無効になることを保証できません。

  • ノードがロックを保持している場合、 /leader エンドポイントは常に200を結果ます。 Alexander Kukushkin

    スタンバイクラスターを昇格させるには、ロードバランサーのヘルスチェックを更新する必要がありますが、これはあまり便利ではなく、忘れがちです。それを解決するには、 /leader ヘルスチェックエンドポイントの動作を変更します。クラスターが通常のクラスターであるか standby_cluster であるかを考慮せずに、 200を返します。

Improvements in Raft support

  • Raftトラフィック暗号化の信頼できるサポート Alexander Kukushkin

    PySyncObj のさまざまな問題のため、暗号化のサポートは非常に不安定でした

  • Raft実装でのDNSの問題の処理 Alexander Kukushkin

    self_addr および/または partner_addrs がIPの代わりにDNS名を使用して構成されている場合、 PySyncObj はオブジェクトの作成時に1回のみ効果的に解決を行っていました。同じノードが別のIPでオンラインに戻ったときに問題が発生していました。

Stability improvements

  • psycopg2-2.9+ との互換性。Alexander Kukushkin

    psycopg2 では、 autocommit = True は with connection ブロックで無視され、レプリケーションプロトコル接続が切断されます。

  • Zookeeperでの過剰なHAループの実行を修正しました。Alexander Kukushkin

    メンバーZノードの更新は連鎖反応を引き起こし、その結果、 HAループが連続して複数回実行されました。

  • ディスク上のREST API証明書が変更された場合はリロードします Michael Todorovic

    REST API証明書ファイルがインプレースで更新された場合、Patroniはリロードを実行しませんでした。

  • kerberos認証が使用される場合、pgpassディレクトリを作成しないでください Kostiantyn Nemchenko

    Kerberosとパスワード認証は相互に排他的です。

  • カスタムブートストラップの小さな問題を修正しました。Alexander Kukushkin

    PITRを実行する場合にのみ hot_standby=off でPostgresを起動し、PITRが完了したら再起動します。

Bugfixes

  • kazoo-2.7+ との互換性。Alexander Kukushkin

    Patroniは自分自身で再試行を処理しているため、使用可能な接続がない場合にZookeeperクラスターへの要求がすぐに破棄される kazoo の古い動作に依存しています。

  • プロキシを介して接続していることが知られている場合、Etcd v3クラスターのバージョンを明示的に要求します Alexander Kukushkin

    PatroniはgPRCゲートウェイを介してEtcd v3クラスターと連携しており、クラスターバージョンに応じて、異なるエンドポイント /v3 、 /v3beta 、または /v3alpha を使用する必要があります。バージョンはクラスタートポロジとともにのみ解決されましたが、プロキシを介して接続するときに後者は決して実行されないため。

バージョン2.0.2

2021-02-22リリース

New features

  • 外部管理対象レプリケーションスロットを無視する機能 James Coleman

    Patroniは、不明なレプリケーションスロットを削除しようとしていますが、レプリケーションスロットを外部で管理する必要がある場合が確かにあります。これから、削除しないスロットを構成できるようになります。

  • REST APIの暗号スイート制限のサポートを追加しました Gunnar /"Nick/" Bluth

    restapi.ciphers または PATRONI_RESTAPI_CIPHERS 環境変数を介して構成できます。

  • REST APIの暗号化されたTLSキーのサポートを追加しました。Jonathan S. Katz

    restapi.keyfile_password または PATRONI_RESTAPI_KEYFILE_PASSWORD 環境変数を介して構成できます。

  • REST API認証資格情報の定数時間比較 Alex Brasetvik

    == の代わりに hmac.compare_digest() を使用します。これは、タイミング攻撃に対して脆弱です。

  • レプリケーションラグに基づいて同期ノードを選択する Krishna Sarabu

    同期ノードのレプリケーションラグが構成されたしきい値を超え始めると、非同期に降格および/または他のノードに置き換えられる可能性があります。動作は maximum_lag_on_syncnode で制御されます。

Stability improvements

  • カスタムブートストラップを行うときに hot_standby = off でpostgresを開始する Igor Yanchenko

    カスタムブートストラップ中に、Patroniはベースバックアップを復元し、Postgresを起動し、復旧が完了するまで待機しています。スタンバイの一部のPostgreSQLパラメーターは、プライマリより小さくすることはできません。新しい値WALから復元され、構成された値より大きい場合、Postgresはパニックして停止します。このような動作を回避するために、 hot_standby モードを使用せずにカスタムブートストラップを実行します。

  • 必要なウォッチドッグが正常でない場合にユーザーに警告します Nicolas Thauvin

    ウォッチドッグデバイスが書き込み可能でない場合、または必須モードで欠落している場合、メンバーは昇格できません。この誤った構成を検索する場所をユーザーに示す警告を追加しました。

  • シングルユーザーモードのリカバリーの詳細度の向上 Alexander Kukushkin

    PostgreSQLが明確にシャットダウンされていないことにPatroniが気づいた場合、特定の場合、シングルユーザーモードでPostgresを起動することによりクラッシュリカバリーが実行されます。ディスク上の領域の不足などにより、復旧に失敗した場合がありますが、エラーは飲み込まれました。

  • python-consul2 モジュールとの互換性を追加しました。Alexander Kukushkin、Wilfried Roset

    古き良き python-consul は数年以来メンテナンスされていないため、誰かが新機能とバグ修正を備えたフォークを作成しました。

  • patronictl を実行するときに bypass_api_service を使用しないでください Alexander Kukushkin

    K8sポッドが非 default 名前空間で実行されている場合、 kubernetes エンドポイントを照会するための十分な権限があるとは限りません。この場合、Patroniは警告を表示し、 bypass_api_service 設定を無視します。 patronictl の場合、警告は少し迷惑でした。

  • raft.data_dir が存在しない場合は作成するか、書き込み可能であることを確認します。 Mark Mercado

    使いやすさと使いやすさが向上します。

Bugfixes

  • 一時停止中にリーダーロックを失った場合、再起動またはプロモーションを中断しないでください Alexander Kukushkin

    一時停止中に、ロックなしでプライマリとしてpostgresを実行できます。

  • REST APIの shutdown_request() に関する問題を修正しました Nicolas Limage

    SSL接続の処理を改善し、スレッドが開始されるまでハンドシェイクを遅延するために、Patroniは HTTPServer のいくつかのメソッドをオーバーライドします。 shutdown_request() メソッドは忘れられました。

  • Zookeeper使用時のスリープ時間の問題を修正しました。Alexander Kukushkin

    HAコードの実行の間に、パトローニが最大2倍長く眠っていた可能性がありました。

  • ブートストラップが失敗した後にデータディレクトリを移動するときの無効な os.symlink() 呼び出しを修正しました。Andrew L'Ecuyer

    ブートストラップが失敗した場合、Patroniはデータディレクトリ、pg_wal、およびすべてのテーブルスペースの名前を変更しています。その後、シンボリックリンクを更新して、ファイルシステムの一貫性を保ちます。 src および dst 引数がスワップされたため、シンボリックリンクの作成は失敗していました。

  • post_bootstrap()メソッドのバグを修正しました。Alexander Kukushkin

    スーパーユーザーパスワードが構成されていない場合、Patroniは post_init スクリプトの呼び出しに失敗し、したがって、ブートストラップ全体が失敗していました。

  • スタンバイクラスターのpg_rewindに関する問題を修正しました。Alexander Kukushkin

    スーパーユーザー名がPostgresと異なる場合、接続文字列にデータベース名が含まれていないため、スタンバイクラスターの pg_rewind は障害が発生していました。

  • Etcd v3での認証が明示的に失敗した場合にのみ終了します Alexander Kukushkin

    起動時に、PatroniはEtcdクラスタートポロジの検出を実行し、必要に応じて認証します。 etcdサーバーの1つがアクセスできない場合があり、パトロニはこのサーバーで認証を実行しようとしましたが、次のノードで再試行する代わりに失敗しました。

  • 空のリストを返すpsutil cmdline()でケースを処理します。Alexander Kukushkin

    ゾンビプロセスはまだポストマスターの子ですが、cmdline()がありません。

  • PATRONI_KUBERNETES_USE_ENDPOINTS 環境変数をブール値として扱います Alexander Kukushkin

    そうしないと、環境を介して kubernetes.use_endpoints を無効にすることが不可能でした。

  • 同時エンドポイント更新エラーの処理を改善しました Alexander Kukushkin

    Patroniは、現在のエンドポイントオブジェクトを明示的に照会し、現在のポッドがリーダーロックをまだ保持していることを確認して、更新を繰り返します。

バージョン2.0.1

リリース2020-10-01

New features

  • less が利用できない場合は、 patronictl edit-config のページャーとして more を使用します。 Pavel Golub

    Windowsでは、 more.com になります。それに加えて、 requirements.txt では cdiff が ydiff に変更されましたが、 patronictl は互換性のために両方をサポートしています。

  • raft bind_addr および password のサポートを追加しました Alexander Kukushkin

    raft.bind_addr は、NATの背後で実行されている場合に役立つ場合があります。 raft.password は、トラフィック暗号化を有効にします cryptography モジュールが必要です。

  • sslpassword 接続パラメーターのサポートを追加しました Kostiantyn Nemchenko

    ConnectionパラメーターはPostgreSQL 13で導入されました。

Stability improvements

  • 一時停止中の動作を変更しました Alexander Kukushkin

    1. PGDATA ディレクトリが見つからない/空の場合、Patroniは bootstrap メソッドを呼び出しません。

    2. Patroniは一時停止中にsysid不一致でも終了せず、警告のみをログに記録します。

    3. Postgresがリカバリーでなく書き込みを受け入れて実行されていないが、sysidが初期化キーと一致しない場合、ノードは一時停止モードでリーダーキーを取得しようとしません。

  • クラッシュリカバリーを実行するときに master_start_timeout を適用する Alexander Kukushkin

    Postgresがリーダーノードでクラッシュした場合、PatroniはシングルユーザーモードでPostgresを起動することによりクラッシュリカバリーを実行します。クラッシュリカバリー中に、リーダーロックが更新されます。クラッシュリカバリーが master_start_timeout 秒以内に終了しなかった場合、Patroniは強制的に停止し、リーダーロックを解放します。

  • urllib3 要件から secure エクストラを削除しました Alexander Kukushkin

    そこに追加する唯一の理由は、Python 2.7の ipaddress 依存関係でした。

Bugfixes

  • Kubernetes.update_leader() のバグを修正しました。Alexander Kukushkin

    リーダーオブジェクトの更新が失敗した場合、未処理の例外がプライマリの降格を妨げていました。

  • RAFTが使用されているときにハングする patronictl を修正しました。Alexander Kukushkin

    Patroni構成で patronictl を使用する場合、 self_addr を partner_addrs に追加する必要があります。

  • get_guc_value() のバグを修正しました。Alexander Kukushkin

    PatroniはPostgreSQL 12で restore_command の値の取得に失敗していたため、 pg_rewind の欠落しているWALの取得は機能しませんでした。

バージョン2.0.0

2020-09-02リリース

このバージョンは、 PostgreSQL 13との互換性を強化し、複数の同期スタンバイのサポートを追加し、 pg_rewind の処理が大幅に向上し、純粋なRAFT Etcd、Consul、またはZookeeperなしでEtcd v3およびPatroniのサポートを追加し、オプションで呼び出しが可能です pre_promote フェンシングスクリプト。

PostgreSQL 13 support

  • PostgreSQL 13+で standby_leader に昇格するときに on_reload を起動しないでください Alexander Kukushkin

    standby_leader に昇格するときに、 primary_conninfo を変更し、ロールを更新し、Postgresをリロードします。 on_role_change および on_reload は実質的に互いに重複するため、Patroniは on_role_change のみを呼び出します。

  • gssencmode および channel_binding 接続パラメーターのサポートを追加しました Alexander Kukushkin

    PostgreSQL 12では、 gssencmode および13 channel_binding 接続パラメーターを導入し、 postgresql.authentication セクションで定義された場合に使用できるようになりました。

  • wal_keep_segments から wal_keep_size へのハンドル名前変更 Alexander Kukushkin

    構成に誤りがある場合13では wal_keep_segments 、古いバージョンでは wal_keep_size 、Patroniは自動的に構成を調整します。

  • 可能であれば、13で --restore-target-wal とともに pg_rewind を使用します Alexander Kukushkin

    PostgreSQL 13では、Patroniは restore_command が構成されているかどうかを確認し、 pg_rewind にそれを使用するように指示します。

New features

  • [ベータ]純粋なRAFTでのパトローニのサポートを実装しました Alexander Kukushkin

    これにより、Etcd、Consul、Zookeeperなどのサードパーティに依存せずにPatroniを実行できます。 HAの場合、3つのPatroniノード、またはPatroniで2つのノードと1つのノードで patroni_raft_controller を実行する必要があります。詳細については、 patroni_raft_controller を確認してください。

  • [ベータ] gPRCゲートウェイを介したEtcd v3プロトコルのサポートを実装しました。Alexander Kukushkin

    Etcd 3.0は4年以上前にリリースされ、Etcd 3.4ではデフォルトでv2が無効になっています。また、v2がEtcdから完全に削除される可能性があるため、PatroniにEtcd v3のサポートを実装しました。それを使用し始めるには、Patroni構成ファイルである etcd3 セクションを明示的に作成する必要があります。

  • 複数の同期スタンバイのサポート Krishna Sarabu

    これにより、複数の同期レプリカでクラスターを実行できます。同期レプリカの最大数は、新しいパラメーター synchronous_node_count によって制御されます。デフォルトで1に設定され、 synchronous_mode が off に設定されている場合、効果はありません。

  • pre_promote スクリプトを呼び出す可能性を追加しました。Sergey Dudoladov

    コールバックとは異なり、 pre_promote スクリプトは、リーダーロックを取得した後、Postgresを昇格する前に同期的に呼び出されます。スクリプトが失敗するか、ゼロ以外の終了コードで終了すると、現在のノードはリーダーロックを解放します。

  • 構成ディレクトリのサポートを追加しました Floris van Nee

    ディレクトリ内のYAMLファイルは、アルファベット順にロードおよび適用されます。

  • PostgreSQLパラメーターの高度な検証 Alexander Kukushkin

    特定のパラメーターが現在のPostgreSQLバージョンでサポートされていない場合、またはその値が正しくない場合、Patroniはパラメーターを完全に削除するか、値を修正しようとします。

  • プロモート後の強制チェックポイントが完了したときにメインスレッドを起動します Alexander Kukushkin

    レプリカは、DCSのリーダーのメンバーキーを介してチェックポイントの指示を待機しています。キーは通常、 HAループごとに1回のみ更新されます。メインスレッドをウェイクアップしないと、レプリカは必要よりも長く loop_wait 秒まで待機する必要があります。

  • 9.6+での pg_stat_wal_receiver ビューの使用 Alexander Kukushkin

    ビューには、 primary_conninfo および primary_slot_name の最新の値が含まれていますが、 recovery.conf の内容は古い可能性があります。

  • Patroni構成ファイルでのIPv6アドレスの処理の改善 Mateusz Kowalski

    IPv6アドレスは角かっこで囲まれることになっていますが、パトローニはそれをプレーンに取得することを期待していました。両方の形式がサポートされるようになりました。

  • Consul service_tags 設定パラメーターを追加しました。Robert Edström

    これらは、ロードバランサーなどによる動的なサービス検出に役立ちます。

  • ZookeeperのSSLサポートを実装しました Kostiantyn Nemchenko

    kazoo>=2.6.0 が必要です。

  • カスタムブートストラップ方法の no_params オプションを実装しました。Kostiantyn Nemchenko

    これにより、シェルスクリプトにラップせずに wal-g 、 pgBackRest およびその他のバックアップツールを呼び出すことができます。

  • initに失敗した後にWALとテーブルスペースを移動する Feike Steenbergen

    reinit を実行したときに、Patroniは PGDATA だけでなく、シンボリックリンクされたWALディレクトリとテーブルスペースも既に削除していました。 move_data_directory() メソッドは、同様のジョブ、つまりWALディレクトリとテーブルスペースの名前を変更し、PGDATAのシンボリックリンクを更新します。

Improved in pg_rewind support

  • タイムライン発散チェックの改善 Alexander Kukushkin

    レプリカ上の再生された場所がスイッチポイントの前にない場合、または元のプライマリのチェックポイントレコードの最後がスイッチポイントと同じである場合、巻き戻す必要はありません。チェックポイントレコードの最後を取得するために、 pg_waldump を使用し、その出力を解析します。

  • pg_rewind がそれについて文句を言っている場合は、不足しているWALを取得してみます Alexander Kukushkin

    pg_rewind に必要なWALセグメントが pg_wal ディレクトリに存在しないため、 pg_rewind は分岐ポイントの前にチェックポイントの場所を見つけることができません。 PostgreSQL 13以降、 pg_rewind は、不足しているWALを取得するために restore_command を使用できます。古いPostgreSQLバージョンの場合、Patroniは失敗した巻き戻し試行のエラーを解析し、自分自身で restore_command を呼び出すことにより欠落しているWALを取得しようとします。

  • スタンバイクラスターで新しいタイムラインを検出し、必要に応じて巻き戻し/再初期化をトリガーします。 Alexander Kukushkin

    standby_cluster は、プライマリクラスターから分離されているため、リーダー選挙とタイムラインのスイッチについてすぐには認識しません。ファクトを検出するために、 standby_leader は、 pg_wal の新しい履歴ファイルを定期的にチェックします。

  • 履歴ログ出力を短縮および美化します Alexander Kukushkin

    Patroniが pg_rewind の必要性を判断しようとしている場合、プライマリから履歴ファイルの内容をログに書き込む可能性があります。履歴ファイルは、フェイルオーバー/スイッチオーバーのたびに成長し、最終的にはあまりにも多くの行を占有し始めますが、そのほとんどはあまり役に立ちません。生データを表示する代わりに、Patroniは、現在のレプリカタイムラインの前に3行と後に2行のみを表示します。

Improvements on K8s

  • kubernetes pythonモジュールを削除します。Alexander Kukushkin

    公式のPython kubernetesクライアントには、大量の自動生成コードが含まれているため、非常に重くなっています。 PatroniはK8s APIエンドポイントのごく一部のみを使用し、それらのサポートの実装は難しくありませんでした。

  • kubernetes サービスをバイパスできるようにしました。Alexander Kukushkin

    K8sで実行されている場合、Patroniは通常、 kubernetes サービスを介してK8s APIと通信します。そのアドレスは KUBERNETES_SERVICE_HOST 環境変数で公開されます。他のサービスと同様に、 kubernetes サービスは kube-proxy によって処理され、これは、構成に応じて、トラフィックルーティングにユーザー空間プログラムまたは iptables に依存します。中間コンポーネントをスキップし、K8sマスターノードに直接接続することにより、より良い再試行戦略を実装し、K8sマスターノードがアップグレードされたときにPostgresを降格するリスクを軽減できます。

  • PatroniクラスターのすべてのポッドのHAループを同期します Alexander Kukushkin

    そうしないと、障害検出時間が ttl から ttl + loop_wait に増加しました。

  • K8のサブセットアドレスに references および nodename を設定します。Alexander Kukushkin

    一部のロードバランサーはこの情報に依存しています。

  • update_leader() で考えられる競合状態を修正しました。Alexander Kukushkin

    パトロニの外部で発生するリーダー構成マップまたはエンドポイントの同時更新により、 update_leader() 呼び出しが失敗する可能性があります。この場合、Patroniは、現在のノードがまだリーダーロックを所有していることを再確認し、更新を繰り返します。

  • 存在しない構成のパッチの適用を明示的に禁止します Alexander Kukushkin

    kubernetes 以外のDCSでは、 cluster.config が None であるため、 PATCH呼び出しは例外で失敗していますが、Kubernetesでは、喜んで構成アノテーションを作成し、ブートストラップが完了した後にブートストラップ構成の書き込みを防止していました。

  • pause のバグを修正しました。Alexander Kukushkin

    リーダーキーが存在しない場合、レプリカは primary_conninfo を削除し、Postgresを再起動していましたが、何もしないはずです。

Improvements in REST API

  • ワーカースレッドが開始されるまでTLSハンドシェイクを遅延します。Alexander Kukushkin、Ben Harris

    TLSハンドシェイクがAPIスレッドで実行され、クライアントサイドがデータを送信しなかった場合、APIスレッドはブロックされましたDoSの危険があります。

  • REST APIのクライアント証明書とは別に basic-auth をチェックします Alexander Kukushkin

    以前は、クライアント証明書のみが検証されていました。 2つのチェックを独立して実行することは、完全に有効なユースケースです。

  • OPTIONS 要求のHTTPヘッダーの後にダブル CRLF を書き込みます。Sergey Burladyan

    HAProxyは単一の CRLF で満足していましたが、Consulのヘルスチェックは、切断された接続と予期しないEOFについて不平を言いました。

  • GET /cluster は、Zookeeper Alexander Kukushkinの古いメンバー情報を表示していました

    エンドポイントは、Patroni内部クラスタービューを使用していました。 Patroni自分自身の場合、それは問題を引き起こしませんでしたが、外部に公開される場合、最新の情報、特にレプリケーションラグを表示する必要があります。

  • スタンバイクラスターのヘルスチェックを修正しました。Alexander Kukushkin

    マスターの GET /standby-leader と standby_leader の GET /master は、誤って200で応答していました。

  • DELETE /switchover を実装しました Alexander Kukushkin

    REST API呼び出しは、スケジュールされたスイッチオーバーを削除します。

  • /readiness および /liveness エンドポイントを作成しました Alexander Kukushkin

    これらは、K8sサービスがラベルセレクターで使用される場合、サブセットアドレスから/"unhealthy"ポッドを削除するのに役立つ可能性があります。

  • GET /replica および GET /async REST APIヘルスチェックの強化 Krishna Sarabu、Alexander Kukushkin

    チェックはオプショナルキーワード ?lag=<max-lag> をサポートするようになり、遅延が指定された値より小さい場合にのみ200で応答します。この機能に依存する場合、リーダーのWAL位置に関する情報は loop_wait 秒ごとにのみ更新されることに注意してください。

  • REST API応答でのユーザー定義のHTTPヘッダーのサポートを追加しました Yogesh Sharma

    この機能は、ブラウザから要求が行われた場合に役立つ場合があります。

Improvements in patronictl

  • patronictl pause に存在しないリーダーを呼び出そうとしないでください。Alexander Kukushkin

    K8sでリーダーのないクラスターを一時停止しているときに、 patronictl は、メンバー/"None/"にアクセスできないという警告を表示していました。

  • メンバー conn_url が見つからない場合の処理 Alexander Kukushkin

    K8sでは、Patroniがまだ実行されていないため、ポッドに必要なアノテーションがない可能性があります。 patronictl が失敗していました。

  • ASCIIクラスタートポロジを印刷する機能を追加しました。Maxim Fedotov、Alexander Kukushkin

    カスケードレプリケーションを使用してクラスターの概要を取得するのに非常に役立ちます。

  • patronictl flush switchover の実装 Alexander Kukushkin

    それまでは patronictl flush は、スケジュールされた再起動のキャンセルのみをサポートしていました。

Bugfixes

  • 既存のPGDATAを使用したクラスターのブートストラップ中の属性エラー Krishna Sarabu

    /history キーを作成/更新しようとしたとき、PatroniはDCSでまだ作成されていない ClusterConfig オブジェクトにアクセスしていました。

  • Consulの例外処理の向上 Alexander Kukushkin

    touch_member() メソッドの未処理の例外により、Patroniプロセス全体がクラッシュしました。

  • post_init スクリプトに synchronous_commit=local を適用する Alexander Kukushkin

    Patroniはユーザー replication 、 rewind を作成するときに既にそれを行っていましたが、 post_init の場合にそれを欠いていたのは見落としでした。その結果、スクリプトが自分自身で内部的に実行していない場合、 synchronous_mode のブートストラップは完了できませんでした。

  • 領事プールマネージャーponvenkatesの maxsize の増加

    デフォルトの size=1 では、いくつかの警告が生成されました。

  • パトローニはPostgresが実行されていると誤って報告していました Alexander Kukushkin

    たとえば、Postgresがディスク不足エラーのためにクラッシュした場合、状態は更新されませんでした。

  • 欠損値または空の値の代わりに * を pgpass に入れます Alexander Kukushkin

    たとえば standby_cluster.port が指定されていない場合、 pgpass ファイルは誤って生成されました。

  • 特殊文字を使用してリーダーノードでの物理レプリケーションスロットの作成をスキップする Krishna Sarabu

    Patroniは、名前に'-'などの特殊文字が含まれている場合、リーダーノードの休止スロット slots 定義時を作成しているようですたとえば、/"abc-us-1/"の場合。

  • カスタムブートストラップで存在しない pg_hba.conf の削除を回避します Krishna Sarabu

    カスタムブートストラップ後に pg_hba.conf がたまたま pgdata ディレクトリの外部にある場合、Patroniは失敗していました。

バージョン1.6.5

2020-08-23リリース

New features

  • マスターストップタイムアウト クリシュナ・サラブ

    Postgresを停止するときにPatroniが待機できる秒数。 synchronous_mode が有効な場合にのみ有効です。 0より大きい値に設定され、 synchronous_mode が有効になっている場合、Patroniはstopオペレーションが master_stop_timeout で設定された値を超えて実行されている場合に SIGKILL をポストマスターに送信します。耐久性と可用性のトレードオフに応じて値を設定します。パラメーターが設定されていないか、正以外の値に設定されている場合、 master_stop_timeout は効果がありません。

  • プライマリの名前で永続的な物理スロットを作成しないでください。 Alexander Kukushkin

    レプリカがダウンしているときにプライマリがWALセグメントをリサイクルするのは一般的な問題です。これで、固定数のノードと名前が変更されない静的クラスターに適したソリューションができました。 slots のすべてのノードの名前をリストする必要があるため、ノードがダウンしているDCSに登録されていないときにプライマリがスロットを削除しないようにします。

  • Config Validatorの最初のドラフトIgor Yanchenko

    Patroni構成を検証するためには、 patroni --validate-config patroni.yaml を使用します。

  • タイムライン履歴の最大長を構成する機能 Krishna Sarabu

    Patroniは、フェイルオーバー/スイッチオーバーの履歴をDCSの /history キーに書き込みます。時間の経過とともにこのキーのサイズは大きくなりますが、ほとんどの場合、最後の数行のみが関心があります。 max_timelines_history パラメーターを使用すると、DCSに保持するタイムライン履歴項目の最大数を指定できます。

  • Kazoo 2.7.0互換性Danyal Prout

    Kazooの一部の非パブリックメソッドはシグネチャを変更しましたが、パトローニはそれらに依存していました。

Improvements in patronictl

  • メンバータグを表示する コスティアンティン・ネムチェンコ、アレクサンダー・ククシュキン

    タグはノードごとに個別に構成され、それらの概要を取得する簡単な方法はありませんでした

  • メンバーの成果の向上 Alexander Kukushkin

    冗長クラスター名はすべての行に表示され、テーブルヘッダーにのみ表示されます。

$ patronictl list
+ Cluster: batman (6813309862653668387) +---------+----+-----------+---------------------+
|    Member   |      Host      |  Role  |  State  | TL | Lag in MB | Tags                |
+-------------+----------------+--------+---------+----+-----------+---------------------+
| postgresql0 | 127.0.0.1:5432 | Leader | running |  3 |           | clonefrom: true     |
|             |                |        |         |    |           | noloadbalance: true |
|             |                |        |         |    |           | nosync: true        |
+-------------+----------------+--------+---------+----+-----------+---------------------+
| postgresql1 | 127.0.0.1:5433 |        | running |  3 |       0.0 |                     |
+-------------+----------------+--------+---------+----+-----------+---------------------+
  • 構成ファイルが明示的に指定されているが見つからない場合に失敗する Kaarel Moppel

    以前は patronictl は DEBUG メッセージのみを報告していました。

  • 初期化されていないK8sポッドが保護者を破壊する問題を解決しました。Alexander Kukushkin

    Patroniは、K8の特定のポッドアノテーションに依存しています。 Patroniポッドのいずれかが停止または起動している場合、有効なアノテーションはまだなく、 patronictl は例外で失敗していました。

Stability improvements

  • K8s APIサーバーへのLIST呼び出しが失敗した場合に1秒のバックオフを適用する Alexander Kukushkin

    これは主に、ログの氾濫を回避するために必要ですが、メインスレッドのスタベーションを防ぐことにも役立ちます。

  • retry-after HTTPヘッダーがK8s APIから返された場合に再試行します。Alexander Kukushkin

    K8s APIサーバーが要求で圧倒されている場合、再試行を求める場合があります。

  • ポストマスターから KUBERNETES_ 環境をスクラブする Feike Steenbergen

    KUBERNETES_ 環境変数はPostgreSQLには必要ありませんが、ポストマスターに公開すると、バックエンドおよび通常のデータベースユーザーたとえばpl/perlを使用して公開されます。

  • 再初期化時にテーブルスペースをクリーンアップする Krishna Sarabu

    再初期化中に、Patroniは PGDATA のみを削除し、ユーザー定義のテーブルスペースディレクトリを残していました。これにより、Patroniが再初期化でループする原因となります。この問題の以前の回避策は、 PGDATA スクリプトを実装することでした。

  • プロモートが発生した後に CHECKPOINT を明示的に実行するようにしました Alexander Kukushkin

    新しいプライマリが pg_rewind で使用できるようになるまでの時間を短縮するのに役立ちます。

  • etcdメンバーのスマートリフレッシュ Alexander Kukushkin

    PatroniがEtcdクラスターのすべてのメンバーで要求の実行に失敗した場合、Patroniは、次回再試行する前にIP /ホストの変更が A または SRV レコードを再チェックします。

  • pg_controldata の欠損値をスキップする (Feike Steenbergen)

    PGDATAと一致しないバージョンのバイナリを使用しようとすると、値が欠落します。 PatroniはとにかくPostgresを起動しようとします、そしてPostgresはメジャーバージョンが一致しないと不平を言い、エラーで中断します。

Bugfixes

  • 必要に応じてConsulのSSL検証を無効にします。Julien Riou

    urllib3 の特定のバージョンから、SSL検証を効果的に無効にするには、 cert_reqs を明示的に ssl.CERT_NONE に設定する必要があります。

  • HAループのすべてのサイクルでレプリケーション接続を開くことを避けます。Alexander Kukushkin

    回帰は1.6.4で導入されました。

  • 障害が発生したプライマリで on_role_change コールバックを呼び出します Alexander Kukushkin

    特定の場合では、仮想IPが古いプライマリに接続されたままになる場合があります。回帰は1.4.5で導入されました。

  • pg_rewindが成功した後にpostgresが開始された場合、リワインド状態をリセットする Alexander Kukushkin

    このバグの結果、Patroniは一時停止モードでpostgresを手動でシャットダウンして起動していました。

  • recovery.conf をチェックするときに recovery_min_apply_delay を ms に変換します

    12より前のPostgreSQLで recovery_min_apply_delay が構成されている場合、Patroniはレプリカを無期限に再起動していました。

  • PyInstallerの互換性Alexander Kukushkin

    PyInstallerは、Pythonアプリケーションをスタンドアロンの実行可能ファイルにフリーズ(パッケージ)します。 multiprocessing の fork ではなく spawn メソッドに切り替えたときに、互換性が壊れました。

バージョン1.6.4

2020-01-27リリース

New features

  • patronictl reinit の --wait オプションを実装しました Igor Yanchenko

    --wait オプションが使用される場合、Patronictlは reinit が完了するまで待機します。

  • Windowsサポートのさらなる改善Igor Yanchenko、Alexander Kukushkin

    1. 統合テストに使用されるすべてのシェルスクリプトはPythonで書き換えられます

    2. pg_ctl kill は、非posixシステムでpostgresを停止するために使用されます

    3. Unixドメインソケットを使用しないでください

Stability improvements

  • unix_socket_directories および stats_temp_directory が存在することを確認します Igor Yanchenko

    PatroniとPostgresの起動時に、 unix_socket_directories および stats_temp_directory が存在することを確認するか、それらを作成してみてください。 Patroniは、作成に失敗すると終了します。

  • postgresql.pgpass がパトローニが書き込みアクセスがある場所にあることを確認します。Igor Yanchenko

    書き込みアクセスがない場合、Patroniは例外で終了します。

  • デフォルトでConsul serfHealth チェックを無効にします Kostiantyn Nemchenko

    ネットワークに小さな問題が発生した場合でも、 serfHealth の障害は、ノードに関連付けられているすべてのセッションの無効化につながります。したがって、リーダーキーは ttl よりもはるかに早く失われ、レプリカの不要な再起動と、場合によってはプライマリの降格が発生します。

  • K8s APIへの接続のTCPキープアライブを構成する Alexander Kukushkin

    TTL秒後にソケットから何も取得しない場合、デッドであると考えられます。

  • ユーザー作成時にパスワードのロギングを回避する Alexander Kukushkin

    パスワードが拒否されるか、ロギングが冗長に構成されているか、まったく構成されていない場合、パスワードがpostgresログに書き込まれる可能性があります。それを回避するために、Patroniはユーザーを作成/更新しようとする前に、 log_statement 、 log_min_duration_statement 、および log_min_error_statement をいくつかの安全な値に変更します。

Bugfixes

  • カスケードレプリカで standby_cluster 構成の restore_command を使用する Alexander Kukushkin

    standby_leader は、機能が存在する最初から既にそれを行っていました。レプリカで同じことをしないと、スタンバイリーダーに追いつけない可能性があります。

  • スタンバイクラスターによって報告された更新タイムライン Alexander Kukushkin

    タイムラインスイッチの場合、スタンバイクラスターはプライマリから正しく複製していましたが、 patronictl は古いタイムラインを報告していました。

  • custom_confで特定のリカバリパラメーターを定義できるようにしました。 Alexander Kukushkin

    レプリカでリカバリパラメーターの検証を行うとき、パトロニは、 パトロニ構成で定義されていないが、 postgresql.auto.conf または postgresql.conf 以外のファイルで定義されている場合、 archive_cleanup_command 、 promote_trigger_file 、 recovery_end_command 、 recovery_min_apply_delay 、および restore_command をスキップします。

  • 名前にピリオドを含むpostgresqlパラメーターの処理を改善しました Alexander Kukushkin

    このようなパラメーターは、ユニットが必ずしも文字列ではない拡張機能によって定義できます。値の変更には、再起動が必要になる場合がありますたとえば pg_stat_statements.max 。

  • シャットダウン中の例外処理を改善しました。Alexander Kukushkin

    シャットダウン中に、PatroniはDCSのステータスを更新しようとします。 DCSにアクセスできない場合、例外が発生する場合があります。例外処理の欠如が、ロガースレッドの停止を妨げていました。

バージョン1.6.3

2019-12-05リリース

Bugfixes

  • pg_rewind の実行時にパスワードを公開しないでください Alexander Kukushkin

    #1301 _にバグが導入されました

  • postgresql.authentication 〜 pg_basebackup およびカスタムレプリカ作成方法で指定された接続パラメーターを適用します。Alexander Kukushkin

    彼らはURLのような接続文字列に依存しているため、パラメーターは適用されません。

バージョン1.6.2

2019-12-05リリース

New features

  • patroni --version を実装しました イゴール・ヤンチェンコ

    Patroniの現在のバージョンを出力して終了します。

  • すべてのhttp要求の user-agent httpヘッダーを設定します Alexander Kukushkin

    Patroniは、httpプロトコルを介してConsul、Etcd、およびKubernetes APIと通信しています。特別に作られた user-agent 例 Patroni/1.6.2 Python/3.6.8 Linux があると、デバッグとモニタリングに役立つ場合があります。

  • 例外トレースバックのログレベルを構成できるようにします Igor Yanchenko

    log.traceback_level=DEBUG を設定すると、トレースバックは log.level=DEBUG の場合にのみ可視されます。デフォルトの動作は同じままです。

Stability improvements

  • 構成ファイルに必要なモジュールを検索するときに、すべてのDCSモジュールのインポートを回避します。Alexander Kukushkin

    たとえば、ファイルだけが必要な場合、Etcd、Consul、およびKubernetesのモジュールをインポートする必要はありません。動物園の飼育員。メモリ使用量を削減し、 INFOメッセージ Failed to import smth の問題を解決します。

  • 明示的な要件からpython requests モジュールを削除しました Alexander Kukushkin

    これは重要な目的には使用されませんでしたが、 urllib3 の新しいバージョンがリリースされると多くの問題を発生させました。

  • YAML配列の代わりにコンマ区切りの文字列として書き込まれた etcd.hosts の処理を改善しました。Igor Yanchenko

    以前は、 host1:port1, host2:port2 フォーマットで書き込まれると失敗していましたコンマの後のスペース文字。

Usability improvements

  • patronictl の空のリストからメンバーを選択することをユーザーに強制しないでください Igor Yanchenko

    ユーザーが間違ったクラスター名を指定した場合、空のリストからメンバーを選択するように求めるのではなく、例外を発生させます。

  • REST APIがバインドできない場合にエラーメッセージをもっと役立つようにしました Igor Yanchenko

    経験の浅いユーザーにとって、Pythonスタックトレースから何が悪いのかを理解するのは難しい場合があります。

Bugfixes

  • wal_buffers の計算を修正しました。Alexander Kukushkin

    PostgreSQL 11では、基本単位が8 kBブロックからバイトに変更されました。

  • PostgreSQL 10+でのみ primary_conninfo で passfile を使用する Alexander Kukushkin

    古いバージョンでは、最新バージョンの libpq がインストールされていない限り、 passfile が動作する保証はありません。

バージョン1.6.1

2019-11-15リリース

New features

  • PATRONICTL_CONFIG_FILE 環境変数msvechlaを追加しました

    環境から patronictl の --config-file 引数を構成できます。

  • patronictl history の実装 Alexander Kukushkin

    フェイルオーバー/スイッチオーバーの履歴を表示します。

  • pg_rewind を実行するときに PGOPTIONS で -c statement_timeout=0 を渡すようにしました。 Alexander Kukushkin

    サーバー上の statement_timeout が小さな値に設定され、pg_rewindによって実行されたステートメントのいずれかがキャンセルされた場合から保護します。

  • PostgreSQL構成のより低い値を許可しますSoulou

    Patroniは、一部のPostgreSQL構成パラメーターを一部のハードコードされた値より小さく設定することを許可していませんでした。最小許可値が小さくなりました、デフォルト値は変更されていません。

  • 証明書ベースの認証を許可します Jonathan S. Katz

    この機能は、スーパーユーザー、レプリケーション、リワインドアカウントの証明書ベースの認証を有効にし、ユーザーは接続する sslmode を指定できます。

  • パスワードの代わりに primary_conninfo で passfile を使用します。Alexander Kukushkin

    postgresql.confでの 600 権限の設定を回避できます

  • 構成の変更に関係なく pg_ctl reload を実行します Alexander Kukushkin

    一部の構成ファイルはPatroniによって制御されていない可能性があります。誰かがREST APIを介してまたはPatroniプロセスにSIGHUPを送信してリロードを実行している場合、通常はPostgresもリロードされると予想されます。以前は、Patroni構成の postgresql セクションに変更がない場合、これは発生しませんでした。

  • primary_conninfo だけでなくすべての復旧パラメーターを比較します Alexander Kukushkin

    以前は、 check_recovery_conf() メソッドは primary_conninfo が変更されたかどうかをチェックするだけで、他のすべてのリカバリパラメーターは考慮されませんでした。

  • 再起動せずにいくつかの回復パラメーターを適用できるようにします。Alexander Kukushkin

    PostgreSQL 12から、次のリカバリパラメーターは、再起動せずに変更できます。 archive_cleanup_command 、 promote_trigger_file 、 recovery_end_command 、および recovery_min_apply_delay 。将来のPostgresリリースでは、このリストは拡張され、Patroniはそれを自動的にサポートします。

  • use_slots をオンラインで変更できるようにしました Alexander Kukushkin

    以前は、Patroniを再起動し、スロットを手動で削除する必要がありました。

  • Postgresの起動時に PATRONI_ 接頭辞の環境変数のみを削除する Cody Coons

    さまざまな外部データラッパーの実行に関する多くの問題を解決します。

Stability improvements

  • K8s APIを使用する場合はLIST + WATCHを使用します。Alexander Kukushkin

    これにより、オブジェクトの変更ポッド、エンドポイント/構成マップを効率的に受信でき、K8sマスターノードのストレスが軽減されます。

  • ブートストラップ中にPGDATAが空でない場合のワークフローを改善しました。Alexander Kukushkin

    initdb ソースコードによると、 lost+found および .dotfiles のみが存在する場合、PGDATAが空であると見なす場合があります。今、パトローニも同じことをしています。 PGDATA がたまたま空でなく、同時に pg_controldata の観点から有効でない場合、Patroniは文句を言って終了します。

  • すべてのHAループで高価な os.listdir() の呼び出しを回避します Alexander Kukushkin

    システムがIOストレス下にある場合、 os.listdir() の実行に数秒または数分かかる場合があり、パトロニのHAループに悪影響を与える可能性があります。これにより、更新がないためにリーダーキーがDCSから消失する可能性もあります。 PGDATAが空ではないことを確認するための、より適切で安価な方法があります。次に、PGDATAに global/pg_control ファイルの存在を確認します。

  • ログインフラストラクチャの一部の改善 Alexander Kukushkin

    以前は、ロギングスレッドが daemon スレッドであったため、シャットダウン時に最後の数行のログ行が失われる可能性がありました。

  • Python 3.4+で spawn マルチプロセッシングスタートメソッドを使用する Maciej Kowalczyk

    Pythonでは、スレッドとマルチプロセッシングがうまく混合しないことが知られています issue _ 。デフォルトの方法 fork から spawn への切り替えが推奨される回避策です。そうしないと、 Postgresが実際に起動して実行されているにもかかわらず、 Postmaster開始プロセスがハングし、Patroniが無期限に INFO: restarting after failure in progress を報告する可能性があります。

Improvements in REST API

  • REST APIでクライアント証明書を確認できるようにします Alexander Kukushkin

    verify_client が required に設定されている場合、PatroniはすべてのREST API呼び出しのクライアント証明書をチェックします。 optional に設定されている場合、クライアント証明書は、安全でないすべてのREST APIエンドポイントがチェックされます。

  • Postgresが実行されていない場合、 GET /replica ヘルスチェック要求の応答コード503を返します。Alexander Anikin

    Postgresは、クライアント接続の受け入れを開始する前の復旧にかなりの時間を費やす場合があります。

  • /history および /cluster エンドポイントを実装します Alexander Kukushkin

    /history エンドポイントは、DCSの history キーのコンテンツを表示します。 /cluster エンドポイントは、すべてのクラスターメンバーと、保留中およびスケジュールされた再起動またはスイッチオーバーなどのサービス情報を表示します。

Improvements in Etcd support

  • Etcd RAFT内部エラーでの再試行 Alexander Kukushkin

    Etcdノードはシャットダウンされるときに、 response code=300, data='etcdserver: server stopped' を送信します。これが、Patroniがプライマリを降格する原因となっていました。

  • Etcd要求の再試行を早めにあきらめないでください Alexander Kukushkin

    いくつかのネットワーク問題が発生すると、パトロニはすぐにEtcdノードのリストを使い果たし、 retry_timeout 全体を使用せずに断念しました。その結果、プライマリが降格する可能性がありました。

Bugfixes

  • pg_rewind ユーザーに実行権限を付与するときに synchronous_commit を無効にする kremius

    synchronous_mode_strict: true でブートストラップが行われる場合、`GRANT EXECUTE`ステートメントは、使用可能な非同期ノードのため無期限に待機していました。

  • Python 3.7のメモリリークを修正しました。Alexander Kukushkin

    Patroniは ThreadingMixIn を使用してREST API要求を処理し、Python 3.7はデフォルトで非デーモン以外のすべての要求に対してスレッドを生成します。

  • 非同期アクションの競合状態を修正しました。Alexander Kukushkin

    停止したPostgresを復旧しようとすることにより、 patronictl reinit --force が上書きされる可能性がありました。これは、ベースバックアップの実行中にパトローニがPostgresを起動しようとした場合に発生しました。

  • postmaster_start_time() メソッドの競合状態を修正しました。Alexander Kukushkin

    メソッドがREST APIスレッドから実行される場合、別のカーソルオブジェクトを作成する必要があります。

  • 大文字を含む名前を持つ同期スタンバイを昇格させない問題を修正しました。Alexander Kukushkin

    Postgresは、 application_name と synchronous_standby_names の値を比較するときに同じことをしていたため、名前を小文字に変換しました。

  • 新しいものを開始する前に、コールバックプロセスとともにすべての子をkillします Alexander Kukushkin

    そうしないと、bashでコールバックを実装することが困難になり、最終的に2つのコールバックが同時に実行される状況が発生する可能性があります。

  • 'start failed'問題を修正しました Alexander Kukushkin

    特定の条件下では、 Postgresが起動して実行されているにもかかわらず、Postgresの状態が「start failed」に設定される場合があります。

バージョン1.6.0

2019-08-05リリース

このバージョンでは、PostgreSQL 12との互換性を追加し、PostgreSQL 11以降でスーパーユーザーなしでpg_rewindを実行できるようにし、IPv6サポートを有効にします。

New features

  • Psycopg2は要件から削除されたため、個別にインストールする必要があります。Alexander Kukushkin

    2.8.0から psycopg2 は、ファイルシステム上の同じ場所に同時にインストールできる2つの異なるパッケージ psycopg2 、および psycopg2-binary に分割されました。依存関係地獄の問題を減らすために、ユーザーがインストール方法を選択できるようにしました。使用可能なオプションがいくつかあります。 psycopg2 を参照してください。

  • PostgreSQL 12との互換性 Alexander Kukushkin

    PostgreSQL 12からは recovery.conf はなくなり、以前のすべてのリカバリパラメーターは recovery.conf に変換されます。 ALTER SYSTEM SET primary_conninfo または同様のものから保護するために、Patroniは postgresql.auto.conf を解析し、そこからすべてのスタンバイおよびリカバリーパラメーターを削除します。 Patroni構成は下位互換性を維持します。たとえば、 restore_command はGUCであるにもかかわらず、 postgresql.recovery_conf.restore_command セクションで指定でき、PatroniはPostgreSQL 12の postgresql.conf にそれを書き込みます。

  • PostgreSQL 11以降でスーパーユーザーなしで pg_rewind を使用できるようにしました Alexander Kukushkin

    この機能を使用する場合は、Patroni構成ファイルの postgresql.authentication.rewind セクションで username および password を定義してください。既存のクラスターの場合、ユーザーを手動で作成し、いくつかの機能で GRANT EXECUTE 権限を作成する必要があります。詳細については、PostgreSQL username _をご覧ください。

  • レプリカで実際の primary_conninfo 値と目的の primary_conninfo 値をスマートに比較します Alexander Kukushkin

    既存のプライマリスタンバイクラスターをパトロニによって管理されているクラスターに変換する場合、レプリカのリスタートを回避するのに役立つ場合があります

  • IPv6のサポート Alexander Kukushkin

    2つの大きな問題がありました。 Patroni REST APIサービスは 0.0.0.0 でのみリッスンしており、 api_url および conn_url で使用されるIPv6 IPアドレスは適切に引用されませんでした。

  • KerberosのサポートAjith Vilas、Alexander Kukushkin

    Patroni構成ファイルでパスワードを定義する代わりに、Postgresノード間でKerberos認証を使用することが可能になります

  • Manage pg_ident.conf Alexander Kukushkin

    この機能は pg_hba.conf と同様に動作します。 postgresql.pg_ident が構成ファイルまたはDCSで定義されている場合、Patroniはその値を pg_ident.conf に書き込みますが、 postgresql.parameters.ident_file が定義されている場合、Patroniは pg_ident が外部から管理されていると想定し、ファイルを更新しません。

Improvements in REST API

  • /health エンドポイントを追加しました Wilfred Roset

    PostgreSQLが実行されている場合にのみHTTPステータスコードを結果ます

  • /read-only および /read-write エンドポイントを追加しました。Julien Riou

    /read-only エンドポイントは、レプリカとプライマリ全体で読み取りバランスのとれた読み取りを有効にします。 /read-write エンドポイントは、 /primary 、 /leader 、および /master のエイリアスです。

  • SSLContext を使用してREST APIソケットをラップしました。Julien Riou

    ssl.wrap_socket() の使用は非推奨であり、TLS 1.1のような間もなく非推奨になるプロトコルはまだ許可されていました。

Logging improvements

  • 2段階ロギング Alexander Kukushkin

    すべてのログメッセージは、最初にメモリ内のキューに書き込まれ、後で別のスレッドからstderrまたはファイルに非同期にフラッシュされます。最大キューサイズは制限されています構成可能。制限に到達すると、Patroniはログを失い始めますが、これはHAループをブロックするよりはまだ良いです。

  • レイテンシーとともにGET / OPTIONS API呼び出しのデバッグログを有効にします。Jan Tomsa

    HAProxy、Consul、またはどのノードがプライマリ/レプリカであるかを決定するその他のツールによって実行されるヘルスチェックのデバッグに役立ちます。

  • 再試行でキャッチされた例外をログに記録します Daniel Kucera

    試行回数またはタイムアウトに到達したときの最後の例外をログに記録します。 DCSへの通信が失敗した場合に、いくつかの問題のデバッグに役立つことを願っています。

Improvements in patronictl

  • スケジュールされたスイッチオーバーと再起動のためのダイアログの強化 Rafia Sabih

    以前のダイアログはスケジュールされたアクションを考慮していないため、誤解を招くものでした。

  • 構成ファイルが存在するかどうかを確認します Wilfred Roset

    指定されたファイル名が存在しない場合、サイレントに無視する代わりに、構成ファイルについて詳しく説明します誤解を招く可能性があります。

  • EDITOR のフォールバック値を追加しました ウィルフリード・ロゼット

    EDITOR 環境変数が定義されていない場合、 patronictl edit-config は`PatroniCtlException`で失敗していました。新しい戦略は、 editor および vi を試すことです。これは、ほとんどのシステムで利用できるはずです。

Improvements in Consul support

  • Consul一貫性モードを指定できるようにしました。Jan Tomsa

    一貫性モード here _の詳細については、こちらをご覧ください。

  • SIGHUPでConsul構成をリロードキャメロンダニエルクセラ、アレクサンダーククシュキン

    これは、誰かが token の値を変更する場合に特に役立ちます。

Bugfixes

  • スイッチオーバー/フェイルオーバーのコーナーケースを修正しました。Sharoon Thomas

    REST APIにアクセスできず、フォールバックとしてDCSを使用している場合、変数 scheduled_at は未定義になる場合があります。

  • カスタムブートストラップ中に pg_hba.conf のローカルホストへのオープントラスト Alexander Kukushkin

    以前はunix_socketのみにオープンされていたため、多くのエラーが発生していました FATAL:  no pg_hba.conf entry for replication connection from host /"127.0.0.1/", user /"replicator/"

  • 元のリーダーがリードしている場合でも、同期ノードを正常であると考えます Alexander Kukushkin

    プライマリがDCSへのアクセスを失うと、Postgresを読み取り専用で再起動しますが、他のノードがREST APIを介して古いプライマリにアクセスできる場合があります。古いプライマリが同期スタンバイより先にWAL位置を報告していたため、このような状況により、同期スタンバイが昇格しませんでした。

  • スタンバイクラスターのバグ修正 Alexander Kukushkin

    standby_leaderがアクセスできない場合に、スタンバイクラスターでレプリカをブートストラップできるようにし、その他のいくつかのマイナー修正。

バージョン1.5.6

2019-08-03リリース

New features

  • プロキシのセットを介したetcdクラスターでの作業のサポート Alexander Kukushkin

    etcdクラスターに直接アクセスできず、プロキシのセットを介してアクセスできない場合があります。この場合、Patroniはetcdトポロジ検出を実行せず、プロキシホストを介したラウンドロビンだけを実行します。動作は`etcd.use_proxies`によって制御されます。

  • ノードのロールが変更されたときのコールバック動作が変更されました Alexander Kukushkin

    ロールが`master`または`standby_leader`から`replica`に、または`replica`から`standby_leader`に変更された場合、`on_restart`コールバックは、`on_role_change`コールバックを優先して呼び出されません。

  • postgresの起動方法を変更します Alexander Kukushkin

    自分自身と`multiprocessing.Pipe`を実行する代わりに`multiprocessing.Process`を使用して、ポストマスターpidをPatroniプロセスに送信します。その前はパイプを使用していましたが、標準入力がクローズされた状態でポストマスタープロセスを残していました。

Bug fixes

  • スタンバイリーダーのREST APIから返されたロールを修正しました Alexander Kukushkin

    `standby_leader`の代わりに`replica`を誤って返していました

  • Killできなかった場合はコールバック終了を待機します Julien Tachoires

    Patroniには、新しいコールバックをキャンセルしたもの`sudo`の下で実行されているコールバックスクリプトを終了するための十分な特権がありません。実行中のスクリプトを強制終了できなかった場合、Patroniは完了するまで待機して、次のコールバックを実行します。

  • dcs.get_clusterメソッドにかかるロック時間を削減します。Alexander Kukushkin

    ロックが保持されているため、DCSの遅延がREST APIヘルスチェックに影響を与え、誤検出を発生させていました。

  • pg_wal/`pg_xlog`がシンボリックリンクの場合、PGDATAのクリーニングを改善しました。Julien Tachoires

    この場合、Patroniはターゲットディレクトリからファイルを明示的に削除します。

  • os.path.relpathの不要な使用を削除します。Ants Aasma

    それは作業ディレクトリを解決できるか、後でファイルシステムからリンクが解除されるディレクトリでPatroniが起動された場合に何が失敗するかによって異なります。

  • Etcdとの通信時にsslバージョンを強制しないでください Alexander Kukushkin

    何らかの不明な理由で、debianおよびubuntuのpython3-etcdはパッケージの最新バージョンに基づいていないため、Etcd v3でサポートされていないTLSv1を適用します。 Patroni側でこの問題を解決しました。

バージョン1.5.5

2019-02-15リリース

このバージョンでは、以前のマスターの自動再初期化の可能性を導入し、patroniclリスト出力を改善し、多くのバグを修正します。

New features

  • PATRONI_ETCD_PROTOCOL、PATRONI_ETCD_USERNAME、および`PATRONI_ETCD_PASSWORD`環境変数のサポートを追加します。Étienne M

    以前は、構成ファイルまたは`PATRONI_ETCD_URL`の一部としてのみそれらを構成することが可能でしたが、これは必ずしも便利ではありません。

  • 元マスターを自動的に再初期化できるようにしました。Alexander Kukushkin

    pg_rewindが無効になっているか、使用できない場合、タイムラインが分岐しているため、元のマスターは新しいレプリカとして起動できない場合があります。この場合、それを修正する唯一の方法は、データディレクトリをワイプし、再初期化することです。この動作は、`postgresql.remove_data_directory_on_diverged_timelines`を設定することにより変更できます。設定されると、Patroniはデータディレクトリをワイプし、元のマスターを自動的に再初期化します。

  • patroniclリストのタイムラインに関する情報を表示する Alexander Kukushkin

    古いレプリカの検出に役立ちます。それに加えて、ポート値がデフォルトでない場合、または同じホストで実行されている複数のメンバーが存在する場合、Host`は:{port}'をインクルードします。

  • $SCOPE-configエンドポイントに関連付けられたヘッドレスサービスを作成します Alexander Kukushkin

    /"config/"エンドポイントは、クラスター全体のPatroniおよびPostgresの構成、履歴ファイル、そして最後に最も重要な`initialize`キーを保持します。 Kubernetesマスターノードが再起動またはアップグレードされると、サービスなしでエンドポイントが削除されます。 headlessサービスは削除されません。

Bug fixes

  • リーダーウォッチブロッキングクエリの読み取りタイムアウトを調整します Alexander Kukushkin

    Consulのドキュメントによると、実際の応答タイムアウトは、指定された最大待機時間に追加される少量のランダムな追加待機時間だけ増加して、同時要求のウェイクアップ時間を分散します。 `wait / 16`の追加時間を最大期間に加算します。私たちの場合、どちらが大きいかに応じて、`wait / 15`または1秒を追加します。

  • レプリケーションプロトコルを介してpostgresに接続するときは、常にreplication=1を使用します。 Alexander Kukushkin

    Postgres 10以降、pg_hba.confのdatabase=replicationを含む行は、パラメーターreplication=databaseを使用した接続を受け入れません。

  • wal専用スタンバイクラスターのrecovery.confにprimary_conninfoを書き込まないでください Alexander Kukushkin

    `standby_cluster`構成で`host`も`port`も定義されていないにもかかわらず、Patroniは`primary_conninfo`を`recovery.conf`に配置していましたが、これは役に立たず、多くのエラーを生成していました。

バージョン1.5.4

リリース2019-01-15

このバージョンは、柔軟なロギングを実装し、多くのバグを修正します。

New features

  • 伐採インフラの改善アレクサンダー・ククシュキン、ルーカス・キャピストラント、アレクサンダー・アニキン

    ロギング構成は、環境変数からだけでなく、Patroni構成ファイルから構成できます。構成を更新してリロードを実行するか、PatroniプロセスにSIGHUPを送信することにより、ランタイムにロギング構成を変更できます。デフォルトでは、Patroniはログをstderrに書き込みますが、ログをファイルに直接書き込み、特定のサイズに達したときにローテーションすることが可能になりました。それに加えて、カスタム日付形式のサポートと、各Pythonモジュールのログレベルを微調整する可能性が追加されました。

  • リーダー選挙中に現在のタイムラインを考慮できるようにしますアレクサンダー・ククシュキン

    ノードは、現在最新の既知のタイムラインにないにもかかわらず、自分自身を最も正常なノードと考えている場合があります。場合によっては、このようなノードのプロモーションを回避したい場合があります。これは、`check_timeline`パラメータを`true`に設定することにより実現できますデフォルトの動作は変更されません。

  • スーパーユーザーの資格情報の要件の緩和

    Libpqでは、ユーザー名もパスワードも明示的に指定せずに接続を開くことができます。状況に応じて、pgpassファイルまたはpg_hba.confの信頼できる認証方法に依存します。 pg_rewindもlibpqを使用しているため、同じように動作します。

  • 環境変数を介してConsul Serviceの登録とチェック間隔を構成する機能を実装しました Alexander Kukushkin

    Consulでのサービスの登録は1.5.0で追加されましたが、これまではpatroni.yamlを介してのみ有効にすることができました。

Stability Improvements

  • カスタムブートストラップ中にarchive_modeをoffに設定します Alexander Kukushkin

    クラスターが完全に機能するまで、walsと履歴ファイルのアーカイブは避けたいです。 カスタムブートストラップにpg_upgradeが関係する場合、これは非常に役立ちます。

  • 起動時にグローバル構成をロードするときに5秒のバックオフを適用します Alexander Kukushkin

    Patroniが起動したばかりのときにDCSのハンマリングを回避するのに役立ちます。

  • シャットダウン時に生成されるエラーメッセージの量を削減します。Alexander Kukushkin

    それらは無害ですが、かなり迷惑で、時には怖かったです。

  • 作成時にrecovery.confのrwパーマを明示的に保護します Lucas Capistrant

    このファイルには、レプリケーションユーザーとパスワードが含まれているため、patroni/postgresユーザー以外の者にこのファイルを読んでほしくない。

  • HTTPServer例外をロガーにリダイレクトします。Julien Riou

    デフォルトでは、このような例外は通常のログを台無しにして標準出力にログに記録されました。

Bug fixes

  • pg_ctlプロセスのstdoutへのstderrパイプを削除しました Cody Coons

    メインPatroniプロセスからstderrを継承すると、すべてのPostgresログがすべてのpatroniログとともに表示されます。 PatroniおよびPostgresログは、標準のツールdockerログ、kubectlなどを使用して使用できるため、これはコンテナ環境で非常に役立ちます。それに加えて、この変更は、postgresがいくつかの警告をstderrに書き込むときに、Patroniがポストマスターpidをキャッチできないバグを修正します。

  • Consulサービスチェックの登録解除タイムアウトをGo時間形式で設定します Pavel Kirillov

    明示的に記載されていない限り、タイムユニットの登録は失敗していました。

  • standby_clusterクラスター構成のチェックを緩和します。Dmitry Dolgov、Alexander Kukushkin

    有効な値として文字列のみを受け入れていたため、ポートを整数として指定し、create_replica_methodsをリストとして指定することはできません。

バージョン1.5.3

2018-12-03リリース

互換性とバグ修正リリース。

  • 動物園の飼育員に対してpython3で実行する際の安定性が向上しました。Alexander Kukushkin

    `loop_wait`の変更により、パトローニは動物園の飼育員から切断され、再接続されませんでした。

  • postgres 9.3との壊れた互換性を修正しました。Alexander Kukushkin

    9.3はreplication='database'を理解しないため、レプリケーション接続を開くときはreplication=1を指定する必要があります。

  • HAループごとに少なくとも1回はConsulセッションをリフレッシュし、Consulセッション例外の処理を改善するようにしました。 Alexander Kukushkin

    ローカルコンスルエージェントを再起動すると、ノードに関連するすべてのセッションが無効になります。セッションリフレッシュを時間通りに呼び出さず、セッションエラーの適切な処理を実行しないことが、プライマリの降格を発生させていました。

バージョン1.5.2

2018-11-26リリース

互換性とバグ修正リリース。

  • kazoo-2.6.0との互換性 Alexander Kukushkin

    要求が適切なタイムアウトで実行されることを確認するために、Patroniはpython-kazooモジュールからcreate_connectionメソッドを再定義します。 kazooの最後のリリースでは、create_connectionメソッドを呼び出す方法が少し変更されました。

  • Consulクラスターがリーダーを失ったときのPatroniクラッシュを修正しました。Alexander Kukushkin

    クラッシュは、touch_memberメソッドの誤った実装が原因で発生していました。ブール値を返し、例外を発生させないはずです。

バージョン1.5.1

2018-11-01リリース

このバージョンは、永続的なレプリケーションスロットのサポートを実装し、pgBackRestのサポートを追加し、多くのバグを修正します。

New features

  • 永久レプリケーションスロット Alexander Kukushkin

    永続的なレプリケーションスロットは、フェールオーバー/スイッチオーバーで保持されます。つまり、新しいプライマリのPatroniは、プロモートの直後に構成済みのレプリケーションスロットを作成します。 patronictl edit-config`の助けを借りてスロットは設定できます。初期構成は :ref:`bootstrap.dcs <yaml_configuration> で行うこともできます。

  • pgbackrestのサポートを追加しました Yogesh Sharma

    pgBackrestは、既存の$PGDATAフォルダーに復元できます。これにより、最後のバックアップから変更されていないファイルがスキップされるため、迅速な復元が可能になります。この機能をサポートするために、新しいパラメーター`keep_data`が導入されました。追加の例については、 replica creation method セクションを参照してください。

Bug fixes

バージョン1.5.0

2018-09-20リリース

このバージョンでは、Patroni HAクラスターがスタンバイモードで動作できるようにし、 Windowsでの実行の実験的なサポートを導入し、ConsulにPostgreSQLサービスを登録するための新しい構成パラメーターを提供します。

New features

  • スタンバイクラスターDmitry Dolgov

    1つ以上のPatroniノードは、プライマリクラスタと並行してつまり別のデータセンターで実行され、プライマリクラスタのマスターから複製するスタンバイノードで構成されるスタンバイクラスターを形成できます。スタンバイクラスター内のすべてのPostgreSQLノードはレプリカです。これらのレプリカの1つはリモートマスターから直接複製するように自分自身を選択し、他のレプリカはカスケード方法でそこから複製します。この機能のより詳細な説明といくつかの構成例については、 here を参照してください。

  • 領事館の登録サービス Pavel Kirillov、Alexander Kukushkin

    consul configuration の`register_service`パラメータが有効になっている場合、ノードは名前`scope`とタグ`master`、`replica`または`standby-leader`でサービスを登録します。

  • 実験的なWindowsサポートPavel Golub

    今後、PatroniをWindowsで実行できるようになりますが、 Windowsのサポートは新しいもので、Linux対応するものほど多くの現実世界でのテストは受けていません。皆様のフィードバックをお待ちしております。

Improvements in patronictl

  • patronictl -k/--insecureフラグとrestapi証明書のサポートを追加しました。Wilfried Roset

    以前は、REST APIが自己署名証明書で保護されていた場合、patronictl`はそれらの検証に失敗しました。その検証を無効にする方法はありませんでした。証明書検証を完全にスキップするように、または構成の :ref:`ctl: <patronictl_settings> セクションでCAおよびクライアント証明書を提供するように`patronictl`を構成できるようになりました。

  • patroniclスイッチオーバー/フェールオーバー出力からnofailoverタグを持つメンバーを除外する Alexander Anikin

    以前は、patronictlを介して対話型スイッチオーバーまたはフェイルオーバーを実行するときに、これらのメンバーが候補として誤って提案されていました。

Stability improvements

  • pg_controldataの非キーと値の出力行の解析を回避する Alexander Anikin

    特定の状況では、 pg_controldataはコロン文字のない行を出力します。これにより、pg_controldata出力を解析するPatroniコードのエラーがトリガーされ、実際の問題が隠蔽されます。多くの場合、このような行は、通常の出力前、つまりバイナリメジャーバージョンがPostgreSQLデータディレクトリのバージョンと一致しない場合、pg_controldataによって表示される警告で出力されます。

  • リーダー選挙中のエラーメッセージにメンバー名を追加します。Jan Mussler

    リーダー選挙中に、パトローニはクラスターのすべての既知のメンバーに接続し、それらのステータスを要求します。このようなステータスはPatroniログに書き込まれ、メンバーの名前が含まれます。以前は、メンバーにアクセスできない場合、エラーメッセージにはその名前は示されず、URLのみが含まれていました。

  • レプリケーションスロットの作成時に、WALポジションをすぐに予約します。Alexander Kukushkin

    9.6以降、`pg_create_physical_replication_slot`ファンクションは、追加のブールパラメータ`immediately_reserve`を提供します。 `false`に設定されている場合、デフォルトでもありますが、スロットは、最初のクライアント接続を受信するまでWALポジションを予約せず、スロットの作成と間の時間ウィンドウでクライアントが必要とする一部のセグメントを失う可能性があります。初期クライアント接続。

  • 厳密な同期レプリケーションのバグを修正しました。Alexander Kukushkin

    `synchronous_mode_strict: true`で実行している場合、場合によっては、Patroniは`*`を`synchronous_standby_names`に配置し、ほとんどのレプリケーション接続の同期状態を`potential`に変更します。以前、Patroniは、`async`状態を持つもののみを考慮するため、このような状況では同期候補を選択できませんでした。

バージョン1.4.6

リリース2018-08-14

Bug fixes and stability improvements

このリリースでは、非マスターノードの200を返すPatroni API /マスターエンドポイントに関する重大な問題を修正します。これは報告の問題であり、実際のスプリットブレインではありませんが、特定の状況では、クライアントが読み取り専用ノードにリダイレクトされる場合があります。

  • 降格時にis_leaderステータスをリセット Alexander Kukushkin、Oleksii Kliukin

    降格されたクラスターメンバーが/master API呼び出しでコード200で応答を停止することを確認します。

  • 新しい/"cluster_unlocked/"フィールドをAPI出力に追加します Dmitry Dolgov

    このフィールドは、クラスターでマスターが実行されているかどうかを示します。これは、レプリカの1つを除き、他のノードを照会できない場合に使用できます。

バージョン1.4.5

2018-08-03リリース

New features

  • 新しいpostgres構成を適用する際のロギングを改善しました。Don Seiler

    Patroniは、変更されたパラメーターの名前と値をログに記録します。

  • Python 3.7互換性Christoph Berg

    asyncはpython3.7の予約キーワードです

  • メンバーがシャットダウンされたときにDCSで状態を/"stopped/"に設定します。Tony Sorrentino

    これは、メンバーの状態を/"patronictl list/"コマンドの/"stopped/"として表示します。

  • 古いpostmaster.pidが実行中のプロセスと一致する場合にログに記録されるメッセージを改善しますAnts Aasma

    以前のものは混乱を超えていました。

  • patroniclリロード機能の実装Don Seiler

    それまでは、REST APIを呼び出すか、パトロニプロセスにSIGHUP信号を送信することによってのみ構成をリロードすることができました。

  • レプリカとして起動するときに、制御データからいくつかのパラメーターを取得して適用します。Alexander Kukushkin

    `max_connections`の値とグローバル構成で設定されるその他のパラメーターは、プライマリが実際に使用するものよりも低い場合があります。これが発生すると、レプリカは起動できないため、手動で修正する必要があります。 Patroniは、`pg_controldata`から値を読んで適用し、postgresを起動し、`pending_restart`フラグを設定することにより、それを処理します。

  • 設定されている場合、postgresの起動時にLD_LIBRARY_PATHを使用します。 Chris Fraser

    Postgresを起動すると、PatroniはPATH、LC_ALL、およびLANG環境変数が設定されている場合は、それらを渡していました。次に、 LD_LIBRARY_PATHで同じことを行っています。誰かがPostgreSQLを標準以外の場所にインストールすると役立つはずです。

  • create_replica_methodの名前をcreate_replica_methodsに変更しますDmitry Dolgov

    それが実際に配列であることを明確にするため。古い名前は、下位互換性のために引き続きサポートされています。

Bug fixes and stability improvements

  • 一時停止状態のpg_rewindによるレプリカ起動の条件を修正しました Oleksii Kliukin

    以前にpg_rewindを既に実行したレプリカを起動しないようにします。

  • update_lockが成功した場合にのみマスターヘルスチェックに200応答する Alexander Kukushkin

    DCSがパーティション化されている場合、Patroniが以前の降格マスターのマスターを報告しないようにします。

  • 新しいコンスルモジュールとの互換性を修正しました。Alexander Kukushkin

    v1.1.0からpython-consulは内部APIを変更し、`dict`の代わりに`list`を使用してクエリパラメーターを渡すようになりました。

  • シャットダウン中にPatroni REST APIスレッドから例外をキャッチする Alexander Kukushkin

    これらのキャッチされない例外により、シャットダウン時にPostgreSQLが実行され続けました。

  • Postgresがマスターとして実行されている場合にのみクラッシュリカバリーを実行します。Alexander Kukushkin

    `pg_controldata`が'in Production'または'shutting down'または'in crash recovery'をレポートする必要があります。その他のすべての場合、クラッシュリカバリーは必要ありません。

  • 構成エラーの処理を向上させました。Henning Jacobs、Alexander Kukushkin

    Patroni構成ファイルを更新し、SIGHUPをPatroniプロセスに送信することにより、ランタイム`restapi.listen`を含む多くのパラメーターを変更できます。この修正では、一部のパラメーターが無効な値を受け取ったときに、'restapi'スレッドからあいまいな例外を削除します。

バージョン1.4.4

2018-05-22リリース

Stability improvements

  • poll_failover_resultの競合状態を修正しました。Alexander Kukushkin

    フェイルオーバーもスイッチオーバーにも直接影響しませんでしたが、まれに、元のリーダーがロックを解放したときに成功を報告するのが早すぎ、「Failedover to /」の代わりに「Failedover to /"None/"」が生成されました。 "desired-node/"'メッセージ。

  • Postgresパラメーター名を大文字と小文字を区別しないように扱う Alexander Kukushkin

    Postgresパラメーターのほとんどはsnake_case名前を持っていますが、このルールには3つの例外がありますDateStyle、IntervalStyle、TimeZone。 Postgresは、別のケースたとえばtimezone = 'some/tzn'で書かれた場合、これらのパラメーターを受け入れます。ただし、Patroniはpg_settingsでこれらのパラメーター名の大文字と小文字を区別しない一致を見つけることができず、結果としてこのようなパラメーターを無視しました。

  • 実行中のpostgresにアタッチし、クラスターが初期化されていない場合、スタートを中止します。Alexander Kukushkin

    Patroniは、既に実行されているPostgresインスタンスに自分自身をアタッチできます。レプリカに到達する前に、マスターノードでPatroniの実行を開始することが不可欠です。

  • patronictl scaffoldの動作を修正しました Alexander Kukushkin

    jsonエンコードされた文字列の代わりにdictオブジェクトをtouch_memberに渡すと、DCS実装がそれのエンコードを担当します。

  • 一時停止中にリーダーキーの更新に失敗した場合、マスターを降格しないでください Alexander Kukushkin

    メンテナンス中に、DCSは読み取り要求に応答し続けながら、書き込み要求の失敗を開始する場合があります。その場合、PatroniはDCSのリーダーロックの更新に失敗した後、Postgresマスターノードを読み取り専用モードにしていました。

  • Patroniが新しいポストマスタープロセスに気づいたときにレプリケーションスロットを同期します Alexander Kukushkin

    Postgresが再起動された場合、Patroniはレプリケーションスロットのリストが予想と一致することを確認する必要があります。

  • 一時停止から復帰した後のsysidと同期レプリケーションスロットを検証する Alexander Kukushkin

    `maintenance`モード中に、データディレクトリが完全に書き換えられる場合があるため、`Database system identifier`がまだクラスターに属し、レプリケーションスロットがパトローニの期待と同期していることを確認する必要があります。

  • ポストマスターロックファイルが存在するデータディレクトリでPostgresを実行せずに開始すると失敗する可能性を修正しました。 Alexander Kukushkin

    ポストマスターロックファイルからPIDの再利用を検出します。 DockerコンテナでPatroniとPostgresを実行している場合、このような問題が発生する可能性が高くなります。

  • 誤ってワイプされたDCSの保護を向上させました Alexander Kukushkin

    Patroniには、このような場合にフェイルオーバーを防ぐための多くのロジックが用意されています。すべてのキーを復元することもできます。ただし、この変更が発生するまでは、 /configキーを誤って削除すると、HAループの1サイクルの一時停止モードがオフになっていました。

  • 無効なシステムIDが発生しても終了しないOleksii Kliukin

    クラスターシステムIDが空の場合、または検証チェックに合格しない場合は終了しないでください。その場合、クラスターは再初期化が必要になる可能性が高くなります。結果メッセージにそれを記載します。そうしないと、再初期化が発生しないため、Patroniを終了しないでください。

Compatibility with Kubernetes 1.10+

  • 空のサブセットのチェックを追加しました Cody Coons

    Kubernetes 1.10.0+は、`[]`の代わりに`None`に設定された`Endpoints.subsets`を返し始めました。

Bootstrap improvements

  • recovery.confの削除をオプショナルにします。 Brad Nicholson

    bootstrap.<custom_bootstrap_method_name>.keep_existing_recovery_conf`が定義され、 ``True` に設定されている場合、Patroniは既存の recovery.conf ファイルを削除しません。これは、適切な`recovery.conf`を生成するpgBackRestのようなツールを使用してバックアップからブートストラップする場合に役立ちます。

  • basebackupビルトインメソッドのオプションを許可します Oleksii Kliukin

    カスタムレプリカ作成方法で定義される方法と同様に、構成で`basebackup`セクションを定義することにより、ビルトインbasebackupメソッドにオプションを提供できるようになりました。違いは、basebackup`セクションで受け入れられるフォーマットにあります。pg_basebackupは--key=value`と`--key`オプションの両方を受け入れるため、セクションのコンテンツはキーと値のペアの辞書、または1要素辞書またはキーのみのリスト値を受け入れないオプションの場合。追加の例については、 replica creation method セクションを参照してください。

バージョン1.4.3

2018-03-05リリース

Improvements in logging

  • 環境変数からログレベルを設定できるようにします。Andy Newton、Keyvan Hedayati

    PATRONI_LOGLEVEL-一般的なログレベルを設定します PATRONI_REQUESTS_LOGLEVEL-すべてのHTTP要求のログレベルを設定します。 Kubernetes API呼び出し 考えられるログレベルの名前を取得するには、`the docs for Pythonlogging <https://docs.python.org/3.6/library/logging.html#levels>`を参照してください。

Stability improvements and bug fixes

  • 監視がタイムアウトしたときにetcdクラスタートポロジを再検出しないでください Alexander Kukushkin

    etcd構成にホストが1つだけあり、正確にこのホストにアクセスできない場合、Patroniはクラスタートポロジの検出を開始していましたが、成功しませんでした。代わりに、次の利用可能なノードに切り替える必要があります。

  • カスタムブートストラップの後に、bootstrap.pg_hbaのコンテンツをpg_hba.confに書き込みます。 Alexander Kukushkin

    `initdb`を使用した通常のブートストラップと同様に動作するようになりました

  • シングルユーザーモードはユーザー入力を待機していて、終了しませんでした。Alexander Kukushkin

    回帰は以下で紹介されました https://github.com/patroni/patroni/pull/576

バージョン1.4.2

2018-01-30リリース

Improvements in patronictl

  • スケジュールされたフェイルオーバーの名前をスケジュールされたスイッチオーバーに変更します Alexander Kukushkin

    フェールオーバーとスイッチオーバー機能はバージョン1.4で分離されましたが、`patronictl list`は引き続き`Scheduled switchover`の代わりに`Scheduledailover`を報告していました。

  • 保留中の再起動に関する情報を表示する Alexander Kukushkin

    一部の構成の変更を適用するには、postgresを再起動する必要がある場合があります。 Patroniは、REST APIで、およびノードのステータスをDCSに書き込むときに、既にそれに関するヒントを提供していましたが、それを表示する簡単な方法はありませんでした。

  • 構成ファイルのcluster_nameを操作するようにshow-configを作成しました。 Alexander Kukushkin

    `patronictl edit-config`と同様に動作します

Stability improvements

  • ブートストラップ中にpg_controldataの呼び出しを回避する Alexander Kukushkin

    initdbまたはカスタムブートストラップ中に、pgdataは空ではないが、pg_controldataがまだ書き込まれていない時間枠があります。このような場合、 pg_controldata呼び出しはエラーメッセージで失敗していました。

  • psutilから発生した例外を処理します。Alexander Kukushkin

    cmdlineは、`cmdline()`メソッドが呼び出されるたびに読み込まれ、解析されます。調べられるプロセスが既に消失している場合もあります。その場合、`NoSuchProcess`が発生します。

Kubernetes support improvements

  • k8s APIからのエラーを飲み込まないでください。Alexander Kukushkin

    Kubernetes APIの呼び出しは、さまざまな理由で失敗する場合があります。場合によっては、このような呼び出しを再試行する必要があります、他の場合には、エラーメッセージと例外スタックトレースをログに記録する必要があります。ここでの変更は、Kubernetesの権限の問題をデバッグするのに役立ちます。

  • Kubernetesの例のDockerファイルを更新してマスターブランチからPatroniをインストールします Maciej Szulik

    その前は`feature/k8s`を使用していましたが、時代遅れになりました。

  • k8sでパトロニを実行するための適切なRBACを追加します。Maciej Szulik

    クラスターのポッドに割り当てられるサービスアカウント、必要な権限のみを保持するロール、サービスアカウントとロールを接続するロールバインディングを追加します。

バージョン1.4.1

2018-01-17リリース

Fixes in patronictl

  • フェイルオーバー先のメンバーの提案リストに現在のリーダーを表示しません。 (アレクサンダー・ククシュキン)

    patronictlフェールオーバーは、クラスター内にリーダーが存在する場合でも機能する可能性があるため、フェールオーバーが可能なメンバーのリストから除外する必要があります。

  • patroniclスイッチオーバーを古いPatroni APIと互換性のあるものにしました Alexander Kukushkin

    POST /switchover REST API呼び出しがステータスコード501で失敗した場合、再度実行されますが、/failoverエンドポイントに対して。

バージョン1.4

2018-01-10リリース

このバージョンでは、KubernetesをDCSとして使用するサポートを追加し、Etcd、Zookeeper、またはConsulを追加展開せずに、KubernetesでクラウドネイティブエージェントとしてPatroniを実行できます。

Upgrade notice

pipを介してPatroniをインストールすると、Etcd、Zookeper、Consul、またはKubernetesのライブラリ、またはAWSのサポートなどの依存関係は導入されません。それらを有効にするには、`pip install patroni[etcd,kubernetes]`などのpip installコマンドで明示的にリストする必要があります。

Kubernetes support

KubernetesベースのDCSを実装します。エンドポイントのメタデータは、構成とリーダーキーを保存するために使用されます。ポッド定義内のメタデータフィールドは、メンバー関連のデータを保存するために使用されます。エンドポイントの使用に加えて、PatroniはConfigMapsをサポートしています。この機能の詳細については、 Kubernetes chapter of the documentation をご覧ください。

Stability improvements

  • ポストマスタープロセスを別のオブジェクトに分解する Ants Aasma

    このオブジェクトは、 pidと開始時刻を介して実行中のポストマスタープロセスを識別し、ポストマスターが背後で再起動されたとき、またはpostgresディレクトリがファイルシステムから消えたときの状況の検出および解決を簡素化します。

  • HAサイクルのすべてのループでPatroniによって発行されるSELECTの量を最小限に抑えます。Alexander Kukushkin

    HAループの反復ごとに、パトローニは、リカバリステータスと絶対的なwal位置を知る必要があります。今後、Patroniは、レプリカで2つ、マスターで3つの代わりに、1つのSELECTのみを実行してこの情報を取得します。

  • ロックがある場合にのみシャットダウン時にリーダーキーを削除します。Ants Aasma

    無条件削除は、不要で誤解を招く例外を生成していました。

Improvements in patronictl

  • versionコマンドをpatronictlに追加します。Ants Aasma

    インストールされているPatroniのバージョンと実行中のPatroniインスタンスのバージョンクラスター名が指定されている場合が表示されます。

  • 一部のpatronictlコマンドのcluster_name引数をオプショナルに指定するようにします。Alexander Kukushkin、Ants Aasma

    patroniclが scope が定義された通常のPatroni構成ファイルを使用している場合に動作します。

  • スケジュールされたスイッチオーバーとメンテナンスモードに関する情報を表示します Alexander Kukushkin

    それまでは、PatroniログからまたはDCSから直接この情報を取得することができました。

  • patronictl reinit の改善 Alexander Kukushkin

    Patroniが他のアクション、つまりpostgresを起動しようとしていたときに、 patronictl reinit が続行を拒否する場合がありました。 `patronictl`は、このような長時間実行アクションをキャンセルするコマンドを提供せず、唯一の危険な回避策はデータディレクトリを手動で削除することでした。 `reinit`の新しい実装は、reinitを続行する前に他の長時間実行アクションを強制的にキャンセルします。

  • patronictl pause および patronictl resume に --wait フラグを実装します。Alexander Kukushkin

    要求されたアクションがクラスター内のすべてのノードによって確認されるまで、 patronictl は待機します。このような動作は、DCSおよびREST APIを介してすべてのノードの pause フラグを公開することにより実現されます。

  • patronictl failover の名前を patronictl switchover に変更します。Alexander Kukushkin

    以前の failover は、実際にはスイッチオーバーのみが可能でした。リーダーなしでクラスターで進むことを拒否しました。

  • patronictl failover の動作を変更します。Alexander Kukushkin

    リーダーがない場合でも機能しますが、その場合、新しいリーダーになるノードを明示的に指定する必要があります。

Expose information about timeline and history

  • DCSおよびAPI経由で現在のタイムラインを公開する Alexander Kukushkin

    クラスターのメンバーごとに、現在のタイムラインに関する情報を保存します。この情報はAPIを介してアクセスでき、DCSに保存されます

  • DCSの/historyキーにプロモーション履歴を保存する Alexander Kukushkin

    さらに、対応するプロモーションのタイムスタンプで強化されたタイムライン履歴をDCSの/historyキーに保存し、各プロモートで更新します。

Add endpoints for getting synchronous and asynchronous replicas

  • 新しい/syncおよび/asyncエンドポイントを追加します Alexander Kukushkin、Oleksii Kliukin

これらのエンドポイント /synchronousおよび/asynchronousとしてもアクセスできますは、対応する同期および非同期レプリカ`noloadbalance`としてマークされたものを除く場合にのみ200を返します。

Allow multiple hosts for Etcd

  • 新しい`hosts`パラメータをEtcd構成に追加します Alexander Kukushkin

    このパラメーターには、実行中のetcdクラスターメンバーのリストを検出および設定するために使用されるホストの初期リストが含まれています。作業中に何らかの理由で、検出されたホストのこのリストが使い果たされると、そのリストに使用可能なホストがない場合、Patroniは`hosts`パラメータから初期リストに戻ります。

バージョン1.3.6

2017-11-10リリース

Stability improvements

  • postgresが実行されているかどうかを確認するときに、プロセスの開始時間を検証します。 (Ants Aasma)

    postmaster.pidをクリーンアップしないクラッシュの後、同じpidを持つ新しいプロセスが存在する可能性があり、is_running()の誤検出が発生し、あらゆる種類の不正な動作につながります。

  • データディレクトリainlolcatを失ったときにブートストラップする前にpostgresqlをシャットダウンする

    マスター上のデータディレクトリが強制的に削除されると、postgresプロセスはしばらく生きたままで、その元のマスターの代わりに作成されるレプリカの起動またはレプリケートを防ぐことができます。この修正により、Patroniはポストマスターpidとその開始時刻をキャッシュし、対応するデータディレクトリが削除された後も実行されている場合に古いポストマスターを終了させます。

  • postgresマスターが死亡した場合に、シングルユーザーモードでクラッシュリカバリーを実行します Alexander Kukushkin

    スタンバイとしてすぐに起動するのは安全でなく、postgresが完全にシャットダウンしていない場合は pg_rewind を実行できません。シングルユーザーのクラッシュリカバリーは、 pg_rewind が有効になっている場合、または現在マスターが存在しない場合にのみキックインされます。

Consul improvements

  • Consulのデータセンター構成を提供できるようにしました Vilius Okockis、Alexander Kukushkin

    その前に、Patroniは常にそれが実行されているホストのデータセンターと通信していました。

  • 常にX-Consul-Token httpヘッダーでトークンを送信します Alexander Kukushkin

    Patroni構成で consul.token が定義されている場合、常に'X-Consul-Token' httpヘッダーで送信します。 python-consulモジュールは、 consul.token _のクエリパラメータとしてトークンを受け入れないConsul REST APIと/"一貫性"を持とうとしますが、 'X-Consul-Token'ヘッダーで動作します。

  • 指定された値が可能な最小値より小さい場合、セッションTTLを調整します。 Stas Fomin、Alexander Kukushkin

    Patroni構成で提供されるTTLがConsulでサポートされている最小TTLよりも小さい場合があります。その場合、Consulエージェントは新しいセッションの作成に失敗します。セッションがないと、PatroniはConsul KVストアにメンバーキーとリーダーキーを作成できません。その結果、異常なクラスターが発生します。

Other improvements

  • 環境変数 PATRONI_LOGFORMAT を介してカスタムログ形式を定義する スタスフォミン

    システムロガーによって既に追加されている場合、Patroniログのタイムスタンプおよびその他の同様のフィールドを無効にすることを許可します通常はPatroniがサービスとして実行されている場合。

バージョン1.3.5

2017-10-12リリース

Bugfix

  • データディレクトリが削除された場合、ロールを'未初期化'に設定します Alexander Kukushkin

    ノードがマスターとして実行されている場合、フェールオーバーを妨げていました。

Stability improvement

  • postgresを起動しようとして失敗した場合は、シングルユーザーモードでpostmasterを実行してみます。Alexander Kukushkin

    通常、このような問題は、マスターとして実行されているノードが終了され、タイムラインが分岐されたときに発生します。 recovery.conf に restore_command が定義されている場合、postgresが起動を中止し、制御データを変更しないままにする可能性が非常に高いです。クリーンなシャットダウンが必要な pg_rewind を使用できなくなります。

Consul improvements

  • セッションを作成するときにヘルスチェックを指定できるようにしました Alexander Kukushkin

    指定しない場合、Consulは/"serfHealth/"を使用します。一方では、分離されたマスターの迅速な検出が可能になりますが、別の側面では、パトローニが短いネットワーク遅延を許容することが不可能になります。

Bugfix

  • Python 3のウォッチドッグを修正する Ants Aasma

    ioctl()呼び出しインタフェースの誤解。 mutable=Falseの場合、 fcntl.ioctl()は実際にargバッファを返します。 intとstrの比較がエラーを返さなかったため、これは誤ってPython2で動作しました。エラー報告は、実際には、Python2でIOErrorを発生させ、Python3でOSErrorを発生させることにより実行されます。

バージョン1.3.4

2017-09-08リリース

Different Consul improvements

  • 領事トークンをヘッダーとして渡します。Andrew Colin Kissa

    ヘッダーは、トークンを領事館 API _に渡すための優先的な方法になりました。

  • Consulの詳細な構成 Alexander Kukushkin

    scheme 、 token 、クライアントおよびca証明書 scheme を指定する可能性。

  • python-consul-0.7.1以降との互換性Alexander Kukushkin

    新しいpython-consulモジュールは、一部のメソッドのシグネチャを変更しました

  • /"TTLロックを取り出すことができませんでした"メッセージはログに記録されませんでした。 Alexander Kukushkin

    重大なバグではありませんが、適切なログの欠如により、問題が発生した場合の調査が複雑になります。

Quote synchronous_standby_names using quote_ident

  • synchronous_standby_names を postgresql.conf に書き込む場合、その値は引用符で囲む必要があります。Alexander Kukushkin

    適切に引用されていない場合、PostgreSQLは同期レプリケーションを効果的に無効にして、動作を継続します。

Different bugfixes around pause state, mostly related to watchdog アレクサンダー・ククシュキン

  • ウォッチドッグがアクティブでない場合はキープアライブを送信しない

  • 一時停止モードでウォッチドッグをアクティブにしない

  • 一時停止モードで正しいpostgres状態を設定する

  • postgresが停止している場合は、APIからクエリを実行しないでください

バージョン1.3.3

2017-08-04リリース

Bugfixes

  • synchronous_mode_strictがオンになっている場合でも、昇格の直後に同期レプリケーションが無効になっていました。 Alexander Kukushkin

  • バックアップから復元した後に空の pg_ident.conf ファイルが見つからない場合は、作成します Alexander Kukushkin

  • postgresだけでなくすべてのデータベースへの pg_hba.conf のオープンアクセス Franco Bellagamba

バージョン1.3.2

2017-07-31リリース

Bugfix

  • patronictl edit-configはZooKeeperで動作しませんでした。Alexander Kukushkin

バージョン1.3.1

2017-07-28リリース

Bugfix

  • _MemberStatus の変更により、APIを介したフェイルオーバーが中断されました。 Alexander Kukushkin

バージョン1.3

2017-07-27リリース

バージョン1.3は、カスタムブートストラップの可能性を追加し、pg_rewindのサポートを大幅に向上させ、同期モードのサポートを強化し、patronictlに構成編集を追加し、Linuxでウォッチドッグサポートを実装します。さらに、これはPostgreSQL 10で正常に動作する最初のバージョンです。

Upgrade notice

Patroniの新しいバージョンと既知の互換性問題はありません。バージョン1.2からの構成は変更せずに動作するはずです。新しいパッケージをインストールし、Patroniを再起動するPostgreSQLの再起動が発生するか、最初にPatroniを pause mode に入れて、クラスター内のすべてのノードでPatroniを再起動することにより、アップグレードが可能です。一時停止モードのPatroniはstop/ start PostgreSQL)、最後に一時停止モードから再開します。

Custom bootstrap

  • クラスターのブートストラップのプロセスを構成可能にする Alexander Kukushkin

    クラスター内の最初のノードを初期化するときに、 initdb の代わりにカスタムブートストラップスクリプトを許可します。 bootstrapコマンドは、クラスターの名前とデータディレクトリへのパスを受け取ります。生成されるクラスターは、リカバリを実行するように構成できるため、バックアップからブートストラップし、ポイントインタイムリカバリーを可能にします。この機能の詳細な説明については、 initdb を参照してください。

Smarter pg_rewind support

  • 現在のマスターとのタイムラインの違いを見て、pg_rewindを実行するかどうかを決定します。Alexander Kukushkin

    以前のPatroniには、pg_rewindをトリガーするための固定条件セット、つまり元のマスターを起動したとき、クラスター内の他のすべてのノードで指定されたノードへのスイッチオーバーを行ったとき、またはnofailoverタグを持つレプリカが存在する場合がありました。これらすべての場合に共通して、一部のレプリカが新しいマスターよりも先を行く可能性があります。場合によっては、 pg_rewindは何もしませんでした、他のいくつかの場合、必要に応じて実行されませんでした。この限定されたルールのリストに依存するのではなく、PatroniはマスターとレプリカのWAL位置を比較するストリーミングレプリケーションプロトコルを使用して、レプリカに巻き戻しが必要かどうかを確実に決定します。

Synchronous replication mode strict

  • strictモードを追加することにより、同期レプリケーションのサポートを強化します。James Sewell、Alexander Kukushkin

    通常、 synchronous_mode が有効で、マスターに接続されているレプリカがない場合、Patroniはマスターを書き込みに利用できるようにするために同期レプリケーションを無効にします。 synchronous_mode_strict オプションは、設定されている場合、Patroniはレプリカが不足している場合に同期レプリケーションを無効にせず、マスターにデータを書き込むすべてのクライアントを効果的にブロックします。自動フェイルオーバーによるデータ損失を防ぐ同期モードの保証に加えて、strictモードでは、各書き込みが2つのノードに永続的に保存されるか、クラスター内にノードが1つだけの場合は完全に発生しないことが保証されます。

Configuration editing with patronictl

  • patroniclに構成編集を追加しました。Ants Aasma、Alexander Kukushkin

    DCSに保存されている動的クラスター構成の編集を保護する機能を追加します。コマンドラインからのパラメーター/値の指定、$EDITORの呼び出し、またはyamlファイルからの構成の適用のいずれかをサポートします。

Linux watchdog support

  • Linuxのウォッチドッグサポートを実装する Ants Aasma

    パトローニが実行されていないノード、または応答していないノードをリブートするためにLinuxソフトウェアウォッチドッグをサポートたとえば、高負荷のため Linuxソフトウェアウォッチドッグは、非応答ノードを再起動します。 Patroni構成のwatchdogセクションからデフォルトで`/dev/watchdog`とモードon、automatic、offを使用するようにウォッチドッグデバイスを構成することが可能です。 watchdog documentation から詳細情報を取得できます。

Add support for PostgreSQL 10

  • Patroniは、これまでにリリースされたPostgreSQL 10のすべてのベータバージョンと互換性があり、リリースされるPostgreSQL 10と互換性がある予定です。

PostgreSQL-related minor improvements

  • Patroni構成ファイルまたはDCSの動的構成を介してpg_hba.confを定義します Alexander Kukushkin

    構成の postgresql セクションの pg_hba サブセクションで pg_hba.conf の内容を定義できます。これにより、すべてのノードにロギングし、手動で変更して、構成をリロードするのではなく、DCSでのみ定義する必要があるため、マルチプルのノードでの pg_hba.conf の管理が簡素化されます。

    定義されると、このセクションの内容は、現在の pg_hba.conf を完全に置き換えます。 hba_file PostgreSQLパラメーターが設定されている場合、Patroniはそれを無視します。

  • UNIXソケットを介したローカルPostgreSQLクラスターへの接続のサポート Alexander Kukushkin

    use_unix_socket オプションをPatroni構成の postgresql セクションに追加します。 trueに設定され、PostgreSQL unix_socket_directories オプションが空でない場合、Patroniはその最初の値を使用してローカルのPostgreSQLクラスターに接続できます。 unix_socket_directories が定義されていない場合、Patroniはデフォルト値を想定し、PostgreSQL接続文字列の host パラメーターを完全に省略します。

  • リロード時のスーパーユーザーとレプリケーション資格情報の変更のサポート Alexander Kukushkin

  • PostgreSQLデータディレクトリの外部への構成ファイルの保存のサポート @jouir

    新しい構成 postgresql 構成指示子 config_dir を追加します。これはデフォルトでデータディレクトリにあり、Patroniによって書き込み可能である必要があります。

Bug fixes and stability improvements

  • Handle EtcdEventIndexClearedおよびEtcdWatcherCleared例外 Alexander Kukushkin

    無駄な再試行を回避することにより、Etcdによって監視オペレーションが終了されたときのリカバリーが速くなります。

  • Etcd障害時にスピンするエラーを削除し、ログスパムを削減します。Ants Aasma

    2回目以降のEtcd接続失敗時の即時再試行とログへのスタックトレースの発行は避けてください。

  • PostgreSQLプロセスをフォークするときにロケール変数をエクスポートする Oleksii Kliukin

    NLSでビルドされたPostgreSQLの英語以外のロケールでの`postmaster become multithreaded whilestartup`の致命的なエラーを回避します。

  • レプリケーションスロットをドロップする際の追加チェック Alexander Kukushkin

    場合によっては、PatroniはWAL送信者によってレプリケーションスロットをドロップできない場合があります。

  • PostgreSQLの命名ルールに従うように、レプリケーションスロット名を63 (NAMEDATALEN - 1)文字に切り詰めます。Nick Scott

  • PatroniからPostgreSQLクラスターへの追加の接続が開かれる競合状態を修正しました。Alexander Kukushkin

  • ノードが空のデータディレクトリで再起動したときにリーダーキーを解放します。Alex Kerney

  • リーダーなしでブートストラップを実行するときに非同期エグゼキューターをビジーに設定します。Alexander Kukushkin

    これを行わないと、パトロニは、クラスターにリーダーが存在することを必要としないブートストラップ方法でブートストラップされている間、通常のビジネスを続行したため、ノードが別のクラスターに属していることを示すエラーが発生する可能性があります。

  • WAL-Eレプリカ作成方法の改善 Joar Wandborg、Alexander Kukushkin 。

    • WAL-Eベースバックアップを解析するときにcsv.DictReaderを使用し、スペース区切りの日付と時刻でISO日付を受け入れます。

    • レプリカから現在のWAL位置を取得して、復元するWALの量を推定することをサポートします。以前は、コードは、マスターノードでのみ使用可能なシステム情報機能を呼び出すために使用されていました。

バージョン1.2

2016-12-13リリース

このバージョンでは、同期レプリケーションの処理を大幅に改善し、起動プロセスとフェールオーバーの信頼性を高め、PostgreSQL 9.6サポートを追加し、多くのバグを修正します。さらに、これらのリリースノートを含むドキュメントは、https://patroni.readthedocs.ioに移動されました。

Synchronous replication

  • 同期レプリケーションのサポートを追加します。 (Ants Aasma)

    新しい構成変数 synchronous_mode を追加します。有効にすると、Patroniは synchronous_standby_names を管理して、利用可能な正常なスタンバイがあるときは常に同期レプリケーションを有効にします。同期モードが有効になっている場合、Patroniは、マスター障害が発生したときに同期複製していたスタンバイにのみ自動的にフェールオーバーします。これは、このような場合にユーザーに表示されるトランザクションが失われないことを効果的に意味します。詳細な説明と実装の詳細については、 synchronous_mode を参照してください。

Reliability improvements

  • PostgreSQLが100%正常でない場合は、 leader optime キーに保存されているリーダー位置を更新しないでください。リーダーキーの更新に失敗した場合、すぐに降格します。 (アレクサンダー・ククシュキン)

  • 新しいレプリカのクローンを作成するターゲットのリストから異常なノードを除外します。 (アレクサンダー・ククシュキン)

  • Etcdで行う方法と同様に、Consulの再試行とタイムアウト戦略を実装します。 (アレクサンダー・ククシュキン)

  • --dcs および --config-file を patronictl のすべてのオプションに適用します。 (アレクサンダー・ククシュキン)

  • すべてのpostgresパラメーターをpostgresql.confに書き込みます。 (アレクサンダー・ククシュキン)

    これにより、パトロニによって構成されたPostgreSQLを pg_ctl のみで起動できます。

  • 構成内にユーザーが存在しない場合、例外を回避します。 (キリル・プーシキン)

  • 異常なクラスターの一時停止を許可します。この修正が行われる前は、 patronictl は、一時停止を実行しようとしたノードに異常がある場合にベイルアウトしていました。 (アレクサンダー・ククシュキン)

  • リーダーウォッチ機能を改善します。 (アレクサンダー・ククシュキン)

    以前は、レプリカは常にリーダーキーを監視していましたタイムアウトまたはリーダーキーが変更されるまでスリープしていました。この変更では、レプリカのPostgreSQLが running 状態にある場合のみを監視し、PostgreSQLが停止/開始、または再起動しているときは監視しません。

  • SIGCHILDをPID 1として処理するときに、競合状態に陥ることを回避します。 Alexander Kukushkin

    以前は、Patroni内の同じプロセスが新しいプロセスを生成し、それらからSIGCHILDを処理したため、Dockerコンテナ内で実行されているときに競合状態が発生する可能性がありました。この変更では、Patroniのfork/execを使用し、元のPID 1プロセスに子からの信号を処理させます。

  • WAL-Eの復元を修正します。 (オレクシー・クリウキン)

    以前は、WAL-E復元は no_master フラグを使用して、マスターとのコンサルテーションを完全に回避し、Patroniは常に pg_basebackup ではなくWALからの復元を選択します。この変更は、 no_master の元の意味に戻します。つまり、マスターが実行されていない場合、Patroni WAL-Eリストアはレプリケーション方法として選択できます。後者は、メソッドに渡された接続文字列を調べることにより確認されます。さらに、再試行メカニズムをより堅牢にし、他の細部を処理します。

  • 非同期DNSリゾルバーキャッシュを実装します。 (アレクサンダー・ククシュキン)

    DNSが一時的に使用できない場合の失敗を回避しますたとえば、ノードが受信した過剰なトラフィックのため。

  • 開始状態とマスター開始タイムアウトを実装します。 (Ants Aasma、Alexander Kukushkin)

    以前は pg_ctl はタイムアウトを待って、PostgreSQLが実行されていると考えて喜んで踏み続けました。これにより、PostgreSQLは実際には実行されていないときに実行されているとしてリストに表示され、フェールオーバー、クラッシュリカバリー、またはフェールオーバーとリワインドの欠落によって中断されたクラッシュリカバリーが発生する競合状態が発生しました。この変更では、 master_start_timeout パラメーターを追加し、メインHAループ starting の新しい状態を導入します。 master_start_timeout が0の場合、マスターがクラッシュしたときに、フェイルオーバー候補が存在するとすぐにフェイルオーバーします。それ以外の場合、PatroniはマスターでPostgreSQLを起動しようとした後、タイムアウトの間待機します。有効期限が切れると、可能であればフェイルオーバーします。手動フェイルオーバー要求は、マスターのクラッシュ中にタイムアウトの有効期限が発生する前でも受け入れられます。

    timeout パラメーターを restart APIエンドポイントと patronictl に導入します。設定され、再起動がタイムアウトより長くかかる場合、PostgreSQLは異常であると考えられ、他のノードがリーダーロックを取得できるようになります。

  • 一時停止モードでの pg_rewind の動作を修正しました。 (Ants Aasma)

    Patroniが巻き戻す必要があると考えているが、巻き戻しが不可能な場合、つまり pg_rewind が存在しない場合、一時停止モードでの不必要な再起動を避けます。 superuser 認証が pg_rewind 関連のPatroni構成セクションにない場合、 superuser デフォルトのOSユーザーのデフォルトの libpq 値にフォールバックします。

  • コールバックの実行をシリアル化します。新しいコールバックが実行されようとしているときに、同じタイプの以前のコールバックを強制終了します。コールバックの実行時にゾンビプロセスが生成される問題を修正します。 (アレクサンダー・ククシュキン)

  • リーダーキーがDCSで設定されているが、このリーダーキーの更新が失敗する場合、以前のマスターの昇格を避けてください。 (アレクサンダー・ククシュキン)

    これにより、現在のマスターが「一貫性のない読み取り」を許可するEtcdおよびその他のDCSの少数のノードとともにパーティション化されている場合、ロールを維持し続けてしまう問題を回避します。

Miscellaneous

  • ブートストラップに post_init 構成オプションを追加します。 (アレハンドロ・マルティネス)

    Patroniは、 initdb を実行し、新しいクラスターに対してPostgreSQLを起動した直後に、このオプションのスクリプト引数を呼び出します。スクリプトは、 superuser で接続URLを受け取り、パスワードを含む .pgpass ファイルをポイントするように PGPASSFILE を設定します。スクリプトが失敗すると、Patroniの初期化も失敗します。これは、新しいユーザーを追加したり、新しいクラスターに拡張機能を作成したりする場合に役立ちます。

  • PostgreSQL 9.6サポートを実装します。 (アレクサンダー・ククシュキン)

    wal_level = replica を hot_standby の同義語として使用し、あるものから別のものに変更されるときのpending_restartフラグを回避します。 (アレクサンダー・ククシュキン)

Documentation improvements

  • Patroni main loop workflow diagram _を追加します。 (アレハンドロ・マルティネス、アレクサンダー・ククシュキン)

  • READMEを改善し、Helmチャートとリリースノートへのリンクを追加します。 (ラウリ・アップル)

  • Patroniドキュメントを Read the Docs に移動します。最新のドキュメントは、https://patroni.readthedocs.ioで入手できます。 (オレクシー・クリウキン)

    ドキュメントをさまざまなデバイススマートフォンを含むから簡単に表示し、検索可能にします。

  • パッケージをセマンティックバージョニングに移動します。 (オレクシー・クリウキン)

    Patroniは、major.minor.patchバージョンスキーマに従い、小さいが重要なバグ修正で新しいマイナーバージョンのリリースを回避します。すべてのパッチを含むマイナーバージョンのリリースノートのみを公開します。

バージョン1.1

2016-09-07リリース

このリリースでは、一時停止モードを導入することによりPatroniクラスターの管理を向上させ、スケジュールされたおよび条件付き再起動によるメンテナンスを向上させ、EtcdまたはZookeeperとのPatroniの相互作用をより弾力的にし、patroniclを大幅に強化します。

Upgrade notice

1.0より前のリリースからアップグレードする場合、 1.0リリースノートで資格情報と構成フォーマットの変更についてお読みください。

Pause mode

  • 一時停止モードを導入して、PostgreSQLインスタンスの管理からPatroniを一時的に切断しますMurat Kabilov、Alexander Kukushkin、Oleksii Kliukin。

    以前は、PostgreSQLを終了せずにPatroniにSIGKILLシグナルを送信して停止する必要がありました。新しい一時停止モードは、Patroniを終了せずに、クラスター全体でPostgreSQLからPatroniを切断します。これは、Pacemakerのメンテナンスモードに似ています。 Patroniは引き続きDCSのメンバーとリーダーキーを更新しますが、プロセス中にPostgreSQLサーバーを起動、停止、または再起動しません。いくつかの例外があります。たとえば、手動フェイルオーバー、再初期化、および再起動は引き続き許可されます。 a detailed description of this feature を読み取ることができます。

さらに、patronictlは、一時停止モードを切り替えるための新しい pause および resume コマンドをサポートしています。

Scheduled and conditional restarts

  • restart APIコマンドに条件を追加します Oleksii Kliukin

    この変更は、再起動を行うために検証できるいくつかの条件を追加することにより、Patroniの再起動を強化します。条件の中には、PostgreSQLロールがマスターまたはレプリカの場合の再起動、PostgreSQLバージョン番号の確認、または構成変更を適用するために再起動が必要な場合にのみ再起動が含まれます。

  • スケジュールされた再起動を追加します。Oleksii Kliukin

    将来の再起動をスケジュールできるようになりました。ノードごとに1つのスケジュールされた再起動のみがサポートされています。スケジュールされた再起動が必要でない場合は、クリアすることが可能です。スケジュールされた再起動と条件付き再起動の組み合わせがサポートされており、たとえば、夜間にマイナーPostgreSQLのアップグレードをスケジュールし、管理スクリプトにpostgres固有のロジックを追加せずに、古いマイナーバージョンを実行しているインスタンスのみを再起動できます。

  • 条件付きおよびスケジュールされたリスタートのサポートをpatronictlに追加します。Murat Kabilov。

    patronictl restartは、いくつかの新しいオプションをサポートしています。スケジュールされたアクションをクリーンアップするpatronictllushコマンドもあります。

Robust DCS interaction

  • LOOP_waitに応じてKazooタイムアウトを設定します Alexander Kukushkin

    もともと、 ping_timeoutおよびconnect_timeout値は、ネゴシエートされたセッションタイムアウトから計算されました。 Patroni stop_waitは考慮されませんでした。その結果、1回の再試行でセッションタイムアウトよりも時間がかかる可能性があり、パトローニはロックを解放して降格することを余儀なくされました。

    この変更では、 pingと接続タイムアウトをloop_waitの値の半分に設定し、接続問題の検出を高速化し、ロックを失う前に接続試行を再試行するための十分な時間を残します。

  • 元の要求が成功した場合にのみetcdトポロジを更新します Alexander Kukushkin

    元の要求の後まで、クライアントに知られているEtcdトポロジの更新を延期します。クラスタートポロジを取得するときは、Etcdクラスター内のノードの既知の数に応じて、再試行タイムアウトを実装します。これにより、クライアントはノードの最新のリストよりも要求の結果を取得することを優先します。

    どちらの変更も、ネットワークに問題が発生した場合にDCSへのPatroni接続をより堅牢にします。

Patronictl, monitoring and configuration

  • APIを介してストリーミングレプリカに関する情報を返しますFeike Steenbergen

以前は、接続の問題などにより、変更のストリーミングに失敗したPostgreSQLインスタンスについてPatroniを照会する信頼できる方法がありませんでした。この変更により、 /patroniエンドポイントを介してpg_stat_replicationの内容が公開されます。

  • patronictl scaffoldコマンドを追加 Oleksii Kliukin

    Etcdでクラスター構造を作成するコマンドを追加します。クラスターはユーザー指定のsysidとリーダーで作成され、リーダーキーとメンバーキーの両方が永続化されます。このコマンドは、レプリカのみで構成されるPatroniクラスターがPatroniを認識しない外部マスターノードからレプリケートする、いわゆるマスターレス構成を作成するのに役立ちます。次に、リーダーキーを削除し、Patroniノードの1つを昇格させ、元のマスターをPatroniベースのHAクラスターに置き換えることができます。

  • PostgreSQLバイナリを見つけるための構成オプション bin_dir を追加しますAnts Aasma

    複数のPostgreSQLバージョンのインストールを同時にサポートするLinuxディストリビューションを使用する場合、PostgreSQLバイナリの場所を明示的に指定できると便利です。

  • Alejandro Martínezの custom_conf を使用して構成ファイルパスをオーバーライドできるようにしました

    カスタム構成ファイルパスを許可します。これは、Patroni details によって管理対象外になります。

Bug fixes and code improvements

  • PatroniをPostgreSQL 10以降の新しいバージョンスキーマと互換性のあるものにします。Feike Steenbergen

    PostgreSQLバージョンに基づいて条件付きリスタートを実行するときは、Patroniが2桁のバージョン番号を理解することを確認します。

  • pkgutilを使用してDCSモジュールを見つけます。 Alexander Kukushkin

    DCSモジュールを見つけるためには、ディレクトリを手動で走査する代わりに、専用のPythonモジュールを使用します。

  • Patroniを起動するときに常にon_startコールバックを呼び出します。Alexander Kukushkin

    以前は、Patroniは、正しいロールで既に実行されているノードに接続する場合、コールバックを呼び出しませんでした。コールバックはクライアントをルーティングするために使用されることが多いため、接続ルーティングスキームで実行中のノードの登録に失敗する可能性があります。この修正により、Patroniは、既に実行中のノードに接続している場合でも、on_startコールバックを呼び出します。

  • アクティブなレプリケーションスロットをドロップしないでください Murat Kabilov、Oleksii Kliukin

    マスターでアクティブな物理レプリケーションスロットをドロップしないようにします。いずれにせよ、PostgreSQLはそのようなスロットをドロップできません。この変更により、マスターで非Patroni管理のレプリカ/コンシューマを実行できるようになります。

  • PostgreSQLインスタンスの起動中にPatroni接続を閉じます Alexander Kukushkin

    PostgreSQLノードが起動されたときに、Patroniに以前のすべての接続を強制的に閉じます。 postmasterがSIGKILLで強制終了された場合、以前の接続を再利用するトラップを回避します。

  • メンバー名からスロット名を構成するときに無効な文字を置き換えます Ants Aasma

    スロット命名ルールに準拠していないスタンバイ名がスロットの作成とスタンバイの起動に失敗しないことを確認します。スロット名のダッシュをアンダースコアに置き換え、スロット名で使用できないその他のすべての文字をUnicodeコードポイントに置き換えます。

バージョン1.0

2016-07-05リリース

このリリースでは、 HAクラスター全体のPostgreSQLおよびPatroni構成パラメーターを動的に変更できるグローバル動的構成を導入します。また、多数のバグ修正も提供します。

Upgrade notice

v0.90以前からアップグレードする場合、マスターの前に常にすべてのレプリカをアップグレードします。 DCSにレプリケーション資格情報を保存しないため、古いレプリカは新しいマスターに接続できません。

Dynamic Configuration

  • 動的グローバル構成の実装 Alexander Kukushkin

    新しいREST APIエンドポイント/configを導入して、HAクラスター全体マスターおよびすべてのレプリカに対してグローバルに設定する必要があるPostgreSQLおよびPatroni構成パラメーターを提供します。これらのパラメーターはDCSで設定され、多くの場合、PostgreSQLまたはPatroniを中断せずに適用できます。 Patroniは、一部の値でPostgreSQLの再起動が必要な場合、APIを介して表示される/"pending restart/"と呼ばれる特別なフラグを設定します。その場合、APIを介して再起動を手動で発行する必要があります。

    Patroni SIGHUPまたは/reloadへのPOSTにより、構成ファイルが再読み取りされます。

    変更できるパラメーターと差分構成ソースの処理順序の詳細については、 Patroni configuration を参照してください。

    構成ファイルの形式はv0.90から 変更されました 。 Patroniはまだ古い構成ファイルとの互換性がありますが、ブートストラップパラメーターを利用するには、変更する必要があります。ユーザーは、 dynamic configuration documentation page を参照してそれらを更新することをお勧めします。

More flexible configuration *

  • postgresql構成とデータベース名を作成するPatroniは構成可能に接続します Misja Hoebe

    `database`および`config_base_name`構成パラメーターを導入します。とりわけ、PipelineDBおよびその他のPostgreSQLフォークでPatroniを実行できるようになります。

  • 環境を介して一部のPatroni構成パラメーターを構成する機能を実装します。Alexander Kukushkin

    これらには、スコープ、ノード名、名前空間、およびシークレットが含まれ、動的環境、つまりKubernetesでのパトロニの実行が簡単になります。詳細については、 supported environment variables を参照してください。

  • ビルトインのPatroni Dockerコンテナを更新して、環境ベースの構成Feike Steenbergen を利用します。

  • Patroni DockerイメージにZookeeperサポートを追加しました Alexander Kukushkin

  • Zookeeperと Exhibitionr構成オプションの分割 Alexander Kukushkin

  • PatroniclがPatroniから構成を読み取るためにコードを再利用できるようにしました。Alexander Kukushkin

    これにより、patroniclは環境ベースの構成を利用できます。

  • primary_conninfoでアプリケーション名をノード名に設定します。Alexander Kukushkin

    これにより、特定のノードの同期レプリケーションの識別と構成が簡素化されます。

Stability, security and usability improvements

  • sysidをリセットし、バックアップのリストアが進行中のときにpg_controldataを呼び出さないようにしました Alexander Kukushkin

    この変更により、バックアップからこのノードの時間のかかる初期化中にPatroni APIヘルスチェックによって生成されるノイズの量が削減されます。

  • 多数のpg_rewindコーナーケースを修正しました。Alexander Kukushkin

    ソースクラスタがマスターでない場合、pg_rewindの実行を避けてください。

    さらに、新しいパラメーター remove_data_directory_on_rewind_failure がtrueに設定されていない限り、リワインドが失敗したときにデータディレクトリを削除しないでください。デフォルトではfalseです。

  • DCSのレプリケーション接続文字列からパスワードを削除します Alexander Kukushkin

    以前は、Patroniは常にDCSのPostgres URLからのレプリケーション資格情報を使用していました。これは、パトロニ構成から資格情報を取得するように変更されました。シークレットレプリケーションのユーザー名とパスワードは、DCSで公開されなくなりました。

  • デモートコール周りの非同期機構を修正しました。Alexander Kukushkin

    Demoteは、DCS相互作用をブロックすることなく完全に非同期で実行されるようになりました。

  • patronictlが設定されている場合、承認ヘッダーを常に送信するようにしました Alexander Kukushkin

    これにより、Patroniがこれらに承認を必要とするように構成されている場合、patroniclは/"protected/"要求を発行することができます。つまり、再起動または再初期化。

  • SystemExit例外を正しく処理します Alexander Kukushkin

    SIGTERMを受信したときにPatroniが適切に停止しない問題を回避します

  • confdのサンプルhaproxyテンプレート Alexander Kukushkin

    confideを使用してDCSのパトロニ状態からhaプロキシ構成を生成および動的に変更します

  • ドキュメントを改善および再構成して、新しいユーザーにとってより親しみやすいものにします。 Lauri Apple

  • APIはpg_ctl停止中にrole=masterを報告する必要があります Alexander Kukushkin

    特にクラスター停止の場合、コールバック呼び出しの信頼性を高めます。さらに、`pg_ctl_timeout`オプションを導入して、`pg_ctl`を介してスタート、停止、およびリスタート呼び出しのタイムアウトを設定します。

  • etcdの再試行ロジックを修正しました。Alexander Kukushkin

    再試行をより予測可能かつ堅牢にします。

  • Zookeeperコードの短いネットワークの中断に対する回復力を高めます Alexander Kukushkin

    接続タイムアウトを減らして、Zookeeperの接続試行の頻度を増やします。

バージョン0.90

2016-04-27リリース

このリリースでは、Consulのサポートを追加し、新しい noloadbalance タグを含み、 clonefrom タグの動作を変更し、 pg_rewind 処理を改善し、 patronictl 制御プログラムを改善します。

Consul support

  • Consulサポートの実装 Alexander Kukushkin

    Patroniは、EtcdとZookeeperに加えて、Consulに対して実行されます。接続パラメーターはYAMLファイルで構成できます。

New and improved tags

  • noloadbalance タグを実装します。Alexander Kukushkin

    このタグにより、Patroniは常にレプリカがロードバランサーで利用できないことを返すようになります。

  • clonefrom タグの実装を変更します。Alexander Kukushkin

    以前は、ノード名を clonefrom に提供する必要があり、タグ付けされたレプリカは特定のノードからクローンを作成する必要がありました。新しい実装では、 clonefrom がブールタグになります。これがtrueに設定されている場合、レプリカは他のレプリカからクローンを作成する候補になります。複数の候補が存在する場合、レプリカはランダムに1つを選択します。

Stability and security improvements

  • 多数の信頼性の向上Alexander Kukushkin

    いくつかの偽のエラーメッセージを削除し、フェールオーバーの安定性を向上させ、DCSからのデータの読み取り、元のリーダーのシャットダウン、降格、および再接続に関するいくつかのコーナーケースに対処します。

  • 停止中にパトローニの子供を殺さないようにシステムスクリプトを改善しました。Jan Keirse、Alexander Kukushkin

    以前は、Patroniを停止すると、 systemd もPostgreSQLにシグナルを送信していました。 PatroniもPostgreSQLを自分自身で停止しようとしたため、さまざまなシャットダウン要求スマートシャットダウン、それに続く高速シャットダウンに送信されます。その結果、レプリカの切断が早すぎ、元のマスターは降格後に再参加できなくなりました。 Alexanderによる事前調査を使用してJanによって修正されました。

  • 元のマスターがレプリカとして再参加する前にpg_rewindを呼び出すことができなかった一部のケースを排除します。Oleksii Kliukin

    以前は、元のマスターがクラッシュした場合にのみ pg_rewind を呼び出していました。システムにpg_rewindが存在する限り、以前のマスターに対して常にpg_rewindを実行するようにこれを変更します。これにより、レプリカが最新の変更を取得する前に、つまり/"スマート/"のシャットダウン中にマスターがシャットダウンされた場合が修正されます。

  • 特に、単体テストおよび受け入れテストの多数の改善により、ZookeeperとConsul Alexander Kukushkinのサポートが有効になりました。

  • Travis CIを高速化し、ZookeeperエキシビターとConsul Alexander Kukushkinに対する実行テストのサポートを実装します

    単体テストと受け入れテストは両方とも、各コミットまたはプル要求でEtcd、Zookeeper、およびConsulに対して自動的に実行されます。

  • PatroniからPostgreSQLコマンドを呼び出す前に環境変数をクリアします。Feike Steenbergen

    これにより、Patroniが管理するPostgreSQLクラスターに接続することにより、システム環境変数を読み取る可能性を防ぎます。

Configuration and control changes

  • patroniclとPatroni構成の統合Feike Steenbergen

    patronictlは、Patroni自分自身と同じ構成ファイルを使用できます。

  • Patroniが環境変数から構成を読み取れるようにします Oleksii Kliukin

    これにより、Patroniの構成を自動的に生成したり、さまざまなソースから単一の構成をマージしたりすることが簡単になります。

  • APIから返される情報にデータベースシステム識別子を含めます Feike Steenbergen

  • 使用可能なすべてのDCSに delete_cluster を実装します。Alexander Kukushkin

    patroniclでのEtcd以外のDCSのサポートを有効にします。

バージョン0.80

2016-03-14リリース

このリリースでは、 カスケードレプリケーション のサポートを追加し、 スケジュールされたフェイルオーバー を提供することによりPatroni管理を簡素化します。新しいリリースに移行するために、Patroniの古いバージョン特に0.78をこれと組み合わせて使用することができます。スケジュールされたフェイルオーバーとカスケードレプリケーション関連の機能は、Patroni 0.80以降でのみ動作することに注意してください。

Cascading replication

  • パトロニノードOleksii Kliukinの replicatefrom および clonefrom タグのサポートを追加します。

タグ replicatefrom により、レプリカはマスターではなく、ソースとして任意のノードを使用できます。 clonefrom は、初期バックアップに同じことを行います。これらを組み合わせることで、Patroniはカスケードレプリケーションを完全にサポートできます。

  • 実行中のレプリケーション接続Oleksii Kliukinなしでもレプリカを初期化する実行レプリケーションメソッドのサポートを追加します。

これは、S3またはFTPに保存されているスナップショットからレプリカを作成するために役立ちます。 実行中のレプリケーション接続を必要としないレプリケーション方法は、yaml構成で no_master:true を提供する必要があります。レプリケーション接続が存在する場合、これらのスクリプトは引き続き呼び出されます。

Patronictl, API and DCS improvements

  • スケジュールされたフェイルオーバーを実装しますFeike Steenbergen 。

    patroniclまたはAPI呼び出しを使用して、将来の特定の時刻にフェールオーバーが発生するようにスケジュールできます。

  • patroniclに dbuser および password パラメーターのサポートを追加しましたFeike Steenbergen。

  • PostgreSQLバージョンをヘルスチェック出力に追加しますFeike Steenbergen

  • patroniclのZookeeperサポートを向上させました。Oleksandr Shulgin

  • python-etcd 0.43への移行 Alexander Kukushkin

Configuration

  • Patroni(Jan Keirse)のサンプルシステム構成スクリプトを追加します。

  • PatroniがDB接続の構成ファイルで指定されたスーパーユーザー名を無視する問題を修正しました。Alexander Kukushkin

  • Patroni Alexander Kukushkinによって起動されたポストマスターの別のセッションIDとプロセスグループを作成することにより、CTRL-Cの処理を修正します。

Tests

  • 実行中のPatroni Alexander Kukushkin、Oleksii Kliukinの現実のシナリオを確認するために、 behave を使用して受け入れテストを追加します。

    テストは、 behave コマンドを使用して手動で起動できます。また、プル要求の場合およびコミット後にも自動的に起動されます。

    一部の古いバージョンのリリースノートは project's github page _で見つけることができます。