リリースノート

バージョン3.2.2

Bugfixes

  • DCSがワイプされたときにレプリカ復元で初期化キーを実行させないようにしました。(AlexanderKukushkin)

    これは、PatroniがスタンドアロンのPGクラスターを引き継ぐことになっているメソッドで発生していました。

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

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

  • 再起動が必要なパラメータが元の値にリセットされた場合、Postgres設定をリロードします。(PolinaBungina)

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

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

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

  • patronictl のフェイルオーバー候補からリーダーを除外しました(PolinaBungina)

    クラスターが正常な場合、既存のリーダーへのフェイルオーバーは何も行われません。

  • Citusデータベースと拡張機能をべき等に作成する(AlexanderKukushkin、ZhaoJunwang)

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

  • 矛盾する nofailover タグをフィルタリングしないでください(PolinaBungina)

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

  • PyInstallerのフリーズ問題を修正しました(SophiaRuan)

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

  • patronictl および Citus 設定の設定ジェネレーターのバグを修正しました(IsraelBarthRubio)

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

  • 実行中のスタンバイに参加するときに、リカバリGUCと一部のPatroni管理パラメータを復元します(AlexanderKukushkin)

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

  • pending_restart フラグ周りの修正(PolinaBungina)

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

バージョン3.2.1

Bugfixes

  • patronictl の --format 引数に受け入れられる値を制限しました(AlexanderKukushkin)

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

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

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

  • ノード名の一意性チェックを実行するときに実際のHTTPリクエストを実行します。(AlexanderKukushkin)

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

  • Etcdv2でのCitusサポートを修正しました(AlexanderKukushkin)

    PatroniはEtcdv2を使用した新しいCitusクラスターのデプロイに失敗していました。

  • Postgresv16+での pg_rewind の動作を修正しました。(AlexanderKukushkin)

    pg_waldump のエラーメッセージ形式がv16で変更されたため、不要な場合でもPatroniによって pg_rewind が呼び出されるようになりました。

  • カスタムブートストラップのバグを修正しました(AlexanderKukushkin)

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

  • RESTAPIヘルスチェックエンドポイントの問題を修正しました(SophiaRuan)

    接続が適切に閉じられなかったために、Postgresの再起動後にPostgresの unknown 状態が返される可能性がありました。

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

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

バージョン3.2.0

Deprecation notice

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

Breaking changes

  • loop_wait + 2*retry_timeout <= ttl ルールを適用し、可能な最小限の値をハードコードします。(AlexanderKukushkin)

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

New features

  • フェイルオーバーの優先順位(MarkPekala)

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

  • patroni --generate-config [--dsn DSN] と patroni --generate-sample-config を実装しました(PolinaBungina)

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

  • PatroniRESTAPI用にPostgresへの専用接続を使用する(AlexanderKukushkin)

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

  • ノードの name を使用して一部のエンドポイントを強化します(sskserk)

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

  • 厳密なフェイルオーバー/スイッチオーバーの違いを確保する(PolinaBungina)

    ログメッセージをより正確にし、正常な同期クラスター内の非同期ノードへのフェールオーバーを許可します。

  • 永続的な物理レプリケーションスロットが永続的な論理スロットと同様に動作するようにしました。(AlexanderKukushkin)

    リーダーになることが許可されているすべてのノードに永続的な物理レプリケーションスロットを作成し、 pg_replication_slot_advance() 関数を使用してスタンバイノードのスロットの restart_lsn を進めます。

  • patronictl の --dcs 引数を通じて名前空間を指定する機能を追加しました。(IsraelBarthRubio)

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

  • カスタムブートストラップ構成に追加パラメータのサポートを追加しました(IsraelBarthRubio)

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

Improvements

  • citus.local_hostname GUCを、PatroniがPostgresに接続するために使用するのと同じ値に設定します。(AlexanderKukushkin)

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

Bugfixes

  • スタンバイクラスターの synchronous_mode 設定を無視する(PolinaBungina)

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

  • on_reload コールバックのSIGCHLDを処理しました(AlexanderKukushkin)

    そうしないとゾンビプロセスが生成され、次の on_reload が実行されるときにのみ取得されます。

  • Etcdv3を使用する場合の AuthOldRevision エラーを処理しました(AlexanderKukushkin、KennyDo)

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

バージョン3.1.2

Bugfixes

  • wal_keep_size チェックのバグを修正しました(AlexanderKukushkin)

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

  • /sync キーと synchronous_standby_names の間の不一致を検出して解決しました。(AlexanderKukushkin)

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

  • 実行中のPostgresに参加するときにGUCの値を読む(AlexanderKukushkin)

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

  • ノードの一意性をチェックする際の煩わしい警告を黙らせました(AlexanderKukushkin)

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

バージョン3.1.1

Bugfixes

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

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

  • patronictl の無用な警告をサイレントにしました(AlexanderKukushkin)

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

  • 特殊なケースに対して同期モードを明示的に有効にしました。(AlexanderKukushkin)

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

  • 0 整数値の検証に関するバグを修正しました(IsraelBarthRubio)

    ほとんどの場合、警告が表示されるだけで、問題は発生しませんでした。

  • スタンバイクラスターの論理スロットを返さないようにしました。(AlexanderKukushkin)

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

  • patronictl --help 出力でdocstringを表示しないようにしました。(IsraelBarthRubio)

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

  • kubernetes.standby_leader_label_value のバグを修正しました(AlexanderKukushkin)

    この機能は事実上、まったく機能しませんでした。

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

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

  • Kubernetes実装で write_leader_optime メソッドをオーバーライドしました(AlexanderKukushkin)

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

  • 停止したpostgresを一時停止中に開始しないでください。(AlexanderKukushkin)

    競合状態のため、Patroniは、一部の回復パラメーター( primary_conninfo など)が変更されたため、スタンバイを再起動する必要があると誤って想定していました。

  • patronictl query コマンドのバグを修正しました(IsraelBarthRubio)

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

  • postgresを起動するためにコマンドラインで使用される整数パラメータを適切に処理するようになりました。(PolinaBungina)

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

  • pg_rewind を決定するときに pg_stat_wal_receiver に依存しないでください。(AlexanderKukushkin)

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

バージョン3.1.0

Breaking changes

  • restapi.keyfile と restapi.certfile のセマンティクスを変更しました(AlexanderKukushkin)

    以前、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 のさまざまな改善(AlexanderKukushkin)

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

  • Patroniの実行中に回復中にクラッシュした場合、回復中でない状態でPostgresを起動します。(AlexanderKukushkin)

    これにより、回復時間が短縮され、不必要なタイムラインの増加を防ぐことができます。

  • /status キーの不必要な更新を回避しました。(AlexanderKukushkin)

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

  • 行き詰まった予備選が党首争いに勝つことを許さない(アレクサンダー・ククシュキン)

    リソース不足によりPatroniがかなりの時間ハングしていた場合、リーダーロックを取得する前に他のノードがPostgresを昇格していないかどうかがさらにチェックされます。

  • 特定のPostgreSQLパラメータ検証の可視性を実装しました(AlexanderKukushkin、FeikeSteenbergen)

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

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

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

Bugfixes

  • シェル(Waynerv)を介して archive_command を実行します。

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

  • 「スイッチオーバー時」のシャットダウンチェックを修正しました(PolinaBungina)

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

  • 「プライマリである」チェックを修正しました(AlexanderKukushkin)

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

  • patronictl list を修正しました(AlexanderKukushkin)

    クラスター名フィールドが tsv 、 json 、および yaml 出力形式にありませんでした。

  • 一時停止後の pg_rewind の動作を修正しました(AlexanderKukushkin)

    特定の条件下では、Patroniはメンテナンスモードを終了した後、 pg_rewind を使用して偽のプライマリをクラスターに戻すことができませんでした。

  • Etcdv3実装のバグを修正しました(AlexanderKukushkin)

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

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

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

バージョン3.0.4

New features

  • スタンバイノードのレプリケーションステータスを表示できるようにしました(AlexanderKukushkin)

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

Improvements

  • Etcdv3でのエラーメッセージの改善(AlexanderKukushkin)

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

  • 可能であれば、 patronictl のクォーラム読み取りを使用してください。(AlexanderKukushkin)

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

  • スプリットブレインの構成内での名前の重複を防止しました(MarkPekala)

    Patroniの起動時に、同じ名前のノードがDCSに登録されているかどうかを確認し、そのRESTAPIをクエリしようとします。RESTAPIにアクセスできる場合、Patroniはエラーで終了します。人的ミスから守るのに役立ちます。

  • Patroniの実行中にクラッシュした場合にPostgresを起動すると回復しない(AlexanderKukushkin)

    これにより、回復時間が短縮され、不必要なタイムラインの増加を防ぐことができます。

Bugfixes

  • RESTAPISSL証明書がSIGHUPの受信時にリロードされませんでした(IsraelBarthRubio)

    回帰は3.0.3で導入されました。

  • max_connections などのパラメータの整数GUC検証を修正しました(FeikeSteenbergen)

    パトローニは引用符で囲まれた数値を好みませんでした。回帰は3.0.3で導入されました。

  • synchronous_mode の問題を修正しました。(AlexanderKukushkin)

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

バージョン3.0.3

New features

  • PostgreSQL16beta1との互換性(AlexanderKukushkin)

    GUCのバリデータールールを拡張しました。

  • PostgreSQLGUCのバリデーターを拡張可能にする(IsraelBarthRubio)

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

  • restapi.request_queue_size オプションを追加しました(AndreyZidenkov、AlekseiSukhov)

    PatroniRESTAPIが使用するTCPソケットのリクエストキューサイズを設定します。キューがいっぱいになると、それ以降のリクエストでは「接続が拒否されました」エラーが発生します。デフォルト値は5です。

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

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

  • 停止フックの前に追加(LeDuane)

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

  • カスタムPostgresバイナリ名のサポートを追加しました(IsraelBarthRubio、PolinaBungina)

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

Improvements

  • patroni --validate-config のさまざまな改善(PolinaBungina)

    • bootstrap.initdb をオプションにします。これは新しいクラスターにのみ必要ですが、構成に欠落していると patroni --validate-config がエラーを出しました。

    • postgresql.bin_dir が空の場合、または設定されていない場合でも、エラーが発生しません。代わりに、まずデフォルトのPATHでPostgresバイナリを検索してみてください。

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

  • patronictl のエラーレポートを改善しました(IsraelBarthRubio)

    /n シンボルは、実際の改行シンボルではなく、そのままレンダリングされました。

Bugfixes

  • Citusサポートの問題を修正しました(AlexanderKukushkin)

    昇格したワーカーからコーディネーターへのRESTAPI呼び出しがスイッチオーバー中に失敗すると、指定されたCitusグループが無期限にブロックされたままになります。

  • patronictl`の--dcs-url`オプションで`etcd3`URLを許可します。(IsraelBarthRubio)

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

バージョン3.0.2

警告

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

New features

  • /metrics エンドポイントに同期スタンバイレプリカステータスを追加しました。(ThomasvonDein、AlexanderKukushkin)

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

  • patronictl における PAGER のユーザーフレンドリーな処理(IsraelBarthRubio)

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

  • K8sを再試行可能なHTTPステータスコードを設定可能にしました(AlexanderKukushkin)

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

Improvements

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

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

  • on_reload コールバックが他のコールバックを強制終了することを許可しないようにしました。(AlexanderKukushkin)

    on_start / on_stop / on_role_change は通常、仮想IPの追加/削除に使用され、 on_reload がそれらを妨げるべきではありません。

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

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

Bugfixes

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

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

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

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

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

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

  • すべてのetcdノードが「失敗」した場合のフォールバックとして、構成ファイルにリストされているetcdホストを使用します。(AlexanderKukushkin)

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

バージョン3.0.1

Bugfixes

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

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

バージョン3.0.0

このバージョンでは、 Citus _との統合が追加され、プライマリを降格することなく一時的なDCS停止に耐えることが可能になります。

警告

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

  • RAFTサポートは非​​推奨になりました。メンテナンスには最善を尽くしますが、起こり得る問題については保証も責任も負いません。

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

New features

  • DCSフェイルセーフモード(AlexanderKukushkin、PolinaBungina)

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

  • Citusサポート(AlexanderKukushkin、PolinaBungina、JelteFennema)

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

Improvements

  • 不明だがアクティブなレプリケーションスロットをドロップするときに繰り返し発生するエラーを抑制しました(MichaelBank)

    Patroniは引き続きこれらのログを書き込みますが、それはDEBUGでのみです。

  • HAループごとに監視クエリを1つだけ実行します(AlexanderKukushkin)

    同期レプリケーションが有効な場合はそうではありませんでした。

  • 最新の失敗したデータディレクトリのみを保持する(WilliamAlbertusDembo)

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

  • 同期レプリケーション接続のチェックを改善しました(AlexanderKukushkin)

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

Removed functionality

  • patronictl scaffold を削除(AlexanderKukushkin)

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

バージョン2.1.7

Bugfixes

  • 従来のPythonモジュールとのわずかな非互換性を修正しました(AlexanderKukushkin)

    これらにより、DebianBuster/Ubuntubionic上でPatroniをビルド/実行できなくなりました。

バージョン2.1.6

Improvements

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

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

  • arm64用のサンプルDockerfileを調整(PolinaBungina)

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

Security improvements

  • 非レプリケーション接続に対して search_path=pg_catalog を強制します(AlexanderKukushkin)

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

  • パスワードが pg_stat_statements に記録されないようにしました(FeikeSteenbergen)

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

Bugfixes

  • proxy_address をオプションとして宣言します(DenisLaxalde)

    これは事実上必須ではないオプションであるためです。

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

    RESTAPIリクエストにクライアント証明書が使用されている場合、Ctlの insecure オプションが正しく機能しませんでした。

  • 新しいクラスターがブートストラップされるときに bootstrap.dcs からWatchdog構成を取得します(MattBaker)

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

  • WIN32で実行可能ファイルを検索する際のファイル拡張子の処理方法を修正しました。(MartínMarqués)

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

  • ConsulTTLセットアップを修正しました(AlexanderKukushkin)

    HTTPClientに値を設定するときに ttl/2.0 を使用しましたが、クラスのプロパティで現在の値を2で乗算するのを忘れていました。その結果、ConsulTTLが2倍低下しました。

Removed functionality

  • patronictl configure を削除(PolinaBungina)

    patronictl 構成を個別に作成する必要はなくなりました。

バージョン2.1.5

このバージョンでは、PostgreSQL15との互換性が強化され、Etcdv3のサポートが実稼働対応として宣言されています。Raftのパトローニはベータ版のままです。

New features

  • patroni --validate-config の改善(DenisLaxalde)

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

  • 一時停止中にレプリケーションスロットを削除しないでください。(AlexanderKukushkin)

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

  • エンドポイントを監視するための HEAD リクエストメソッドをサポートしました。(RobertCutajar)

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

  • Windowsでの動作テストのサポート(AlexanderKukushkin)

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

  • postgresql.proxy_address の紹介(AlexanderKukushkin)

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

Stability improvements

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

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

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

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

  • Kubernetesサービスを作成しようとするときに 403 エラーを無視する(NickHudson、PolinaBungina)

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

  • livenessプローブの改善(AlexanderKukushkin)

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

  • スイッチオーバー時に同期ノードのみがロックを取得しようとするようにしました。(AlexanderKukushkin、PolinaBungina)

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

  • ブートストラップの実行中にクローンを作成しないようにします(AntsAasma)

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

  • kazoo-2.9.0との互換性(AlexanderKukushkin)

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

  • ソケットのシャットダウン前にSSL接続を明示的にシャットダウンしました。(AlexanderKukushkin)

    これを行わないと、OpenSSL3.0で unexpected eof while reading エラーが発生します。

  • `prettytable>=2.2.0`との互換性(AlexanderKukushkin)

    内部APIの変更により、クラスター名のヘッダーが間違った行に表示されました。

Bugfixes

  • Etcdリースグラントの期限切れトークンの処理(monsterxx03)

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

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

    これは以前のリリースで導入されましたが、実際には機能しませんでした。

  • データディレクトリストレージが消失した場合の処理​​(AlexanderKukushkin)

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

  • ユーザーのバックエンドが閉じるのを待機するときに master_stop_timeout を適用しました。(AlexanderKukushkin)

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

  • *:<port> を postgresql.listen として受け入れます(DenisLaxalde)

    patroni --validate-config は無効であると訴えていました。

  • Raftのタイムアウトを修正(AlexanderKukushkin)

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

  • トークンが変更された場合にConsulサービスを強制的に更新します(JohnA.Lotoski)

    そうしないと、「呼び出し実行中のrpcエラー:呼び出し実行中のrpcエラー:ACLが見つかりません」というエラーが発生します。

バージョン2.1.4

New features

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

    postgresql.conf`をデータディレクトリの外に保持するPostgresセットアップ(Ubuntu/Debianパッケージなど)では、 ``pg_rewind --restore-target-wal` は restore_command の値を把握できません。

  • Consulサービスチェックで TLSServerName の設定を許可しました(MichaelGmelin)

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

  • Watchdogに ppc64le サポートを追加しました。(Jean-MichelScheiwiler)

    また、一部の非x86プラットフォームでのWatchdogのサポートが修正されました。

  • aws.pyコールバックを boto から boto3 に切り替えました(AlexanderKukushkin)

.xは2018年以降廃止され、Python3.9で失敗します。

  • K8s上のサービスアカウントトークンを定期的に更新します(HaitaoLi)

    Kubernetesv1.21以降、サービスアカウントトークンは1時間で期限切れになります。

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

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

Stability improvements

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

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

  • PostgreSQLv12+のリカバリ設定パラメータの特別な処理(AlexanderKukushkin)

    レプリカとして起動している間、Patroniは pg_settings からクエリするのではなく現在のパラメータ値をキャッシュすることで、リーダーアドレスが変更された場合に postgresql.conf を更新して再起動/再ロードできる必要があります。

  • postgresql.listen パラメータでのIPv6アドレスの処理が改善されました(AlexanderKukushkin)

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

  • PostgreSQLv10以前でのみ相違チェックを実行する場合は replication 認証情報を使用するようにしました。(AlexanderKukushkin)

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

Bugfixes

  • dateutil.parser のインポートが欠落していたのを修正しました(WesleyMendes)

    テストが失敗したのは、他のモジュールからもインポートされていたためだけではありません。

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

    場合によっては、Patroniがそれを数値として渡そうとしていました。

  • 失敗した pg_rewind 試行の処理を改善しました(AlexanderKukushkin)

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

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

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

  • K8sAPIウォッチャーによる同時実行の問題の処理(AlexanderKukushkin)

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

バージョン2.1.3

New features

  • patronictl の暗号化されたTLSキーのサポートを追加しました。(AlexanderKukushkin)

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

  • /metricsエンドポイントにメトリクスを追加しました。(AlexandrePereira)

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

  • スタンバイクラスタ構成で複数ホストを指定できるようにしました。(MichaelBank)

    スタンバイクラスターがPatroniクラスターからレプリケートされている場合は、PostgreSQLv10以降の libpq で利用できるクライアント側のフェイルオーバーを利用するとよいでしょう。つまり、スタンバイリーダー上の primary_conninfo と、接続文字列内の pg_rewind 設定 target_session_attrs=read-write です。 pgpass ファイルは複数行(ホストごとに1行)で生成され、プライマリクラスターノードで CHECKPOINT を呼び出す代わりに、スタンバイクラスターは pg_control が更新されるのを待ちます。

Stability improvements

  • レガシー psycopg2 との互換性(AlexanderKukushkin)

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

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

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

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

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

Bugfixes

  • スタンバイリーダーブートストラップのバグを修正しました(AlexanderKukushkin)

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

  • カスケードスタンバイへのフェイルオーバーに関するバグを修正しました。(AlexanderKukushkin)

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

  • Postgres構成バリデーターの小さな問題を修正しました(AlexanderKukushkin)

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

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

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

  • RESTAPI証明書の置換時の「ポートが使用中」エラーを修正しました(AntsAasma)

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

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

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

  • 「属性エラー:属性'リーダー'がありません」例外を修正しました(HrvojeMilković)

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

  • 発散タイムラインチェックのバグを修正しました。(AlexanderKukushkin)

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

バージョン2.1.2

New features

  • psycopg>=3.0 との互換性(AlexanderKukushkin)

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

  • dcs_last_seen フィールドをRESTAPIに追加しました(MichaelBank)

    このフィールドには、クラスタメンバーが最後にDCSと正常に通信した時刻(UNIXエポックとして)が記録されます。これは、ネットワークパーティションの特定や分析に役立ちます。

  • pg_controldata が「シャットダウン」を報告したら、リーダーのロックを解除します。(AlexanderKukushkin)

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

  • sslcrldir 接続パラメータのサポートを追加しました(KostiantynNemchenko)

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

  • ZookeeperでZNodeのACL設定を許可しました(AlwynDavis)

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

Stability improvements

  • 次の回復の試みを次のHAループまで遅らせます(AlexanderKukushkin)

    たとえば、ディスク容量不足が原因でPostgresがクラッシュし、そのために起動に失敗した場合、Patroniはそれを回復しようとするあまりにも熱心にログを溢れさせます。

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

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

  • 「私はです」ステータスメッセージを改善しました(MichaelBank)

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

  • wal_keep_size に変換するときにint wal_keep_segments にキャストします。(JorgeSolórzano)

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

  • 同期レプリケーションが有効な場合、同期ノードのみにスイッチオーバーを許可します。(AlexanderKukushkin)

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

  • Postgresが遅い場合のフォールバックとしてキャッシュされたロールを使用する(AlexanderKukushkin)

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

  • メンバーZNodeの不必要な更新を避ける(AlexanderKukushkin)

    メンバーデータの値が変更されていない場合、更新は行われません。

  • プロモート後のチェックポイントを最適化(AlexanderKukushkin)

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

  • 同期ノードを選択するときに nofailover のないメンバーを優先するようになりました。(AlexanderKukushkin)

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

  • etcdマシンのキャッシュから重複したホストを削除しました(MichaelBank)

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

Bugfixes

  • スロット管理中に一時レプリケーションスロットをスキップします(AlexanderKukushkin)

    v10以降、 pg_basebackup はWALストリーミング用の一時的なレプリケーションスロットを作成しますが、スロット名が不明に見えるため、Patroniはそれを削除しようとしていました。これを修正するために、 pg_stat_replication_slots ビューをクエリするときにすべての一時スロットをスキップします。

  • pg_replication_slot_advance() がタイムアウトしないようにしました(AlexanderKukushkin)

    この場合、Patroniはデフォルトの statement_timeout を使用していましたが、一度呼び出しが失敗すると回復できない可能性が非常に高く、結果として pg_wal と pg_catalog のサイズが増大してしまいます。

  • /status は降格時に更新されませんでした(AlexanderKukushkin)

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

  • 降格時のDCS例外の処理(AlexanderKukushkin)

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

  • 一部のケースでは use_unix_socket_repl が機能しませんでした(AlexanderKukushkin)

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

  • PatroniRESTAPIに関するいくつかの問題を修正しました(AlexanderKukushkin)

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

  • 新しく昇格したノードの回復が完了するまで待ってから、巻き戻しを決定します。(AlexanderKukushkin)

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

  • 巻き戻しを決定する際に、履歴ファイル内の欠落しているタイムラインを処理します。(AlexanderKukushkin)

    現在のレプリカタイムラインがプライマリの履歴ファイルにない場合、レプリカは巻き戻しが必要ないと誤って想定しています。

バージョン2.1.1

New features

  • ETCDSRV名サフィックスのサポート(DavidPavlicek)

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

  • 新しいリーダーとともに歴史を豊かにする(huiyalin525)

    新しい列が patronictl history 出力に追加されます。

  • CAバンドルをクラスター内Kubernetes構成用に構成可能にしました(AronParsons)

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

  • Consulサービスとしての動的な登録/登録解除とタグの変更をサポートしました(TommyLi)

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

Bugfixes

  • RESTAPIの不必要なリロードを回避します。(AlexanderKukushkin)

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

  • etcd.use_proxies が設定されている場合、クラスターメンバーを解決しません。(AlexanderKukushkin)

    Patroniは起動時にメンバーのリストをクエリしてEtcdクラスターの健全性をチェックします。それに加えて、ホスト名を解決しようとしましたが、これはプロキシ経由でEtcdを操作する場合には必要なく、不要な警告を引き起こしていました。

  • pg_stat_replication 内のNULL値を持つ行をスキップします。(AlexanderKukushkin)

    state = 'streaming' の場合でも、 pg_stat_replication ビューの replay_lsn 、 flush_lsn 、または write_lsn フィールドにNULL値が含まれる可能性があるようです。

バージョン2.1.0

このバージョンでは、PostgreSQLv14との互換性が追加され、フェイルオーバー/スイッチオーバーを生き延びるための論理レプリケーションスロットが作成され、RESTAPIのホワイトリストのサポートが実装され、ログの数もハートビートごとに1行に削減されます。

New features

  • PostgreSQLv14との互換性(AlexanderKukushkin)

    Patroni自体が「一時停止」モードになっていない場合は、WAL再生の一時停止を解除します。プライマリ上の max_connections などの特定のパラメータの変更により、「一時停止」される可能性があります。

  • フェイルオーバー論理スロット(AlexanderKukushkin)

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

  • PatroniRESTAPIのホワイトリストを実装しました(AlexanderKukushkin)

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

  • UNIXソケット経由のレプリケーション接続のサポートを追加しました(MohamadEl-Rifai)

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

  • ユーザー定義タグのヘルスチェック(ArmanJafariTehrani)

    predefined tags: とともに、 patronictl list 出力およびRESTAPIで表示されるカスタムタグを任意の数だけ指定できます。今後、ヘルスチェックでカスタムタグを使用できるようになります。

  • Prometheus /metrics エンドポイントを追加しました(MarkMercado、MichaelBank)

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

  • Patroniログのおしゃべり性の減少(AlexanderKukushkin)

    すべてが正常に完了すると、HAループの実行ごとに1行だけが書き込まれます。

Breaking changes

  • 古い permanent logical replication slots 機能はPostgreSQLv10以前では動作しなくなります。(AlexanderKukushkin)

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

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

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

Improvements in Raft support

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

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

  • Raft実装におけるDNSの問題の処理(AlexanderKukushkin)

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

Stability improvements

  • psycopg2-2.9+ との互換性(AlexanderKukushkin)

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

  • Zookeeperで過剰なHAループの実行を修正しました(AlexanderKukushkin)

    メンバーZNodeの更新により連鎖反応が発生し、HAループが複数回連続して実行されるようになりました。

  • ディスク上のRESTAPI証明書が変更された場合はリロードします(MichaelTodorovic)

    RESTAPI証明書ファイルが適切に更新された場合、Patroniはリロードを実行しませんでした。

  • Kerberos認証が使用されている場合はpgpassディレクトリを作成しないでください。(KostiantynNemchenko)

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

  • カスタムブートストラップに関する小さな問題を修正しました(AlexanderKukushkin)

    PITRを実行するときのみ hot_standby=off でPostgresを起動し、PITRの完了後に再起動します。

Bugfixes

  • kazoo-2.7+ との互換性(AlexanderKukushkin)

    Patroniは再試行を独自に処理するため、使用可能な接続がない場合はZookeeperクラスターへのリクエストが直ちに破棄されるという kazoo の古い動作に依存しています。

  • プロキシ経由で接続していることがわかっている場合に、Etcdv3クラスターのバージョンを明示的に要求します。(AlexanderKukushkin)

    PatroniはgPRCゲートウェイ経由でEtcdv3クラスターと連携しており、クラスターのバージョンに応じて異なるエンドポイント( /v3 、 /v3beta 、または /v3alpha )を使用する必要があります。このバージョンはクラスタートポロジと一緒にのみ解決されましたが、プロキシ経由で接続する場合は後者が実行されなかったためです。

バージョン2.0.2

New features

  • 外部で管理されているレプリケーションスロットを無視する機能(JamesColeman)

    Patroniは、未知のレプリケーションスロットを削除しようとしていますが、レプリケーションスロットを外部で管理する必要がある場合は確かにあります。今後は、削除してはならないスロットを設定できるようになります。

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

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

  • RESTAPIの暗号化されたTLSキーのサポートを追加しました。(JonathanS.Katz)

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

  • RESTAPI認証資格情報の定時比較(AlexBrasetvik)

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

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

    同期ノード上のレプリケーションラグが設定されたしきい値を超え始めた場合、そのノードは非同期に降格されるか、他のノードに置き換えられるか、あるいはその両方になる可能性があります。動作は maximum_lag_on_syncnode で制御されます。

Stability improvements

  • カスタムブートストラップを実行するときにpostgresを hot_standby = off で開始します(IgorYanchenko)

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

  • 必要なWatchdogが正常でない場合にユーザーに警告します。(NicolasTauvin)

    Watchdogデバイスが書き込み可能でない場合、または必須モードで見つからない場合、メンバーを昇格することはできません。この構成ミスを検索する場所をユーザーに示す警告を追加しました。

  • シングルユーザーモードリカバリの冗長性の向上(AlexanderKukushkin)

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

  • python-consul2 モジュールとの互換性を追加しました(AlexanderKukushkin、WilfriedRoset)

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

  • patronictl を実行する場合は bypass_api_service を使用しないでください。(AlexanderKukushkin)

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

  • raft.data_dir が存在しない場合は作成するか、書き込み可能であることを確認してください。(MarkMercado)

    使いやすさと使いやすさを向上させます。

Bugfixes

  • 一時停止中のリーダーロックを失った場合、再起動や昇格を中断しないでください(AlexanderKukushkin)

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

  • RESTAPIの shutdown_request() に関する問題を修正しました(NicolasLimage)

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

  • Zookeeper使用時のスリープ時間の問題を修正しました(AlexanderKukushkin)

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

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

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

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

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

  • スタンバイクラスターのpg_rewindの問題を修正しました(AlexanderKukushkin)

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

  • Etcdv3による認証が明示的に失敗した場合にのみ終了します。(AlexanderKukushkin)

    起動時に、PatroniはEtcdクラスタートポロジの検出を実行し、必要に応じて認証を行います。etcdサーバーの1つがアクセスできず、Patroniがこのサーバーで認証を実行しようとして、次のノードで再試行せずに失敗することが発生する可能性があります。

  • 空のリストを返すpsutilcmdline()でケースを処理します(AlexanderKukushkin)

    ゾンビプロセスは依然としてポストマスターの子ですが、cmdline()を持っていません。

  • PATRONI_KUBERNETES_USE_ENDPOINTS 環境変数をブール値として扱います。(AlexanderKukushkin)

    そうしないと、環境経由で kubernetes.use_endpoints を無効にすることができなくなりました。

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

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

バージョン2.0.1

New features

  • less が利用できない場合は、 patronictl edit-config のポケットベルとして more を使用します。(PavelGolub)

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

  • raft bind_addr および password のサポートを追加しました。(AlexanderKukushkin)

    raft.bind_addr は、NATの背後で実行する場合に便利です。 raft.password はトラフィック暗号化を有効にします( cryptography モジュールが必要です)。

  • sslpassword 接続パラメータのサポートを追加しました(KostiantynNemchenko)

    接続パラメータはPostgreSQL13で導入されました。

Stability improvements

  • 一時停止時の動作を変更しました(AlexanderKukushkin)

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

    2. Patroniは、一時停止中にsysidの不一致が発生しても終了せず、警告をログに記録するだけです。

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

  • クラッシュリカバリの実行時に master_start_timeout を適用しました。(AlexanderKukushkin)

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

  • urllib3 の要件から secure の追加要素を削除しました。(AlexanderKukushkin)

    これを追加した唯一の理由は、Python2.7の ipaddress 依存関係でした。

Bugfixes

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

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

  • RAFT使用時の patronictl のハングを修正しました。(AlexanderKukushkin)

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

  • get_guc_value() のバグを修正しました(AlexanderKukushkin)

    PatroniはPostgreSQL12で restore_command の値を取得できなかったため、 pg_rewind の欠落しているWALを取得できませんでした。

バージョン2.0.0

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

PostgreSQL 13 support

  • PostgreSQL13以降で standby_leader に昇格するときに on_reload を起動しないようにしました。(AlexanderKukushkin)

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

  • gssencmode および channel_binding 接続パラメータのサポートを追加しました。(AlexanderKukushkin)

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

  • wal_keep_segments から wal_keep_size への名前変更ハンドル(AlexanderKukushkin)

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

  • 可能であれば、13では pg_rewind を --restore-target-wal とともに使用してください。(AlexanderKukushkin)

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

New features

  • [ベータ]純粋なRAFTにPatroniのサポートを実装しました(AlexanderKukushkin)

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

  • [ベータ]gPRCゲートウェイ経由でEtcdv3プロトコルのサポートを実装しました(AlexanderKukushkin)

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

  • 複数の同期スタンバイのサポート(KrishnaSarabu)

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

  • pre_promote スクリプトを呼び出す可能性を追加しました(SergeyDudoladov)

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

  • 構成ディレクトリのサポートを追加しました(FlorisvanNee)

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

  • PostgreSQLパラメータの高度な検証(AlexanderKukushkin)

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

  • プロモート後の強制チェックポイントが完了したらメインスレッドを起動するようにしました。(AlexanderKukushkin)

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

  • 9.6以降での pg_stat_wal_recevier ビューの使用(AlexanderKukushkin)

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

  • Patroni設定ファイルでのIPv6アドレスの処理を改善しました(MateuszKowalski)

    IPv6アドレスは角括弧で囲まれることになっていますが、Patroniはプレーンなアドレスを期待していました。現在は両方の形式がサポートされています。

  • Consul service_tags 設定パラメータを追加しました(RobertEdström)

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

  • ZookeeperのSSLサポートを実装しました(KostiantynNemchenko)

    kazoo>=2.6.0 が必要です。

  • カスタムブートストラップメソッドの no_params オプションを実装しました。(KostiantynNemchenko)

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

  • initの失敗後にWALとテーブルスペースを移動する(FeikeSteenbergen)

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

Improved in pg_rewind support

  • タイムラインの発散チェックの改善(AlexanderKukushkin)

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

  • pg_rewind がそれについて文句を言ったら、不足しているWALを取得してみます。(AlexanderKukushkin)

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

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

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

  • 履歴ログ出力を短縮して美しくしました(AlexanderKukushkin)

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

Improvements on K8s

  • kubernetes Pythonモジュールを削除しました(AlexanderKukushkin)

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

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

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

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

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

  • K8のサブセットアドレスに references と nodename を設定しました。(AlexanderKukushkin)

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

  • update_leader() で起こり得る競合状態を修正しました。(AlexanderKukushkin)

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

  • 存在しない設定へのパッチ適用を明示的に禁止しました(AlexanderKukushkin)

    kubernetes 以外のDCSでは、 cluster.config が None であるためPATCH呼び出しは例外で失敗しますが、Kubernetesでは構成アノテーションが問題なく作成され、ブートストラップ終了後にブートストラップ構成を書き込むことができませんでした。

  • pause のバグを修正しました。(AlexanderKukushkin)

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

Improvements in REST API

  • ワーカースレッドが開始されるまでTLSハンドシェイクを延期します。(AlexanderKukushkin、BenHarris)

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

  • RESTAPIでクライアント証明書から独立して basic-auth を確認しました。(AlexanderKukushkin)

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

  • OPTIONS リクエストのHTTPヘッダーの後に CRLF を二重に書き込みます(SergeyBurladyan)

    HAProxyは1つの CRLF で問題ありませんでしたが、Consulヘルスチェックは接続の切断と予期しないEOFについて不平を言いました。

  • GET /cluster が動物園飼育員(AlexanderKukushkin)の古いメンバー情報を表示していました

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

  • スタンバイクラスターのヘルスチェックを修正しました(AlexanderKukushkin)

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

  • DELETE /switchover を実装しました(AlexanderKukushkin)

    RESTAPI呼び出しにより、スケジュールされたスイッチオーバーが削除されます。

  • /readiness および /liveness エンドポイントを作成しました(AlexanderKukushkin)

    これらは、K8sサービスがラベルセレクターとともに使用されている場合に、サブセットアドレスから「異常な」ポッドを排除するのに役立つ可能性があります。

  • GET /replica および GET /async RESTAPIヘルスチェックの強化(KrishnaSarabu、AlexanderKukushkin)

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

  • RESTAPIレスポンスにユーザー定義のHT​​TPヘッダーのサポートを追加しました(YogeshSharma)

    この機能は、リクエストがブラウザから行われる場合に役立つ可能性があります。

Improvements in patronictl

  • patronictl pause に存在しないリーダーに電話をかけないでください。(AlexanderKukushkin)

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

  • メンバー conn_url が欠落している場合の処理​​(AlexanderKukushkin)

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

  • ASCIIクラスタートポロジーを印刷する機能を追加しました(MaximFedotov、AlexanderKukushkin)

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

  • patronictl flush switchover の実装(AlexanderKukushkin)

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

Bugfixes

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

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

  • Consulの例外処理を改善しました(AlexanderKukushkin)

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

  • post_init スクリプトに synchronous_commit=local を適用しました(AlexanderKukushkin)

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

  • Consulプールマネージャーの maxsize を増加(ponvenkates)

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

  • PatroniがPostgresが実行中であると誤って報告していました(AlexanderKukushkin)

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

  • 欠損値または空の値の代わりに * を pgpass に入れました。(AlexanderKukushkin)

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

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

    Patroniは、名前に「-」などの特殊文字が含まれている場合(例:/"abc-us-1/")に、リーダーノードの休止スロット( slots が定義されている場合)を作成しているように見えました。

  • カスタムブートストラップで存在しない pg_hba.conf を削除しないようにしました。(KrishnaSarabu)

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

バージョン1.6.5

New features

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

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

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

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

  • ConfigValidatorの初稿(IgorYanchenko)

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

  • タイムライン履歴の最大長を設定できるようになりました(KrishnaSarabu)

    Patroniは、フェイルオーバー/スイッチオーバーの履歴をDCSの /history キーに書き込みます。時間の経過とともにこのキーのサイズは大きくなりますが、ほとんどの場合、重要なのは最後の数行だけです。 max_timelines_history パラメータを使用すると、DCSに保持するタイムライン履歴アイテムの最大数を指定できます。

  • Kazoo2.7.0の互換性(DanyalProut)

    Kazooの一部の非公開メソッドは署名を変更しましたが、Patroniはそれらに依存していました。

Improvements in patronictl

  • メンバータグを表示(コスティアンティン・ネムチェンコ、アレクサンダー・ククシキン)

    タグはノードごとに個別に構成されており、タグの概要を簡単に把握する方法はありませんでした。

  • メンバーの成果を向上させる(AlexanderKukushkin)

    冗長なクラスター名は各行に表示されなくなり、テーブルのヘッダーにのみ表示されます。

$ 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 |                     |
+-------------+----------------+--------+---------+----+-----------+---------------------+
  • 設定ファイルが明示的に指定されているが見つからない場合は失敗します。(KaarelMoppel)

    以前は、 patronictl は DEBUG メッセージのみを報告していました。

  • K8sポッドが初期化されていないとpatronictlが壊れる問題を解決しました。(AlexanderKukushkin)

    Patroniは、K8の特定のポッドアノテーションに依存しています。Patroniポッドの1つが停止または起動しているときは、有効なアノテーションがまだなく、 patronictl が例外で失敗していました。

Stability improvements

  • K8sAPIサーバーへのLIST呼び出しが失敗した場合に1秒のバックオフを適用しました。(AlexanderKukushkin)

    これは主にログの氾濫を避けるために必要ですが、メインスレッドの枯渇を防ぐのにも役立ちます。

  • retry-after HTTPヘッダーがK8sAPIから返された場合に再試行します。(AlexanderKukushkin)

    K8sAPIサーバーがリクエストで圧倒されると、再試行を要求されることがあります。

  • KUBERNETES_ 環境をポストマスターからスクラブしました(FeikeSteenbergen)

    KUBERNETES_ 環境変数はPostgreSQLには必要ありませんが、環境変数をポストマスターに公開すると、バックエンドや通常のデータベースユーザー(pl/perlなどを使用)にも公開されます。

  • 再初期化時にテーブルスペースをクリーンアップします(KrishnaSarabu)

    再初期化中に、Patroniは PGDATA のみを削除し、ユーザー定義のテーブルスペースディレクトリを残していました。これにより、Patroniが再初期化でループする原因となります。この問題に対する以前の回避策は、 PGDATA スクリプトを実装することでした。

  • プロモートが行われた後に CHECKPOINT を明示的に実行しました。(AlexanderKukushkin)

    これは、新しいプライマリが pg_rewind で使用可能になるまでの時間を短縮するのに役立ちます。

  • Etcdメンバーのスマートなリフレッシュ(AlexanderKukushkin)

    PatroniがEtcdクラスターのすべてのメンバーに対するリクエストの実行に失敗した場合、Patroniは次回再試行する前に、 A または SRV レコードでIP/ホストの変更を再チェックします。

  • pg_controldata からの欠損値をスキップします(FeikeSteenbergen)

    PGD​​ATAと一致しないバージョンのバイナリを使用しようとすると、値が欠落します。PatroniはとにかくPostgresを起動しようとしますが、Postgresはメジャーバージョンが一致しないとエラーを出して異常終了します。

Bugfixes

  • 必要に応じてConsulのSSL検証を無効にする(JulienRiou)

    特定のバージョンの urllib3 以降では、SSL検証を効果的に無効にするには、 cert_reqs を明示的に ssl.CERT_NONE に設定する必要があります。

  • HAループのサイクルごとにレプリケーション接続を開かないようにします。(AlexanderKukushkin)

    回帰は1.6.4で導入されました。

  • 失敗したプライマリで on_role_change コールバックを呼び出します(AlexanderKukushkin)

    場合によっては、仮想IPが古いプライマリに接続されたままになる可能性があります。回帰は1.4.5で導入されました。

  • pg_rewindが成功した後にpostgresが開始された場合に巻き戻し状態をリセットしました。(AlexanderKukushkin)

    このバグの結果、Patroniは一時停止モードでpostgresを手動でシャットダウンして起動していました。

  • recovery.conf をチェックするときに recovery_min_apply_delay を ms に変換します

    recovery_min_apply_delay が12より古いPostgreSQLで構成されている場合、Patroniはレプリカを無期限に再起動していました。

  • PyInstallerの互換性(AlexanderKukushkin)

    PyInstallerは、Pythonアプリケーションをスタンドアロンの実行可能ファイルにフリーズ(パッケージ化)します。 multiprocessing の fork メソッドではなく spawn メソッドに切り替えたときに、互換性が失われていました。

バージョン1.6.4

New features

  • patronictl reinit の --wait オプションを実装しました(IgorYanchenko)

    --wait オプションが使用されている場合、Patronictlは reinit が完了するまで待機します。

  • Windowsサポートのさらなる改善(IgorYanchenko、AlexanderKukushkin)

    1. 統合テストに使用されるすべてのシェルスクリプトはPythonで書き直されます。

    2. pg_ctl kill は、非posixシステムでpostgresを停止するために使用されます。

    3. UNIXドメインソケットを使用しないでください

Stability improvements

  • unix_socket_directories と stats_temp_directory が存在することを確認してください(IgorYanchenko)

    PatroniとPostgresの起動時に、 unix_socket_directories と stats_temp_directory が存在することを確認するか、それらを作成してみます。作成に失敗するとPatroniは終了します。

  • postgresql.pgpass がPatroniが書き込みアクセス権を持っている場所にあることを確認してください。(IgorYanchenko)

    書き込みアクセスがない場合、Patroniは例外で終了します。

  • Consul serfHealth チェックをデフォルトで無効にしました(KostiantynNemchenko)

    ネットワークに小さな問題が発生した場合でも、 serfHealth に障害が発生すると、ノードに関連付けられたすべてのセッションが無効になります。したがって、リーダーキーは ttl よりもはるかに早く失われ、レプリカの不要な再起動が発生し、場合によってはプライマリが降格されます。

  • K8sAPIへの接続用にtcpキープアライブを構成しました(AlexanderKukushkin)

    TTL秒後にソケットから何も取得されない場合、ソケットは停止していると見なすことができます。

  • ユーザー作成時にパスワードを記録しないようにします。(AlexanderKukushkin)

    パスワードが拒否された場合、またはログ記録が冗長に構成されているか、まったく構成されていない場合、パスワードがpostgresログに書き込まれる可能性があります。これを回避するために、Patroniはユーザーの作成/更新を試行する前に log_statement 、 log_min_duration_statement 、および log_min_error_statement を安全な値に変更します。

Bugfixes

  • カスケードレプリカで standby_cluster 設定の restore_command を使用します。(AlexanderKukushkin)

    standby_leader は、この機能が存在する最初からすでに実行していました。レプリカで同じことを行わないと、スタンバイリーダーに追いつけなくなる可能性があります。

  • スタンバイクラスターによって報告される更新タイムライン(AlexanderKukushkin)

    タイムライン切り替えの場合、スタンバイクラスターはプライマリから正しくレプリケートしていましたが、 patronictl は古いタイムラインを報告していました。

  • 特定の回復パラメータをcustom_confで定義できるようにしました。(AlexanderKukushkin)

    レプリカでリカバリパラメータの検証を行うとき、Patroniは archive_cleanup_command 、 promote_trigger_file 、 recovery_end_command 、 recovery_min_apply_delay 、および restore_command がpatroni構成ではなく postgresql.auto.conf または postgresql.conf 以外のファイルで定義されている場合、それらをスキップします。

  • 名前にピリオドが含まれるpostgresqlパラメータの処理を改善しました。(AlexanderKukushkin)

    このようなパラメーターは、単位が必ずしも文字列であるとは限らない拡張機能によって定義できます。値を変更すると、再起動が必要になる場合があります(例: pg_stat_statements.max )。

  • シャットダウン時の例外処理を改善しました(AlexanderKukushkin)

    シャットダウン中に、PatroniはDCS内のステータスを更新しようとします。DCSにアクセスできない場合は、例外が発生する可能性があります。例外処理が不足しているため、ロガースレッドが停止できませんでした。

バージョン1.6.3

Bugfixes

  • pg_rewind の実行時にパスワードを公開しないでください。(AlexanderKukushkin)

    #1301 _にバグが導入されました

  • postgresql.authentication で指定された接続パラメータを pg_basebackup に適用し、カスタムレプリカ作成メソッドを適用しました。(AlexanderKukushkin)

    URLのような接続文字列に依存していたため、パラメーターは適用されませんでした。

バージョン1.6.2

New features

  • patroni --version を実装しました(IgorYanchenko)

    Patroniの現在のバージョンを出力して終了します。

  • すべてのhttpリクエストに user-agent httpヘッダーを設定しました(AlexanderKukushkin)

    Patroniは、httpプロトコルを介してConsul、Etcd、およびKubernetesAPIと通信します。特別に作成された user-agent (例: Patroni/1.6.2 Python/3.6.8 Linux )があると、デバッグや監視に役立つ場合があります。

  • 例外トレースバックのログレベルを設定できるようにしました。(IgorYanchenko)

    log.traceback_level=DEBUG を設定すると、トレースバックは log.level=DEBUG の場合にのみ表示されます。デフォルトの動作は変わりません。

Stability improvements

  • 設定ファイルで必要なモジュールを検索するときに、すべてのDCSモジュールをインポートしないようにしました。(AlexanderKukushkin)

    たとえば、必要な場合のみEtcd、Consul、およびKubernetesのモジュールをインポートする必要はありません。ZooKeeper。これにより、メモリ使用量が削減され、INFOメッセージ Failed to import smth の問題が解決されます。

  • 明示的な要件からPython requests モジュールを削除しました(AlexanderKukushkin)

    これは重要なことには使用されませんでしたが、 urllib3 の新しいバージョンがリリースされると多くの問題を引き起こしました。

  • YAML配列ではなくカンマ区切り文字列として記述された etcd.hosts の処理を​​改善しました。(IgorYanchenko)

    以前は、 host1:port1, host2:port2 (カンマの後のスペース文字)形式で書き込むと失敗していました。

Usability improvements

  • patronictl の空のリストからメンバーを選択することをユーザーに強制しないでください。(IgorYanchenko)

    ユーザーが間違ったクラスター名を指定した場合、空のリストからメンバーを選択するように求めるのではなく、例外が発生します。

  • RESTAPIがバインドできない場合のエラーメッセージをよりわかりやすくしました。(IgorYanchenko)

    経験の浅いユーザーにとって、Pythonスタックトレースから何が問題なのかを特定するのは難しいかもしれません。

Bugfixes

  • wal_buffers の計算を修正しました。(AlexanderKukushkin)

    PostgreSQL11では、基本単位が8KBブロックからバイトに変更されました。

  • PostgreSQL10以降でのみ primary_conninfo で passfile を使用する(AlexanderKukushkin)

    最新バージョンの libpq がインストールされていない限り、古いバージョンでは passfile が動作する保証はありません。

バージョン1.6.1

New features

  • PATRONICTL_CONFIG_FILE 環境変数(msvechla)を追加しました

    これにより、環境から patronictl の --config-file 引数を構成できます。

  • patronictl history の実装(AlexanderKukushkin)

    フェイルオーバー/スイッチオーバーの履歴が表示されます。

  • pg_rewind を実行するときに PGOPTIONS に -c statement_timeout=0 を渡します(AlexanderKukushkin)

    これは、サーバー上の statement_timeout が小さな値に設定され、pg_rewindによって実行されたステートメントの1つがキャンセルされた場合から保護します。

  • PostgreSQL構成でより低い値を許可する(Soulou)

    Patroniでは、一部のPostgreSQL構成パラメータをハードコードされた値よりも小さく設定することを許可していませんでした。許容される最小値が小さくなり、デフォルト値は変更されていません。

  • 証明書ベースの認証を許可する(JonathanS.Katz)

    この機能により、スーパーユーザー、レプリケーション、リワインドアカウントの証明書ベースの認証が有効になり、ユーザーは接続する sslmode を指定できるようになります。

  • primary_conninfo のパスワードの代わりに passfile を使用します。(AlexanderKukushkin)

    postgresql.confでの 600 権限の設定を回避できます。

  • 設定の変更に関係なく pg_ctl reload を実行します。(AlexanderKukushkin)

    一部の構成ファイルがPatroniによって制御されていない可能性があります。誰かがRESTAPI経由で、またはPatroniプロセスにSIGHUPを送信してリロードを実行している場合、通常、Postgresもリロードされることが期待されます。以前は、Patroni構成の postgresql セクションに変更がない場合にはこの問題は発生しませんでした。

  • primary_conninfo だけでなく、すべての回復パラメータを比較します。(AlexanderKukushkin)

    以前の check_recovery_conf() メソッドは、 primary_conninfo が変更されたかどうかのみをチェックし、他のすべての回復パラメーターを考慮していませんでした。

  • 再起動せずにいくつかの回復パラメータを適用できるようにしました。(AlexanderKukushkin)

    PostgreSQL12以降、リカバリパラメータ archive_cleanup_command 、 promote_trigger_file 、 recovery_end_command 、および recovery_min_apply_delay は再起動せずに変更できます。将来のPostgresリリースでは、このリストが拡張され、Patroniが自動的にサポートする予定です。

  • use_slots をオンラインで変更できるようにしました。(AlexanderKukushkin)

    以前は、Patroniを再起動してスロットを手動で削除する必要がありました。

  • Postgresの起動時に PATRONI_ プレフィックスが付いた環境変数のみを削除する(CodyCoons)

    これにより、さまざまな外部データラッパーの実行に関する多くの問題が解決されます。

Stability improvements

  • K8sAPIを使用する場合はLIST+WATCHを使用してください(AlexanderKukushkin)

    これにより、オブジェクトの変更(ポッド、エンドポイント/構成マップ)を効率的に受信できるようになり、K8マスターノードのストレスが軽減されます。

  • ブートストラップ中にPGDATAが空でない場合のワークフローを改善しました。(AlexanderKukushkin)

    initdb ソースコードによると、PGDATAに lost+found と .dotfiles しかない場合、PGDATAは空であるとみなされる可能性があります。今、パトローニも同じことをしています。 PGDATA がたまたま空ではなく、同時に pg_controldata の観点から有効でない場合、Patroniはエラーを出して終了します。

  • すべてのHAループで高価な os.listdir() を呼び出すのを避けてください。(AlexanderKukushkin)

    システムがIOストレスにさらされている場合、 os.listdir() の実行に数秒(または数分)かかる可能性があり、PatroniのHAループに悪影響を及ぼします。これにより、更新がないためにリーダーキーがDCSから消えてしまう可能性もあります。PGD​​ATAが空でないことを確認する、より適切で安価な方法があります。ここで、PGDATAに global/pg_control ファイルが存在するかどうかを確認します。

  • ログインフラストラクチャのいくつかの改善(AlexanderKukushkin)

    以前は、ログスレッドが daemon スレッドであったため、シャットダウン時に最後の数行のログが失われる可能性がありました。

  • Python3.4以降で spawn マルチプロセッシング開始メソッドを使用する(MaciejKowalczyk)

    Pythonではスレッド処理とマルチプロセッシングがうまく混合しないことが知られています。デフォルトのメソッド fork から spawn に切り替えることが推奨される回避策です。そうしないと、Postgresが実際には稼働しているにもかかわらず、Postmasterの開始プロセスがハングし、Patroniが無期限に INFO: restarting after failure in progress を報告する可能性があります。

Improvements in REST API

  • RESTAPIでクライアント証明書を確認できるようにしました。(AlexanderKukushkin)

    verify_client が required に設定されている場合、PatroniはすべてのRESTAPI呼び出しのクライアント証明書をチェックします。 optional に設定すると、安全でないすべてのRESTAPIエンドポイントについてクライアント証明書がチェックされます。

  • Postgresが実行されていない場合は、 GET /replica ヘルスチェックリクエストに対して応答コード503を返します。(AlexanderAnikin)

    Postgresは、クライアント接続の受け入れを開始するまでの回復にかなりの時間を費やす可能性があります。

  • /history および /cluster エンドポイントを実装します(AlexanderKukushkin)

    /history エンドポイントは、DCSの history キーの内容を示します。 /cluster エンドポイントには、すべてのクラスターメンバーと、保留中およびスケジュールされた再起動やスイッチオーバーなどのサービス情報が表示されます。

Improvements in Etcd support

  • EtcdRAFT内部エラーでの再試行(AlexanderKukushkin)

    Etcdノードがシャットダウンされると、 response code=300, data='etcdserver: server stopped' が送信されます。これにより、Patroniはプライマリを降格させていました。

  • Etcdリクエストの再試行を早すぎて諦めないでください。(AlexanderKukushkin)

    ネットワークに問題が発生すると、PatroniはすぐにEtcdノードのリストを使い果たし、 retry_timeout 全体を使用せずに諦めたため、プライマリが降格される可能性がありました。

Bugfixes

  • pg_rewind ユーザー(kremius)に実行権限を付与するときに synchronous_commit を無効にする

    ブートストラップが synchronous_mode_strict: true で実行される場合、非同期ノードが使用可能なため、`GRANTEXECUTE`ステートメントは無期限に待機していました。

  • Python3.7のメモリリークを修正しました(AlexanderKukushkin)

    Patroniは ThreadingMixIn を使用してRESTAPIリクエストを処理し、Python3.7ではデフォルトで非デーモンリクエストごとにスレッドが生成されるようにしました。

  • 非同期アクションの競合状態を修正しました(AlexanderKukushkin)

    停止したPostgresを回復しようとすると、 patronictl reinit --force が上書きされる可能性がありました。これにより、PatroniがBasebackupの実行中にPostgresを起動しようとしたという状況が発生しました。

  • postmaster_start_time() メソッドの競合状態を修正しました。(AlexanderKukushkin)

    メソッドがRESTAPIスレッドから実行される場合は、別のカーソルオブジェクトを作成する必要があります。

  • 大文字を含む名前の同期スタンバイが昇格されない問題を修正しました。(AlexanderKukushkin)

    Postgresが application_name と synchronous_standby_names の値を比較するときに同じことを行っていたため、名前を小文字に変換しました。

  • 新しいプロセスを開始する前に、コールバックプロセスとともにすべての子を強制終了します。(AlexanderKukushkin)

    そうしないと、bashでコールバックを実装することが難しくなり、最終的に2つのコールバックが同時に実行される状況が発生する可能性があります。

  • 「起動に失敗しました」問題を修正しました(AlexanderKukushkin)

    特定の条件下では、Postgresが起動して実行中であるにもかかわらず、Postgresの状態が「開始に失敗しました」に設定される場合があります。

バージョン1.6.0

このバージョンでは、PostgreSQL12との互換性が追加され、PostgreSQL11以降でスーパーユーザーなしでpg_rewindを実行できるようになり、IPv6サポートが有効になります。

New features

  • Psycopg2は要件から削除されたため、個別にインストールする必要があります。(AlexanderKukushkin)

    2.8.0以降、 psycopg2 は psycopg2 と psycopg2-binary という2つの異なるパッケージに分割され、ファイルシステム上の同じ場所に同時にインストールできるようになりました。依存関係による地獄の問題を減らすために、ユーザーがインストール方法を選択できるようにしました。利用可能なオプションがいくつかあります。 psycopg2 を参照してください。

  • PostgreSQL12との互換性(AlexanderKukushkin)

    PostgreSQL12以降では recovery.conf はなくなり、以前のすべての回復パラメータは recovery.conf に変換されます。 ALTER SYSTEM SET primary_conninfo などから保護するために、Patroniは postgresql.auto.conf を解析し、そこからすべてのスタンバイおよびリカバリパラメータを削除します。Patroni構成は下位互換性を維持します。たとえば、 restore_command はGUCであるにもかかわらず、 postgresql.recovery_conf.restore_command セクションで指定することができ、PatroniはそれをPostgreSQL12の postgresql.conf に書き込みます。

  • PostgreSQL11以降でスーパーユーザーなしで pg_rewind を使用できるようにしました。(AlexanderKukushkin)

    この機能を使用したい場合は、Patroni設定ファイルの postgresql.authentication.rewind セクションで username と password を定義してください。既存のクラスターの場合は、ユーザーを手動で作成し、いくつかの機能に対する GRANT EXECUTE 権限を作成する必要があります。詳細については、PostgreSQL username _を参照してください。

  • レプリカ上で実際の primary_conninfo 値と必要な primary_conninfo 値をスマートに比較します。(AlexanderKukushkin)

    既存のプライマリ/スタンバイクラスターをPatroniによって管理されるクラスターに変換する場合、レプリカの再起動を回避できる場合があります。

  • IPv6サポート(AlexanderKukushkin)

    大きな問題が2つありました。PatroniRESTAPIサービスは 0.0.0.0 でのみリッスンしており、 api_url と conn_url で使用されるIPv6IPアドレスが適切に引用されていませんでした。

  • Kerberosのサポート(AjithVilas、AlexanderKukushkin)

    Patroni設定ファイルでパスワードを定義する代わりに、Postgresノード間でKerberos認証を使用できるようになります。

  • pg_ident.conf の管理(AlexanderKukushkin)

    この機能は pg_hba.conf と同様に機能します。 postgresql.pg_ident が構成ファイルまたはDCSで定義されている場合、Patroniはその値を pg_ident.conf に書き込みますが、 postgresql.parameters.ident_file が定義されている場合、Patroniは pg_ident が外部から管理されていると想定し、ファイルを更新しません。

Improvements in REST API

  • /health エンドポイントを追加しました(WilfriedRoset)

    PostgreSQLが実行されている場合にのみHTTPステータスコードを返します。

  • /read-only および /read-write エンドポイントを追加しました(JulienRiou)

    /read-only エンドポイントにより、レプリカとプライマリ間で読み取りバランスがとれます。 /read-write エンドポイントは、 /primary 、 /leader 、および /master のエイリアスです。

  • SSLContext を使用してRESTAPIソケットをラップします(JulienRiou)

    ssl.wrap_socket() の使用は非推奨になりましたが、TLS1.1など、間もなく非推奨となるプロトコルをまだ許可していました。

Logging improvements

  • 2段階のログ記録(AlexanderKukushkin)

    すべてのログメッセージは、最初にメモリ内のキューに書き込まれ、その後、別のスレッドから標準エラー出力またはファイルに非同期的にフラッシュされます。最大キューサイズは制限されています(構成可能)。制限に達すると、Patroniはログを失い始めますが、HAループをブロックするよりはまだマシです。

  • GET/OPTIONSAPI呼び出しとレイテンシのデバッグログを有効にしました(JanTomsa)

    これは、HAProxy、Consul、またはどのノードがプライマリ/レプリカであるかを決定するその他のツールによって実行されるヘルスチェックのデバッグに役立ちます。

  • 再試行でキャッチされた例外をログに記録します(DanielKucera)

    試行回数またはタイムアウトに達したときの最後の例外をログに記録します。DCSへの通信が失敗した場合に、いくつかの問題をデバッグするのに役立つことが期待されます。

Improvements in patronictl

  • スケジュールされたスイッチオーバーと再起動のためのダイアログを強化(RafiaSabih)

    以前のダイアログでは、スケジュールされたアクションが考慮されていなかったため、誤解を招く恐れがありました。

  • 設定ファイルが存在するかどうかを確認します(WilfriedRoset)

    指定されたファイル名が存在しない場合は、黙って無視するのではなく(誤解を招く可能性があります)、構成ファイルについて詳しく説明してください。

  • EDITOR のフォールバック値を追加(WilfriedRoset)

    EDITOR 環境変数が定義されていない場合、 patronictl edit-config は`PatroniCtlException`で失敗していました。新しい戦略は、ほとんどのシステムで利用できるはずの vi よりも editor を試すことです。

Improvements in Consul support

  • Consul整合性モードを指定できるようにしました(JanTomsa)

    整合性モード here _について詳しくは、こちらをご覧ください。

  • SIGHUPでConsul設定をリロード(CameronDanielKucera、AlexanderKukushkin)

    これは、誰かが token の値を変更する場合に特に便利です。

Bugfixes

  • スイッチオーバー/フェイルオーバーの例外的なケースを修正しました(SharoonThomas)

    RESTAPIにアクセスできず、DCSをフォールバックとして使用している場合、変数 scheduled_at は未定義になる可能性があります。

  • カスタムブートストラップ中に pg_hba.conf のlocalhostへの信頼をオープンします(AlexanderKukushkin)

    以前はunix_socketに対してのみ開かれていたため、多くのエラーが発生していました: FATAL:  no pg_hba.conf entry for replication connection from host /"127.0.0.1/", user /"replicator/"

  • 元のリーダーが先行している場合でも、同期ノードは健全であるとみなします。(AlexanderKukushkin)

    プライマリがDCSへのアクセスを失った場合、Postgresは読み取り専用で再起動されますが、他のノードがRESTAPI経由で古いプライマリに引き続きアクセスできる場合があります。このような状況により、古いプライマリが同期スタンバイよりも先にWAL位置を報告していたため、同期スタンバイが昇格できませんでした。

  • スタンバイクラスターのバグ修正(AlexanderKukushkin)

    standby_leaderにアクセスできない場合にスタンバイクラスターでレプリカをブートストラップできるようにするほか、いくつかのマイナーな修正を加えました。

バージョン1.5.6

New features

  • プロキシのセットを介したetcdクラスターのサポート作業(AlexanderKukushkin)

    etcdクラスターに直接アクセスできず、プロキシのセットを介してアクセスできない場合があります。この場合、Patroniはetcdトポロジ検出を実行せず、プロキシホスト経由でラウンドロビンのみを実行します。動作は「etcd.use_proxies」によって制御されます。

  • ノード上のロールが変更されたときのコールバックの動作が変更されました。(AlexanderKukushkin)

    ロールが「master」または「standby_leader」から「replica」、または「replica」から「standby_leader」に変更された場合、「on_restart」コールバックは呼び出されなくなり、「on_role_change」コールバックが優先されます。

  • postgresの起動方法を変更する(AlexanderKukushkin)

    それ自体を実行する代わりに`multiprocessing.Process`を使用し、ポストマスターPIDをPatroniプロセスに送信するには`multiprocessing.Pipe`を使用します。その前はパイプを使用していて、stdinが閉じられた状態でポストマスタープロセスを終了していました。

Bug fixes

  • RESTAPIによって返されるスタンバイリーダーのロールを修正しました。(AlexanderKukushkin)

    `standby_leader`ではなく、誤って`replica`を返していました。

  • コールバックを強制終了できなかった場合は終了を待ちます(JulienTachoires)

    Patroniには、新しいコールバックをキャンセルしていたsudoの下で実行されているコールバックスクリプトを終了するのに十分な権限がありません。実行中のスクリプトを強制終了できなかった場合、Patroniはスクリプトが終了するまで待機してから、次のコールバックを実行します。

  • dcs.get_clusterメソッドにかかるロック時間を短縮しました(AlexanderKukushkin)

    ロックが保持されているため、DCSの速度が低下し、RESTAPIヘルスチェックに影響し、誤検知が発生していました。

  • pg_wal/`pg_xlog`がシンボリックリンクである場合のPGDATAのクリーニングを改善しました。(JulienTachoires)

    この場合、Patroniはターゲットディレクトリからファイルを明示的に削除します。

  • os.path.relpathの不要な使用を削除します(AntsAasma)

    それは作業ディレクトリを解決できるかどうかに依存します。後でファイルシステムからリンクが解除されたディレクトリでPatroniが起動された場合に何が失敗するかによって決まります。

  • Etcdとの通信時にSSLバージョンを強制しないようにしました。(AlexanderKukushkin)

    何らかの理由で、debianおよびubuntuのpython3-etcdはパッケージの最新バージョンに基づいていないため、Etcdv3でサポートされていないTLSv1を強制します。この問題はパトローニ側で解決しました。

バージョン1.5.5

このバージョンでは、以前のマスターの自動再初期化の可能性が導入され、patronictlリストの出力が改善され、多くのバグが修正されています。

New features

  • PATRONI_ETCD_PROTOCOL、PATRONI_ETCD_USERNAME、および`PATRONI_ETCD_PASSWORD`環境変数のサポートを追加しました(ÉtienneM)

    以前は、設定ファイルまたは「PATRONI_ETCD_URL」の一部としてのみ設定できましたが、必ずしも便利ではありませんでした。

  • 以前のマスターを自動的に再初期化できるようにしました(AlexanderKukushkin)

    pg_rewindが無効になっているか使用できない場合、タイムラインが分岐するため、元のマスターが新しいレプリカとして起動できない可能性があります。この場合、それを修正する唯一の方法は、データディレクトリを消去して再初期化することです。この動作は、「postgresql.remove_data_directory_on_diverged_timelines」を設定することで変更できます。これが設定されると、Patroniはデータディレクトリを消去し、元のマスターを自動的に再初期化します。

  • patronictlリストのタイムラインに関する情報を表示(AlexanderKukushkin)

    古いレプリカを検出するのに役立ちます。それに加えて、ポート値がデフォルトでない場合、または同じホスト上で複数のメンバーが実行されている場合、「Host」には「:{port}」が含まれます。

  • $SCOPE-configエンドポイントに関連付けられたヘッドレスサービスを作成します(AlexanderKukushkin)

    /"config/"エンドポイントは、クラスター全体のPatroniおよびPostgres構成に関する情報、履歴ファイル、そして最後に最も重要な`initialize`キーを保持します。Kubernetesマスターノードが再起動またはアップグレードされると、サービスのないエンドポイントが削除されます。ヘッドレスサービスにより、削除されなくなります。

Bug fixes

  • リーダー監視ブロッキングクエリの読み取りタイムアウトを調整しました。(AlexanderKukushkin)

    Consulのドキュメントによると、実際の応答タイムアウトは、同時要求のウェイクアップ時間を分散するために、指定された最大待機時間にランダムな少量の追加待機時間を加えることによって増加します。最大持続時間に「待機/16」時間が追加されます。この場合、どちらが大きいかに応じて、「wait/15」または1秒を追加します。

  • レプリケーションプロトコル経由でpostgresに接続する場合は、常にreplication=1を使用してください。(AlexanderKukushkin)

    Postgres10以降、pg_hba.conf内のdatabase=replicationを含む行は、パラメーターreplication=databaseを使用した接続を受け入れません。

  • wal専用スタンバイクラスタのRecovery.confにPrimary_conninfoを書き込まないでください。(AlexanderKukushkin)

    「standby_cluster」設定に「host」も「port」も定義されていないにもかかわらず、Patroniは「primary_conninfo」を「recovery.conf」に入れていましたが、これは役に立たず、多くのエラーを生成していました。

バージョン1.5.4

このバージョンでは、柔軟なロギングが実装され、多くのバグが修正されています。

New features

  • 伐採インフラの改善(AlexanderKukushkin、LucasCapistrant、AlexanderAnikin)

    ロギング設定は、環境変数からだけでなく、Patroni設定ファイルからも設定できます。構成を更新してリロードを実行するか、PatroniプロセスにSIGHUPを送信することで、実行時にロギング構成を変更できるようになります。デフォルトでは、Patroniはログをstderrに書き込みますが、ログをファイルに直接書き込み、一定のサイズに達したときにローテーションすることが可能になりました。これに加えて、カスタム日付形式のサポートと、各Pythonモジュールのログレベルを微調整する機能が追加されました。

  • リーダー選挙中に現在のタイムラインを考慮できるようにする(AlexanderKukushkin)

    現在、既知の最新のタイムラインに載っていないにもかかわらず、ノードが自身を最も健全なノードであるとみなしている可能性があります。場合によっては、そのようなノードの昇格を避けたいことがあります。これは、`check_timeline`パラメータを`true`に設定することで実現できます(デフォルトの動作は変更されません)。

  • スーパーユーザー資格情報の要件が緩和されました

    Libpqを使用すると、ユーザー名もパスワードも明示的に指定せずに接続を開くことができます。状況に応じて、pgpassファイルまたはpg_hba.confの信頼認証方法のいずれかに依存します。pg_rewindもlibpqを使用しているため、同じように動作します。

  • 環境変数を介してConsulServiceの登録とチェック間隔を設定する機能を実装しました(AlexanderKukushkin)

    Consulでのサービスの登録は1.5.0で追加されましたが、これまではpatroni.yaml経由でのみ有効にすることができました。

Stability Improvements

  • カスタムブートストラップ中にarchive_modeをオフに設定します。(AlexanderKukushkin)

    クラスターが完全に機能するまでは、WALと履歴ファイルのアーカイブは避けたいと考えています。カスタムブートストラップにpg_upgradeが含まれる場合、これは非常に役立ちます。

  • 起動時にグローバル設定をロードするときに5秒のバックオフを適用します(AlexanderKukushkin)

    これは、Patroniが起動したばかりのときにDCSを叩くのを避けるのに役立ちます。

  • シャットダウン時に生成されるエラーメッセージの量を削減しました(AlexanderKukushkin)

    それらは無害ですが、かなり迷惑で、時には恐ろしいものでした。

  • 作成時に、recovery.confのrw権限を明示的に保護します(LucasCapistrant)

    このファイルにはレプリケーションユーザーとパスワードが含まれているため、patroni/postgresユーザー以外にはこのファイルを読まないでください。

  • HTTPServer例外をロガーにリダイレクトしました(JulienRiou)

    デフォルトでは、このような例外は通常のログを混乱させて標準出力に記録されていました。

Bug fixes

  • pg_ctlプロセスのstdoutへのstderrパイプを削除しました(CodyCoons)

    メインのPatroniプロセスからstderrを継承すると、すべてのPostgresログをすべてのPatroniログとともに表示できるようになります。PatroniおよびPostgresのログは標準ツール(dockerログ、kubectlなど)を使用して使用できるため、これはコンテナー環境で非常に役立ちます。それに加えて、この変更により、postgresがいくつかの警告を標準エラー出力に書き込むときに、Patroniがポストマスターpidをキャッチできないというバグが修正されます。

  • Consulサービスのチェック登録解除タイムアウトをGo時間形式で設定しました(PavelKirillov)

    明示的に言及されていない限り、時間単位の登録は失敗していました。

  • standby_clusterクラスター構成のチェックを緩和しました(DmitryDolgov、AlexanderKukushkin)

    有効な値として文字列のみを受け入れていたため、ポートを整数として指定したり、create_replica_methodsをリストとして指定したりすることはできませんでした。

バージョン1.5.3

互換性とバグ修正のリリース。

  • ZooKeeperに対してPython3を使用して実行するときの安定性が向上しました(AlexanderKukushkin)

    「loop_wait」の変更により、Patroniが飼育員から切断され、再接続できなくなりました。

  • postgres9.3との壊れた互換性を修正しました。(AlexanderKukushkin)

    9.3はreplication='database'を認識しないため、レプリケーション接続を開くときはreplication=1を指定する必要があります。

  • HAループごとに少なくとも1回Consulセッションを更新するようにし、Consulセッション例外の処理を改善しました。(AlexanderKukushkin)

    ローカルConsulエージェントを再起動すると、ノードに関連するすべてのセッションが無効になります。セッション更新を時間通りに呼び出さず、セッションエラーを適切に処理しなかったことが、プライマリの降格を引き起こしていました。

バージョン1.5.2

互換性とバグ修正のリリース。

  • kazoo-2.6.0との互換性(AlexanderKukushkin)

    リクエストが適切なタイムアウトで実行されることを確認するために、Patroniはpython-kazooモジュールのcreate_connectionメソッドを再定義します。kazooの最後のリリースでは、create_connectionメソッドの呼び出し方法が少し変更されました。

  • Consulクラスタがリーダーを失ったときのPatroniのクラッシュを修正しました。(AlexanderKukushkin)

    クラッシュはtouch_memberメソッドの不正な実装が原因で発生していました。これはブール値を返し、例外は発生しません。

バージョン1.5.1

このバージョンでは、永続レプリケーションスロットのサポートが実装され、pgBackRestのサポートが追加され、いくつかのバグが修正されています。

New features

  • 永続的なレプリケーションスロット(AlexanderKukushkin)

    永続的なレプリケーションスロットは、フェイルオーバー/スイッチオーバーでも保持されます。つまり、新しいプライマリ上のPatroniは、プロモートの実行直後に、構成済みのレプリケーションスロットを作成します。スロットは「patronictledit-config」を使用して設定できます。初期設定は bootstrap.dcs で行うこともできます。

  • pgbackrestサポートを追加(YogeshSharma)

    pgBackrestは既存の$PGDATAフォルダーに復元できます。これにより、最後のバックアップ以降変更されていないファイルがスキップされるため、迅速な復元が可能になります。この機能をサポートするために、新しいパラメーター`keep_data`が導入されました。追加の例については、 replica creation method セクションを参照してください。

Bug fixes

  • 「スタンバイクラスタ」ワークフローのいくつかのバグ修正(AlexanderKukushkin)

    詳細については、https://github.com/zalando/patroni/pull/823を参照してください。

  • クラスター管理が一時停止され、DCSにアクセスできない場合のRESTAPIヘルスチェックを修正しました。(AlexanderKukushkin)

    回帰はhttps://github.com/zalando/patroni/commit/90cf930036a9d5249265af15d2b787ec7517cf57で導入されました。

バージョン1.5.0

このバージョンでは、PatroniHAクラスターがスタンバイモードで動作できるようにし、Windows上での実行の実験的サポートを導入し、ConsulにPostgreSQLサービスを登録するための新しい構成パラメーターを提供します。

New features

  • スタンバイクラスター(DmitryDolgov)

    1つ以上のPatroniノードは、プライマリノードと並行して(つまり、別のデータセンター内で)実行されるスタンバイクラスタを形成でき、プライマリクラスタのマスターから複製するスタンバイノードで構成されます。スタンバイクラスター内のすべてのPostgreSQLノードはレプリカです。これらのレプリカの1つはリモートマスターから直接レプリケートすることを選択し、他のレプリカはカスケード方式でリモートマスターからレプリケートします。この機能の詳細な説明といくつかの構成例は、 here にあります。

  • Consulでのサービスの登録(PavelKirillov、AlexanderKukushkin)

    consul configuration の`register_service`パラメータが有効な場合、ノードは名前`scope`とタグ`master`、replica、または`standby-leader`を持つサービスを登録します。

  • 実験的なWindowsサポート(PavelGolub)

    今後はWindows上でPatroniを実行できるようになりますが、Windowsのサポートは新しく、Linuxの対応物ほど実際のテストは受けていません。フィードバックをお待ちしております。

Improvements in patronictl

  • patronictl-k/--insecureフラグを追加し、restapicertをサポートしました。(WilfriedRoset)

    以前は、RESTAPIが自己署名証明書によって保護されていた場合、patronictl`はそれらを検証できませんでした。その検証を無効にする方法はありませんでした。証明書検証を完全にスキップしたり、設定の :ref:`ctl: <patronictl_settings> セクションでCA証明書とクライアント証明書を提供したりするように「patronictl」を設定できるようになりました。

  • patronictlスイッチオーバー/フェイルオーバー出力からnofailoverタグを持つメンバーを除外します。(AlexanderAnikin)

    以前は、patronictlを介して対話型スイッチオーバーまたはフェイルオーバーを実行するときに、これらのメンバーが候補として誤って提案されていました。

Stability improvements

  • pg_controldataのキーと値以外の出力行を解析しないようにしました。(AlexanderAnikin)

    特定の状況下では、pg_controldataはコロン文字のない行を出力します。これにより、pg_controldata出力を解析するPatroniコードでエラーが発生し、実際の問題が隠蔽されてしまいます。多くの場合、このような行は、通常の出力の前に、つまりバイナリのメジャーバージョンがPostgreSQLデータディレクトリのバージョンと一致しない場合に、pg_controldataによって示される警告として出力されます。

  • リーダー選出時のエラーメッセージにメンバー名を追加しました(JanMussler)

    リーダーの選出中、Patroniはクラスターの既知のメンバーすべてに接続し、そのステータスを要求します。このようなステータスはPatroniログに書き込まれ、メンバーの名前も含まれます。以前は、メンバーにアクセスできない場合、エラーメッセージにはその名前は示されず、URLのみが含まれていました。

  • レプリケーションスロットの作成時にすぐにWALポジションを予約します(AlexanderKukushkin)

    9.6以降、「pg_create_physical_replication_slot」関数には追加のブール値パラメータ「immediately_reserve」が提供されます。これがデフォルトでもある「false」に設定されている場合、スロットは最初のクライアント接続を受信するまでWAL位置を予約しないため、スロットの作成と接続の間の時間枠でクライアントが必要とする一部のセグメントが失われる可能性があります。最初のクライアント接続。

  • 厳密な同期レプリケーションのバグを修正しました。(AlexanderKukushkin)

    「synchronous_mode_strict:true」で実行すると、Patroniが「synchronous_standby_names」に「*」を入れて、ほとんどのレプリケーション接続の同期状態を「潜在的」に変更する場合があります。以前は、Patroniは状態が「async」の候補のみを考慮していたため、このような状況では同期候補を選択できませんでした。

バージョン1.4.6

Bug fixes and stability improvements

このリリースでは、PatroniAPI/masterエンドポイントが非マスターノードに対して200を返すという重大な問題が修正されています。これはレポートの問題であり、実際のスプリットブレインではありませんが、特定の状況下ではクライアントが読み取り専用ノードに誘導される可能性があります。

  • 降格時にis_leaderステータスをリセット(AlexanderKukushkin、OleksiiKliukin)

    降格されたクラスターメンバーが/masterAPI呼び出しでコード200で応答を停止していることを確認します。

  • 新しい「cluster_unlocked」フィールドをAPI出力に追加しました(DmitryDolgov)

    このフィールドは、クラスターでマスターが実行されているかどうかを示します。これは、レプリカの1つ以外の他のノードをクエリできない場合に使用できます。

バージョン1.4.5

New features

  • 新しいpostgres設定を適用する際のログ記録を改善しました(DonSeiler)

    Patroniは、変更されたパラメータ名と値をログに記録します。

  • Python3.7との互換性(ChristophBerg)

    asyncはPython3.7の予約キーワードです

  • メンバーがシャットダウンされた場合、DCSの状態を「停止」に設定します。(TonySorrentino)

    これにより、「patronictllist」コマンドでメンバーの状態が「停止」として表示されます。

  • 古いpostmaster.pidが実行中のプロセスと一致する場合に記録されるメッセージを改善しました(AntsAasma)

    前回のものは混乱を超えていました。

  • patronictlリロード機能を実装しました(DonSeiler)

    それまでは、RESTAPIを呼び出すか、PatroniプロセスにSIGHUPシグナルを送信することによってのみ構成をリロードできました。

  • レプリカとして開始するときに、controldataからいくつかのパラメーターを取得して適用します(AlexanderKukushkin)

    「max_connections」の値と、グローバル設定で設定されたその他のパラメータの値は、プライマリで実際に使用される値よりも低い場合があります。この問題が発生すると、レプリカは起動できないため、手動で修正する必要があります。Patroniは、`pg_controldata`から値を読み取って適用し、postgresを起動し、`pending_restart`フラグを設定することで、これを処理します。

  • 設定されている場合、postgresの起動時にLD_LIBRARY_PATHを使用します。(ChrisFraser)

    Postgresを起動するとき、PatroniはPATH、LC_ALL、LANG環境変数が設定されている場合はそれらを渡していました。現在はLD_LIBRARY_PATHでも同じことを行っています。誰かがPostgreSQLを標準以外の場所にインストールした場合に役立つはずです。

  • create_replica_methodの名前をcreate_replica_methodsに変更しました。(DmitryDolgov)

    それが実際には配列であることを明確にするためです。下位互換性のために、古い名前も引き続きサポートされています。

Bug fixes and stability improvements

  • 一時停止状態のpg_rewindによるレプリカ起動の条件を修正しました(OleksiiKliukin)

    以前にpg_rewindを実行したレプリカを起動しないようにしてください。

  • update_lockが成功した場合にのみマスターヘルスチェックに200を応答します。(AlexanderKukushkin)

    DCSがパーティション化されている場合、Patroniが以前の(降格された)マスター上のマスターを報告しないようにします。

  • 新しいConsulモジュールとの互換性を修正しました(AlexanderKukushkin)

    v1.1.0からpython-consulは内部APIを変更し、クエリパラメータを渡すために`dict`の代わりに`list`を使用するようになりました。

  • シャットダウン中にPatroniRESTAPIスレッドからの例外をキャッチします(AlexanderKukushkin)

    これらのキャッチされなかった例外により、シャットダウン時にPostgreSQLが実行され続けました。

  • Postgresがマスターとして実行されている場合にのみクラッシュ回復を実行します。(AlexanderKukushkin)

    `pg_controldata`が「運用中」、「シャットダウン中」、または「クラッシュ回復中」を報告する必要があります。それ以外の場合はすべて、クラッシュからの回復は必要ありません。

  • 構成エラーの処理を改善しました(HenningJacobs、AlexanderKukushkin)

    Patroni設定ファイルを更新し、PatroniプロセスにSIGHUPを送信することで、実行時に多くのパラメーター(`restapi.listen`を含む)を変更することができます。この修正により、一部のパラメーターが無効な値を受け取った場合に、「restapi」スレッドから不明瞭な例外が排除されます。

バージョン1.4.4

Stability improvements

  • poll_failover_resultの競合状態を修正しました。(AlexanderKukushkin)

    フェイルオーバーにもスイッチオーバーにも直接的な影響はありませんでしたが、まれに、前のリーダーがロックを解放したときに成功が早すぎて報告され、「/にフェイルオーバーしました」ではなく「/"なし/"にフェイルオーバーされました」が生成されました。「desired-node」メッセージ。

  • Postgresパラメータ名の大文字と小文字を区別しないようにしました。(AlexanderKukushkin)

    Postgresパラメータのほとんどには、snake_case名が付いていますが、このルールには3つの例外があります(DateStyle、IntervalStyle、TimeZone)。Postgresは、別の大文字と小文字で記述された場合(例:timezone='some/tzn')、これらのパラメーターを受け入れます。ただし、Patroniはpg_settingsでこれらのパラメーター名の大文字と小文字を区別しない一致を見つけることができず、結果としてそのようなパラメーターを無視しました。

  • 実行中のpostgresにアタッチし、クラスターが初期化されていない場合、開始を中止します。(AlexanderKukushkin)

    Patroniは、すでに実行されているPostgresインスタンスに自身をアタッチできます。レプリカにアクセスする前に、マスターノードでPatroniの実行を開始することが不可欠です。

  • patronictlscaffoldの動作を修正しました(AlexanderKukushkin)

    jsonでエンコードされた文字列の代わりにdictオブジェクトをtouch_memberに渡すと、DCS実装がエンコードを処理します。

  • 一時停止中にリーダーキーの更新に失敗した場合にマスターを降格しません。(AlexanderKukushkin)

    メンテナンス中に、DCSは読み取り要求には応答し続けながら、書き込み要求は失敗し始める場合があります。この場合、PatroniはDCSのリーダーロックの更新に失敗した後、Postgresマスターノードを読み取り専用モードに設定していました。

  • Patroniが新しいポストマスタープロセスに気づいたときにレプリケーションスロットを同期するようになりました。(AlexanderKukushkin)

    Postgresが再起動されている場合、Patroniはレプリケーションスロットのリストが期待どおりであることを確認する必要があります。

  • 一時停止から復帰した後、sysidを確認し、レプリケーションスロットを同期します。(AlexanderKukushkin)

    「メンテナンス」モード中に、データディレクトリが完全に書き換えられる可能性があるため、「データベースシステム識別子」がまだクラスターに属しており、レプリケーションスロットがPatroniの期待と同期していることを確認する必要があります。

  • ポストマスターロックファイルが存在するデータディレクトリでPostgresを実行しないと開始できない可能性があった問題を修正しました。(AlexanderKukushkin)

    ポストマスターロックファイルからPIDの再利用を検出します。DockerコンテナーでPatroniとPostgresを実行すると、このような問題が発生する可能性が高くなります。

  • 誤って消去されたDCSの保護を改善しました(AlexanderKukushkin)

    Patroniには、このような場合にフェイルオーバーを防ぐためのロジックが多数用意されています。すべてのキーを元に戻すこともできます。ただし、この変更が行われるまでは、/configキーを誤って削除すると、HAループの1サイクルの一時停止モードがオフになりました。

  • 無効なシステムIDが発生した場合は終了しない(OleksiiKliukin)

    クラスターシステムIDが空の場合、または検証チェックに合格しない場合は終了しないでください。その場合、クラスターの再初期化が必要になる可能性が高くなります。結果メッセージにそれを記載してください。Patroniを終了しないでください。終了しないと再初期化が行われません。

Compatibility with Kubernetes 1.10+

  • 空のサブセットのチェックを追加しました(CodyCoons)

    Kubernetes1.10.0以降では、「[]」の代わりに「None」に設定された「Endpoints.subsets」を返すようになりました。

Bootstrap improvements

  • Recovery.confの削除をオプションにしました(BradNicholson)

    bootstrap.<custom_bootstrap_method_name>.keep_existing_recovery_conf`が定義され、 ``True` に設定されている場合、Patroniは既存の recovery.conf ファイルを削除しません。これは、適切な「recovery.conf」を生成するpgBackRestなどのツールを使用してバックアップからブートストラップする場合に便利です。

  • Basebackup組み込みメソッドへのオプションを許可(OleksiiKliukin)

    カスタムレプリカ作成メソッドの定義方法と同様に、構成内で「basebackup」セクションを定義することで、組み込みのbasebackupメソッドにオプションを提供できるようになりました。違いは、basebackup`セクションで受け入れられる形式にあります。pg_basebackupは、--key=value`と`--key`オプションの両方を受け入れるため、セクションの内容はキーと値のペアの辞書、または1要素の辞書またはキーのみのリスト(値を受け入れないオプションの場合)。追加の例については、 replica creation method セクションを参照してください。

バージョン1.4.3

Improvements in logging

  • ログレベルを環境変数から設定できるようにしました(AndyNewton、KeyvanHedayati)

    PATRONI_LOGLEVEL-一般的なログレベルを設定します`PATRONI_REQUESTS_LOGLEVEL`-すべてのHTTPリクエストのログレベルを設定します。KubernetesAPI呼び出し可能なログレベルの名前を取得するには、「Pythonログのドキュメント<https://docs.python.org/3.6/library/logging.html#levels>」を参照してください。

Stability improvements and bug fixes

  • 監視がタイムアウトしたときにetcdクラスタートポロジを再検出しません。(AlexanderKukushkin)

    etcd構成にホストが1つだけあり、そのホストにアクセスできない場合、Patroniはクラスタートポロジの検出を開始しましたが、成功しませんでした。代わりに、次の利用可能なノードに切り替える必要があります。

  • カスタムブートストラップの後に、bootstrap.pg_hbaの内容をpg_hba.confに書き込みます(AlexanderKukushkin)

    これで、「initdb」を使用した通常のブートストラップと同様に動作します。

  • シングルユーザーモードはユーザー入力を待っていて終了しませんでした(AlexanderKukushkin)

    回帰はhttps://github.com/zalando/patroni/pull/576で紹介されました

バージョン1.4.2

Improvements in patronictl

  • スケジュールされたフェイルオーバーの名前をスケジュールされたスイッチオーバーに変更しました(AlexanderKukushkin)

    フェイルオーバー機能とスイッチオーバー機能はバージョン1.4で分離されましたが、「patronictllist」は依然として「スケジュールされたスイッチオーバー」ではなく「スケジュールされたフェイルオーバー」を報告していました。

  • 保留中の再起動に関する情報を表示(AlexanderKukushkin)

    一部の構成変更を適用するには、postgresを再起動する必要がある場合があります。Patroniは、RESTAPIやDCSにノードのステータスを書き込むときに、すでにそのヒントを提供していましたが、それを表示する簡単な方法はありませんでした。

  • 設定ファイルのcluster_nameで動作するようにshow-configを作成しました。(AlexanderKukushkin)

    これは「patronictledit-config」と同様に機能します。

Stability improvements

  • ブートストラップ中にpg_controldataを呼び出さないようにします。(AlexanderKukushkin)

    initdbまたはカスタムブートストラップ中に、pgdataは空ではないが、pg_controldataがまだ書き込まれていない時間帯があります。このような場合、pg_controldata呼び出しはエラーメッセージとともに失敗していました。

  • psutilから発生した例外を処理しました(AlexanderKukushkin)

    cmdlineは、`cmdline()`メソッドが呼び出されるたびに読み取られて解析されます。検査対象のプロセスがすでに消滅している可能性もあり、その場合は`NoSuchProcess`が発生します。

Kubernetes support improvements

  • k8sAPIからのエラーを鵜呑みにしないでください(AlexanderKukushkin)

    KubernetesAPIへの呼び出しは、さまざまな理由で失敗する可能性があります。場合によっては、そのような呼び出しを再試行する必要がありますが、他の場合には、エラーメッセージと例外スタックトレースを記録する必要があります。ここでの変更は、Kubernetes権限の問題のデバッグに役立ちます。

  • KubernetesサンプルのDockerfileを更新して、マスターブランチからPatroniをインストールします(MaciejSzulik)

    それまでは「feature/k8s」を使用していましたが、それは時代遅れになりました。

  • k8sでpatroniを実行するために適切なRBACを追加しました。(MaciejSzulik)

    クラスターのポッドに割り当てられるサービスアカウント、必要な権限のみを保持するロール、サービスアカウントとロールを接続するロールバインディングを追加します。

バージョン1.4.1

Fixes in patronictl

  • フェイルオーバー先のメンバーの推奨リストに現在のリーダーを表示しません。(アレクサンダー・ククシュキン)

    patronictlフェイルオーバーは、クラスター内にリーダーがある場合でも機能する可能性があるため、フェイルオーバー先のメンバーのリストから除外する必要があります。

  • patronictlスイッチオーバーを古いPatroniAPIと互換性のあるものにしました。(AlexanderKukushkin)

    POST/switchoverRESTAPI呼び出しがステータスコード501で失敗した場合は、/failoverエンドポイントに対して再度実行されます。

バージョン1.4

このバージョンでは、KubernetesをDCSとして使用するためのサポートが追加されており、Etcd、Zookeeper、またはConsulを追加展開することなく、PatroniをKubernetesのクラウドネイティブエージェントとして実行できるようになります。

Upgrade notice

pip経由でPatroniをインストールすると、依存関係(Etcd、Zookeper、Consul、Kubernetesのライブラリ、またはAWSのサポートなど)が取り込まれなくなります。これらを有効にするには、pipinstallコマンドで明示的にリストする必要があります(例:pipinstallpatroni[etcd,kubernetes])。

Kubernetes support

KubernetesベースのDCSを実装します。エンドポイントのメタデータは、構成とリーダーキーを保存するために使用されます。ポッド定義内のメタデータフィールドは、メンバー関連のデータを保存するために使用されます。エンドポイントの使用に加えて、PatroniはConfigMapもサポートしています。この機能の詳細については、 Kubernetes chapter of the documentation を参照してください。

Stability improvements

  • ポストマスタープロセスを別のオブジェクトに分解します(AntsAasma)

    このオブジェクトは、pidと開始時刻を介して実行中のポストマスタープロセスを識別し、ポストマスターが背後で再起動されたとき、またはpostgresディレクトリがファイルシステムから消えたときの状況の検出(および解決)を簡素化します。

  • HAサイクルの各ループでPatroniによって発行されるSELECTの量を最小限に抑えます。(AlexanderKukushkin)

    HAループの反復ごとに、Patroniは回復ステータスと絶対的な壁の位置を知る必要があります。今後、Patroniはこの情報を取得するために、レプリカで2つ、マスターで3つのSELECTを実行するのではなく、1つのSELECTのみを実行します。

  • ロックを持っている場合にのみ、シャットダウン時にリーダーキーを削除します(AntsAasma)

    無条件の削除により、不要で誤解を招く例外が生成されていました。

Improvements in patronictl

  • patronictlにversionコマンドを追加(AntsAasma)

    インストールされているPatroniのバージョンと、実行中のPatroniインスタンスのバージョン(クラスター名が指定されている場合)が表示されます。

  • 一部のpatronictlコマンドで、cluster_name引数の指定をオプションにしました(AlexanderKukushkin、AntsAasma)

    patronictlが scope が定義された通常のPatroni設定ファイルを使用している場合は機能します。

  • スケジュールされたスイッチオーバーとメンテナンスモードに関する情報を表示します(AlexanderKukushkin)

    それまでは、この情報はPatroniログから取得するか、DCSから直接取得するしかありませんでした。

  • patronictl reinit の改善(AlexanderKukushkin)

    Patroniが他のアクション、つまりpostgresを開始しようとして忙しいときに、 patronictl reinit が続行を拒否することがありました。`patronictl`は、そのような長時間実行されるアクションをキャンセルするコマンドを提供しておらず、唯一の(危険な)回避策はデータディレクトリを手動で削除することでした。「reinit」の新しい実装は、再初期化を続行する前に、他の長時間実行アクションを強制的にキャンセルします。

  • patronictl pause と patronictl resume に --wait フラグを実装しました。(AlexanderKukushkin)

    要求されたアクションがクラスター内のすべてのノードによって承認されるまで、 patronictl は待機します。このような動作は、DCS内のすべてのノードの pause フラグをRESTAPI経由で公開することによって実現されます。

  • patronictl failover の名前を patronictl switchover に変更しました(AlexanderKukushkin)

    以前の failover は、実際にはスイッチオーバーのみを行うことができました。リーダーなしでは集団で進むことを拒否した。

  • patronictl failover の動作を変更しました(AlexanderKukushkin)

    リーダーがない場合でも機能しますが、その場合は新しいリーダーとなるノードを明示的に指定する必要があります。

Expose information about timeline and history

  • DCSおよびAPI経由で現在のタイムラインを公開します(AlexanderKukushkin)

    クラスターの各メンバーの現在のタイムラインに関する情報を保存します。この情報はAPI経由でアクセスでき、DCSに保存されます。

  • DCSの/historyキーにプロモーション履歴を保存します(AlexanderKukushkin)

    さらに、対応するプロモーションのタイムスタンプを付加したタイムライン履歴をDCSの/historyキーに保存し、プロモートごとに更新します。

Add endpoints for getting synchronous and asynchronous replicas

  • 新しい/syncおよび/asyncエンドポイントを追加しました(AlexanderKukushkin、OleksiiKliukin)

これらのエンドポイント(/synchronousおよび/asynchronousとしてもアクセス可能)は、対応する同期レプリカと非同期レプリカに対してのみ200を返します(「noloadbalance」としてマークされたものを除く)。

Allow multiple hosts for Etcd

  • Etcd設定に新しい「hosts」パラメータを追加しました。(AlexanderKukushkin)

    このパラメータには、実行中のetcdクラスタメンバーのリストを検出して設定するために使用されるホストの初期リストが含まれている必要があります。作業中に何らかの理由で、この検出されたホストのリストが使い果たされた場合(そのリストに利用可能なホストがない場合)、Patroniは「hosts」パラメータから初期リストに戻ります。

バージョン1.3.6

Stability improvements

  • postgresが実行されているかどうかを確認するときに、プロセスの開始時間を確認します。(アリズ・アスマ)

    postmaster.pidがクリーンアップされないクラッシュの後、同じpidを持つ新しいプロセスが存在する可能性があり、その結果is_running()の誤検知が発生し、あらゆる種類の不正な動作につながります。

  • データディレクトリを失った場合、ブートストラップの前にpostgresqlをシャットダウンします(ainlolcat)

    マスター上のデータディレクトリが強制的に削除されると、postgresプロセスがしばらくの間生きたままになり、元のマスターの代わりに作成されたレプリカの起動や複製が妨げられることがあります。この修正により、PatroniはポストマスターのPIDとその開始時刻をキャッシュし、対応するデータディレクトリが削除された後も古いポストマスターがまだ実行されている場合に備えて古いポストマスターを終了できるようになります。

  • postgresマスターが停止した場合にシングルユーザーモードでクラッシュリカバリを実行します。(AlexanderKukushkin)

    スタンバイとしてすぐに起動するのは安全ではなく、postgresが正常にシャットダウンされていない場合は pg_rewind を実行できません。シングルユーザークラッシュリカバリは、 pg_rewind が有効になっている場合、または現時点でマスターが存在しない場合にのみ開始されます。

Consul improvements

  • Consulにデータセンター構成を提供できるようにしました(ViliusOkockis、AlexanderKukushkin)

    それまでは、Patroniは常に、それが実行されているホストのデータセンターと通信していました。

  • 常にX-Consul-Tokenhttpヘッダーでトークンを送信します。(AlexanderKukushkin)

    consul.token がPatroni設定で定義されている場合、常に「X-Consul-Token」httpヘッダーで送信されます。python-consulモジュールはConsulRESTAPIと「一貫性」を保とうとしますが、 consul.token _のクエリパラメータとしてトークンを受け入れませんが、「X-Consul-Token」ヘッダーでは動作します。

  • 指定された値が可能な最小値より小さい場合、セッションTTLを調整します。(StasFomin、AlexanderKukushkin)

    Patroni構成で提供されるTTLが、Consulがサポートする最小TTLよりも小さい場合があります。その場合、Consulエージェントは新しいセッションの作成に失敗します。セッションがないと、PatroniはConsulKVストアにメンバーキーとリーダーキーを作成できず、クラスターが異常な状態になります。

Other improvements

  • 環境変数 PATRONI_LOGFORMAT を介してカスタムログ形式を定義します(StasFomin)

    システムロガーによってすでに追加されている場合(通常はPatroniがサービスとして実行されている場合)、Patroniログ内のタイムスタンプやその他の同様のフィールドを無効にすることができます。

バージョン1.3.5

Bugfix

  • データディレクトリが削除された場合にロールを「初期化されていない」に設定しました。(AlexanderKukushkin)

    ノードがマスターとして実行されている場合、フェイルオーバーが妨げられていました。

Stability improvement

  • postgresを起動しようとして失敗した場合は、シングルユーザーモードでpostmasterを実行してみてください。(AlexanderKukushkin)

    通常、このような問題は、マスターとして実行されているノードが終了し、タイムラインが分岐したときに発生します。 recovery.conf に restore_command が定義されている場合、postgresが起動を中止し、制御データが変更されないままになる可能性が非常に高くなります。クリーンなシャットダウンが必要な pg_rewind を使用できなくなります。

Consul improvements

  • セッション作成時にヘルスチェックを指定できるようにしました。(AlexanderKukushkin)

    指定しない場合、Consulは「serfHealth」を使用します。一方では、孤立したマスターを迅速に検出できますが、別の側面では、Patroniが短いネットワークラグを許容できなくなります。

Bugfix

  • Python3のWatchdogを修正(AntsAasma)

    ioctl()呼び出しインターフェースの誤解。mutable=Falseの場合、fcntl.ioctl()は実際にargバッファを返します。intとstrの比較でエラーが返されなかったため、これはPython2で誤って機能しました。エラー報告は実際には、Python2ではIOErrorを、Python3ではOSErrorを発生させることによって行われます。

バージョン1.3.4

Different Consul improvements

  • Consulトークンをヘッダーとして渡します(AndrewColinKissa)

    ヘッダーは、トークンをConsul API _に渡すための推奨される方法になりました。

  • Consulの詳細設定(AlexanderKukushkin)

    scheme 、 token 、クライアントおよびCA証明書 scheme を指定する可能性があります。

  • python-consul-0.7.1以降との互換性(AlexanderKukushkin)

    新しいpython-consulモジュールはいくつかのメソッドのシグネチャを変更しました

  • 「TTLロックを解除できませんでした」というメッセージがログに記録されませんでした(AlexanderKukushkin)

    重大なバグではありませんが、適切なログが記録されていないと、問題が発生した場合の調査が複雑になります。

Quote synchronous_standby_names using quote_ident

  • synchronous_standby_names を postgresql.conf に書き込むときは、その値を引用符で囲む必要があります。(AlexanderKukushkin)

    適切に引用符で囲まれていない場合、PostgreSQLは同期レプリケーションを事実上無効にし、動作を継続します。

Different bugfixes around pause state, mostly related to watchdog (アレクサンダー・ククシュキン)

  • Watchdogがアクティブでない場合はキープアライブを送信しない

  • 一時停止モードでWatchdogをアクティブにしないようにする

  • 一時停止モードで正しいpostgres状態を設定する

  • postgresが停止している場合はAPIからクエリを実行しないでください

バージョン1.3.3

Bugfixes

  • synchronous_mode_strictがオンになっている場合でも、昇格直後に同期レプリケーションが無効になりました。(AlexanderKukushkin)

  • バックアップから復元した後に空の pg_ident.conf ファイルが見つからない場合は、空の pg_ident.conf ファイルを作成します。(AlexanderKukushkin)

  • pg_hba.conf でpostgresだけでなくすべてのデータベースにアクセスできるようにしました(FrancoBellagamba)

バージョン1.3.2

Bugfix

  • patronictledit-configがZooKeeperで動作しませんでした。(AlexanderKukushkin)

バージョン1.3.1

Bugfix

  • _MemberStatus の変更によりAPI経由のフェイルオーバーが壊れていました。(AlexanderKukushkin)

バージョン1.3

バージョン1.3では、カスタムブートストラップの可能性が追加され、pg_rewindのサポートが大幅に改善され、同期モードのサポートが強化され、patronictlに構成編集が追加され、LinuxでのWatchdogサポートが実装されています。さらに、これはPostgreSQL10で正しく動作する最初のバージョンです。

Upgrade notice

Patroniの新しいバージョンとの互換性既知の問題はありません。バージョン1.2からの設定は変更せずに機能するはずです。新しいパッケージをインストールしてPatroniを再起動する(PostgreSQLが再起動する)か、最初にPatroniを pause mode に入れてからクラスター内のすべてのノードでPatroniを再起動する(一時停止モードのPatroniは停止しようとしません)ことでアップグレードできます。PostgreSQLを開始)、最後に一時停止モードから再開します。

Custom bootstrap

  • クラスターのブートストラップのプロセスを構成可能にしました(AlexanderKukushkin)

    クラスター内の最初のノードを初期化するときに、 initdb の代わりにカスタムブートストラップスクリプトを許可します。ブートストラップコマンドは、クラスターの名前とデータディレクトリへのパスを受け取ります。結果として得られるクラスターはリカバリを実行するように構成でき、バックアップからブートストラップしてポイントインタイムリカバリを実行できるようになります。この機能の詳細については、 initdb を参照してください。

Smarter pg_rewind support

  • 現在のマスターとのタイムラインの違いを見て、pg_rewindを実行するかどうかを決定します。(AlexanderKukushkin)

    以前のPatroniには、pg_rewindをトリガーする条件が固定されていました。つまり、元のマスターを起動するとき、クラスター内の他のすべてのノードで指定されたノードへのスイッチオーバーを実行するとき、またはnofailoverタグを持つレプリカが存在するときです。これらすべてのケースに共通するのは、一部のレプリカが新しいマスターよりも先に存在する可能性があるということです。場合によっては、pg_rewindが何も行わなかったり、必要なときに実行されなかったりする場合もありました。この限られたルールのリストに依存する代わりに、PatroniはマスターとレプリカのWAL位置を(ストリーミングレプリケーションプロトコルを使用して)比較し、レプリカに巻き戻しが必要かどうかを確実に判断します。

Synchronous replication mode strict

  • 厳密モードを追加して同期レプリケーションのサポートを強化しました(JamesSewell、AlexanderKukushkin)

    通常、 synchronous_mode が有効で、マスターにレプリカが接続されていない場合、Patroniはマスターを書き込み可能な状態に保つために同期レプリケーションを無効にします。 synchronous_mode_strict オプションは、このオプションが設定されている場合、レプリカが不足している場合でもPatroniが同期レプリケーションを無効にしないように変更し、マスターにデータを書き込むすべてのクライアントを効果的にブロックします。自動フェイルオーバーによるデータ損失を防止する同期モードの保証に加えて、ストリクトモードでは、各書き込みが2つのノードに永続的に保存されるか、クラスター内にノードが1つしかない場合には完全に書き込みが行われないことが保証されます。

Configuration editing with patronictl

  • patronictlに設定編集を追加しました(AntsAasma、AlexanderKukushkin)

    DCSに保存されている動的クラスター構成を編集する機能を追加します。コマンドラインからのパラメーター/値の指定、$EDITORの呼び出し、またはyamlファイルからの構成の適用のいずれかをサポートします。

Linux watchdog support

  • Linux用のWatchdogサポートを実装する(AntsAasma)

    Patroniが実行されていない、または応答していないノード(高負荷などの理由)を再起動するために、LinuxソフトウェアWatchdogをサポートします。LinuxソフトウェアWatchdogは、応答しないノードを再起動します。Patroni設定のWatchdogセクションから、使用するWatchdogデバイス(デフォルトでは`/dev/watchdog`)とモード(オン、自動、オフ)を設定できます。 watchdog documentation から詳細情報を取得できます。

Add support for PostgreSQL 10

  • Patroniは、これまでにリリースされたPostgreSQL10のすべてのベータ版と互換性があり、リリースされるPostgreSQL10とも互換性があることが期待されます。

PostgreSQL-related minor improvements

  • Patroni設定ファイルまたはDCSの動的設定を介してpg_hba.confを定義します(AlexanderKukushkin)

    構成の postgresql セクションの pg_hba サブセクションで pg_hba.conf の内容を定義できるようにします。これにより、すべてのノードにログを記録し、手動で変更して設定をリロードするのではなく、DCSで pg_hba.conf を定義するだけで済むため、複数のノードでの pg_hba.conf の管理が簡素化されます。

    定義すると、このセクションの内容は現在の pg_hba.conf を完全に置き換えます。 hba_file PostgreSQLパラメータが設定されている場合、Patroniはこれを無視します。

  • UNIXソケットを介したローカルPostgreSQLクラスターへの接続をサポートしました(AlexanderKukushkin)

    use_unix_socket オプションをPatroni構成の postgresql セクションに追加します。trueに設定され、PostgreSQL unix_socket_directories オプションが空でない場合、Patroniはその最初の値を使用してローカルPostgreSQLクラスターに接続できるようになります。 unix_socket_directories が定義されていない場合、Patroniはそのデフォルト値を想定し、PostgreSQL接続文字列の host パラメータを完全に省略します。

  • リロード時のスーパーユーザーとレプリケーション資格情報の変更をサポートしました。(AlexanderKukushkin)

  • PostgreSQLデータディレクトリ(@jouir)の外部への構成ファイルの保存をサポート

    新しい構成 postgresql 構成ディレクティブ config_dir を追加します。デフォルトはデータディレクトリであり、Patroniによって書き込み可能である必要があります。

Bug fixes and stability improvements

  • EtcdEventIndexCleared例外とEtcdWatcherCleared例外を処理します(AlexanderKukushkin)

    無駄な再試行を回避することで、Etcdによって監視操作が終了された場合の回復が高速化されます。

  • Etcd障害時に回転するエラーを削除し、ログスパムを削減します(AntsAasma)

    2回目以降のEtcd接続失敗時に、すぐに再試行してスタックトレースをログに出力することは避けてください。

  • PostgreSQLプロセスをフォークするときにロケール変数をエクスポートする(OleksiiKliukin)

    NLSで構築されたPostgreSQLの英語以外のロケールでの「起動中にポストマスターがマルチスレッド化されました」という致命的なエラーを回避します。

  • レプリケーションスロットを削除する際の追加チェック(AlexanderKukushkin)

    場合によっては、WAL送信者によってPatroniがレプリケーションスロットを削除できないことがあります。

  • PostgreSQLの命名規則に準拠するために、レプリケーションスロット名を63(NAMEDATALEN-1)文字に切り詰めます。(NickScott)

  • PatroniからPostgreSQLクラスターに対して余分な接続が開かれるという競合状態を修正しました。(AlexanderKukushkin)

  • ノードが空のデータディレクトリで再起動するときにリーダーキーを解放します。(AlexKerney)

  • リーダーなしでブートストラップを実行するときに非同期エグゼキューターをビジーに設定します。(AlexanderKukushkin)

    これを行わないと、ノードが別のクラスターに属しているというエラーが発生する可能性があります。Patroniはクラスター内にリーダーが存在する必要のないブートストラップ方式でブートストラップされながら通常の業務を続行したためです。

  • WAL-Eレプリカ作成方法を改善しました(JoarWantborg、AlexanderKukushkin)。

    • WAL-Eベースのバックアップを解析するときにcsv.DictReaderを使用し、スペースで区切られた日付と時刻を持つISO日付を受け入れます。

    • 復元するWALの量を見積もるために、レプリカから現在のWAL位置を取得する機能をサポートします。以前は、コードはマスターノードでのみ利用可能なシステム情報関数を呼び出すために使用されていました。

バージョン1.2

このバージョンでは、同期レプリケーションの処理が大幅に改善され、起動プロセスとフェイルオーバーの信頼性が向上し、PostgreSQL9.6サポートが追加され、多くのバグが修正されています。さらに、これらのリリースノートを含むドキュメントはhttps://patroni.readthedocs.ioに移動されました。

Synchronous replication

  • 同期レプリケーションのサポートを追加します。(アリズ・アスマ)

    新しい構成変数 synchronous_mode を追加します。有効にすると、Patroniは synchronous_standby_names を管理して、利用可能な正常なスタンバイがあるときは常に同期レプリケーションを有効にします。同期モードが有効な場合、Patroniはマスター障害時に同期レプリケーションを行っていたスタンバイにのみ自動的にフェイルオーバーします。これは事実上、そのような場合にユーザーに表示されるトランザクションが失われないことを意味します。詳細な説明と実装の詳細については、 synchronous_mode を参照してください。

Reliability improvements

  • PostgreSQLが100%正常でない場合は、 leader optime キーに保存されているリーダーの位置を更新しないでください。リーダーキーの更新に失敗した場合は直ちに降格します。(アレクサンダー・ククシュキン)

  • 新しいレプリカのクローンを作成するターゲットのリストから異常なノードを除外します。(アレクサンダー・ククシュキン)

  • Etcdの場合と同様に、Consulに対して再試行およびタイムアウト戦略を実装します。(アレクサンダー・ククシュキン)

  • --dcs と --config-file を patronictl のすべてのオプションに適用します。(アレクサンダー・ククシュキン)

  • すべてのpostgresパラメータをpostgresql.confに書き込みます。(アレクサンダー・ククシュキン)

    Patroniによって構成されたPostgreSQLを pg_ctl だけで起動できるようになります。

  • 構成にユーザーが存在しない場合は例外を回避します。(キリル・プーシキン)

  • 異常なクラスターの一時停止を許可します。この修正が行われる前は、 patronictl が一時停止を実行しようとするノードが異常な場合、 patronictl はベイルアウトしていました。(アレクサンダー・ククシュキン)

  • リーダーウォッチ機能を改善します。(アレクサンダー・ククシュキン)

    以前は、レプリカは常にリーダーキーを監視していました(タイムアウトになるかリーダーキーが変更されるまでスリープ状態でした)。この変更により、レプリカのPostgreSQLが running 状態にあるときのみ監視され、PostgreSQLが停止/起動または再起動しているときは監視されません。

  • SIGCHILDをPID1として処理するときに競合状態に陥るのを避けてください。(AlexanderKukushkin)

    以前は、Patroni内の同じプロセスが新しいプロセスを生成し、そこからSIGCHILDを処理したため、Dockerコンテナ内で実行すると競合状態が発生する可能性がありました。この変更では、Patroniにfork/execsを使用し、元のPID1プロセスに子からの信号の処理を任せます。

  • WAL-Eの復元を修正しました。(オレクシー・クルーキン)

    以前のWAL-E復元では、マスターとの協議を完全に回避するために no_master フラグが使用されていたため、Patroniは常に pg_basebackup ではなくWALからの復元を選択していました。この変更により、 no_master の元の意味に戻ります。つまり、マスターが実行されていない場合、レプリケーション方法としてPatroniWAL-Eリストアが選択される可能性があります。後者は、メソッドに渡された接続文字列を調べることによって確認されます。さらに、再試行メカニズムがより堅牢になり、他の細かい点も処理されます。

  • 非同期DNSリゾルバーキャッシュを実装します。(アレクサンダー・ククシュキン)

    DNSが一時的に利用できない場合(たとえば、ノードが受信する過剰なトラフィックが原因)の失敗を回避します。

  • 開始状態とマスター開始タイムアウトを実装します。(アリツ・アスマ、アレクサンダー・ククシュキン)

    以前は、 pg_ctl はタイムアウトを待ってから、PostgreSQLが実行中であるとみなして喜んで踏み続けました。これにより、実際には実行されていないのにPostgreSQLがリスト上で実行中として表示され、競合状態が発生してフェイルオーバー、クラッシュリカバリ、またはフェイルオーバーによって中断されたクラッシュリカバリと巻き戻しのミスが発生しました。この変更により、 master_start_timeout パラメータが追加され、メインHAループに新しい状態( starting )が導入されます。 master_start_timeout が0の場合、マスターがクラッシュしたときにフェイルオーバー候補が存在するとすぐにフェイルオーバーします。それ以外の場合、Patroniはマスター上でPostgreSQLを起動しようとした後、タイムアウトの間待機します。有効期限が切れると、可能であればフェイルオーバーされます。手動フェイルオーバー要求は、マスターのクラッシュ中にタイムアウト期限が切れる前であっても受け付けられます。

    timeout パラメータを restart APIエンドポイントと patronictl に導入します。これが設定され、再起動にタイムアウトよりも長い時間がかかると、PostgreSQLは異常とみなされ、他のノードがリーダーロックを取得できるようになります。

  • 一時停止モードでの pg_rewind の動作を修正しました。(アリズ・アスマ)

    Patroniが巻き戻しが必要であると考えているが巻き戻しができない場合(つまり、 pg_rewind が存在しない場合)、一時停止モードでの不必要な再起動を避けます。 superuser 認証が pg_rewind 関連のPatroni設定セクションにない場合、 superuser (デフォルトのOSユーザー)のデフォルトの libpq 値にフォールバックします。

  • コールバックの実行をシリアル化します。新しいコールバックが実行されようとしているときに、同じタイプの前のコールバックを強制終了します。コールバックの実行時にゾンビプロセスが生成される問題を修正します。(アレクサンダー・ククシュキン)

  • リーダーキーがDCSに設定されているにもかかわらず、このリーダーキーへの更新が失敗する場合は、以前のマスターを昇格させないようにしてください。(アレクサンダー・ククシュキン)

    これにより、現在のマスターがEtcdおよび「一貫性のない読み取り」を許可する他のDCS内の少数のノードとともにパーティション化されている場合に、その役割を維持し続けるという問題が回避されます。

Miscellaneous

  • ブートストラップに post_init 構成オプションを追加します。(アレハンドロ・マルティネス)

    Patroniは、 initdb を実行し、新しいクラスターのPostgreSQLを起動した直後に、このオプションのスクリプト引数を呼び出します。スクリプトは、 superuser で接続URLを受け取り、パスワードを含む .pgpass ファイルを指すように PGPASSFILE を設定します。スクリプトが失敗すると、Patroniの初期化も失敗します。これは、新しいユーザーを追加したり、新しいクラスターに拡張機能を作成したりする場合に便利です。

  • PostgreSQL9.6サポートを実装します。(アレクサンダー・ククシュキン)

    wal_level = replica を hot_standby の同義語として使用し、あるフラグから別のフラグに変わるときにpending_restartフラグを回避します。(アレクサンダー・ククシュキン)

Documentation improvements

  • Patroniメイン loop workflow diagram _を追加します。(アレハンドロ・マルティネス、アレクサンダー・ククシュキン)

  • READMEを改善し、Helmチャートとリリースノートへのリンクを追加しました。(ローリ・アップル)

  • Patroniドキュメントを Read the Docs に移動します。最新のドキュメントはhttps://patroni.readthedocs.ioで入手できます。(オレクシー・クルーキン)

    さまざまなデバイス(スマートフォンを含む)からドキュメントを簡単に表示し、検索できるようにします。

  • パッケージをセマンティックバージョニングに移動します。(オレクシー・クルーキン)

    Patroniは、小規模だが重大なバグ修正に関する新しいマイナーバージョンのリリースを避けるために、major.minor.patchバージョンスキーマに従います。すべてのパッチを含むマイナーバージョンのリリースノートのみを公開します。

バージョン1.1

このリリースでは、一時停止モードを導入することでPatroniクラスターの管理が改善され、スケジュールされた条件付き再起動によるメンテナンスが改善され、PatroniとEtcdまたはZookeeperの対話の回復力が向上し、patronictlが大幅に強化されました。

Upgrade notice

1.0より前のリリースからアップグレードする場合は、1.0リリースノートで資格情報と構成形式の変更についてお読みください。

Pause mode

  • PatroniをPostgreSQLインスタンスの管理から一時的に切り離すための一時停止モードを導入しました(MuratKabilov、AlexanderKukushkin、OleksiiKliukin)。

    以前は、PostgreSQLを終了せずにPatroniを停止するには、SIGKILLシグナルを送信する必要がありました。新しい一時停止モードは、Patroniを終了せずにクラスタ全体でPostgreSQLからPatroniを切り離します。これは、Pacemakerのメンテナンスモードに似ています。PatroniはDCSでメンバーキーとリーダーキーを更新する責任を負いますが、そのプロセスでPostgreSQLサーバーを起動、停止、再起動することはありません。いくつかの例外があります。たとえば、手動フェイルオーバー、再初期化、再起動は引き続き許可されます。 a detailed description of this feature を読み取ることができます。

さらに、patronictlは、一時停止モードを切り替えるための新しい pause および resume コマンドをサポートしています。

Scheduled and conditional restarts

  • 再起動APIコマンドに条件を追加します(OleksiiKliukin)

    この変更により、再起動を行うために検証できるいくつかの条件が追加され、Patroniの再起動が強化されました。条件の中には、PostgreSQLロールがマスターまたはレプリカの場合に再起動する、PostgreSQLのバージョン番号を確認する、構成変更を適用するために再起動が必要な場合にのみ再起動するなどがあります。

  • スケジュールされた再起動を追加(OleksiiKliukin)

    将来の再起動をスケジュールできるようになりました。スケジュールされた再起動はノードごとに1つだけサポートされます。スケジュールされた再起動が必要なくなった場合は、クリアすることができます。スケジュールされた再起動と条件付き再起動の組み合わせがサポートされているため、たとえば、PostgreSQLのマイナーアップグレードを夜間にスケジュールして、管理スクリプトにpostgres固有のロジックを追加せずに、古いマイナーバージョンを実行しているインスタンスのみを再起動することが可能になります。

  • patronictlに条件付きおよびスケジュールされた再起動のサポートを追加しました(MuratKabilov)。

    patronictlrestartは、いくつかの新しいオプションをサポートします。スケジュールされたアクションを消去するためのpatronictlflashコマンドもあります。

Robust DCS interaction

  • loop_waitに応じてKazooタイムアウトを設定しました。(AlexanderKukushkin)

    当初、ping_timeoutおよびconnect_timeoutの値は、ネゴシエートされたセッションタイムアウトから計算されました。Patroniのloop_waitは考慮されていませんでした。その結果、1回の再試行にセッションタイムアウトよりも長い時間がかかる可能性があり、Patroniはロックを解除して降格する必要がありました。

    この変更により、pingと接続のタイムアウトがloop_waitの値の半分に設定され、接続の問題の検出が高速化され、ロックが失われる前に接続試行を再試行するのに十分な時間が残されました。

  • 元のリクエストが成功した後にのみEtcdトポロジを更新します。(AlexanderKukushkin)

    クライアントに認識されているEtcdトポロジの更新を、元のリクエストが完了するまで延期します。クラスタートポロジを取得するときは、Etcdクラスター内の既知のノード数に応じて再試行タイムアウトを実装します。これにより、クライアントは最新のノードのリストを取得するよりも、リクエストの結果を取得することを優先します。

    どちらの変更も、ネットワークの問題に直面してもPatroniからDCSへの接続をより堅牢にします。

Patronictl, monitoring and configuration

  • API経由でストリーミングレプリカに関する情報を返します(FeikeSteenbergen)

以前は、(接続の問題などにより)変更のストリーミングに失敗したPostgreSQLインスタンスについてPatroniに問い合わせる信頼性の高い方法はありませんでした。この変更により、pg_stat_replicationの内容が/patroniエンドポイント経由で公開されます。

  • patronictlscaffoldコマンドを追加(OleksiiKliukin)

    Etcdにクラスター構造を作成するコマンドを追加します。クラスターはユーザー指定のsysidとリーダーを使用して作成され、リーダーキーとメンバーキーの両方が永続化されます。このコマンドは、レプリカのみで構成されるPatroniクラスターがPatroniを認識しない外部マスターノードから複製される、いわゆるマスターレス構成を作成する場合に役立ちます。その後、リーダーキーを削除して、Patroniノードの1つを昇格し、元のマスターをPatroniベースのHAクラスターに置き換えることができます。

  • PostgreSQLバイナリを見つけるための構成オプション bin_dir を追加(AntsAasma)

    複数のPostgreSQLバージョンの同時インストールをサポートするLinuxディストリビューションの場合、PostgreSQLバイナリの場所を明示的に指定できると便利です。

  • (AlejandroMartínez)の custom_conf を使用して構成ファイルのパスをオーバーライドできるようにしました。

    カスタム構成ファイルのパスを許可します。これはPatroniによって管理されません( details )。

Bug fixes and code improvements

  • PatroniをPostgreSQL10以降の新しいバージョンのスキーマと互換性のあるものにします(FeikeSteenbergen)

    PostgreSQLのバージョンに基づいて条件付き再起動を行う場合、Patroniが2桁のバージョン番号を理解していることを確認してください。

  • pkgutilを使用してDCSモジュールを検索します(AlexanderKukushkin)

    DCSモジュールを見つけるためにディレクトリを手動で走査する代わりに、専用のPythonモジュールを使用します。

  • Patroniを起動するときは常にon_startコールバックを呼び出します。(AlexanderKukushkin)

    以前は、Patroniは、正しいロールですでに実行中のノードにアタッチするときにコールバックを呼び出しませんでした。コールバックはクライアント接続のルーティングによく使用されるため、接続ルーティングスキームで実行中のノードを登録できなくなる可能性があります。この修正により、Patroniは、すでに実行中のノードにアタッチしている場合でもon_startコールバックを呼び出します。

  • アクティブなレプリケーションスロットを削除しない(MuratKabilov、OleksiiKliukin)

    マスター上のアクティブな物理レプリケーションスロットをドロップしないようにします。いずれにしても、PostgreSQLはそのようなスロットを削除できません。この変更により、Patroniが管理していないレプリカ/コンシューマーをマスター上で実行できるようになります。

  • PostgreSQLインスタンスの起動中にPatroni接続を閉じるようにしました。(AlexanderKukushkin)

    PostgreSQLノードの起動時に、Patroniに以前の接続をすべて強制的に閉じます。postmasterがSIGKILLで強制終了された場合に、以前の接続が再利用されるという罠を回避します。

  • メンバー名からスロット名を構築するときに無効な文字を置き換えます(AntsAasma)

    スロットの命名規則に準拠していないスタンバイ名によってスロットの作成やスタンバイの起動が失敗しないようにしてください。スロット名のダッシュをアンダースコアに置き換え、スロット名に使用できない他のすべての文字をUnicodeコードポイントに置き換えます。

バージョン1.0

このリリースでは、HAクラスター全体のPostgreSQLおよびPatroni構成パラメーターを動的に変更できるグローバル動的構成が導入されています。また、多数のバグ修正も提供されます。

Upgrade notice

v0.90以前からアップグレードする場合は、必ずマスターより前にすべてのレプリカをアップグレードしてください。DCSにはレプリケーション資格情報が保存されなくなったため、古いレプリカは新しいマスターに接続できなくなります。

Dynamic Configuration

  • 動的なグローバル構成を実装する(AlexanderKukushkin)

    新しいRESTAPIエンドポイント/configを導入して、HAクラスター全体(マスターおよびすべてのレプリカ)に対してグローバルに設定する必要があるPostgreSQLおよびPatroni構成パラメーターを提供します。これらのパラメータはDCSで設定され、多くの場合、PostgreSQLやPatroniを中断することなく適用できます。Patroniは、一部の値でPostgreSQLの再起動が必要な場合に、API経由で表示される「再起動保留中」と呼ばれる特別なフラグを設定します。この場合、APIを介して手動で再起動を発行する必要があります。

    PatroniSIGHUPまたは/reloadへのPOSTにより、構成ファイルが再読み取りされます。

    変更できるパラメータと差分構成ソースの処理順序の詳細については、 Patroni configuration を参照してください。

    構成ファイルの形式はv0.90から 変更されました 。Patroniは依然として古い設定ファイルと互換性がありますが、ブートストラップパラメータを利用するには変更する必要があります。ユーザーは、 dynamic configuration documentation page を参照して更新することをお勧めします。

More flexible configuration *

  • postgresqlの設定とPatroniが接続するデータベース名を設定可能にしました(MisjaHoebe)

    「database」および「config_base_name」設定パラメータを導入します。特に、PipelineDBやその他のPostgreSQLフォークでPatroniを実行できるようになります。

  • 環境経由で一部のPatroni設定パラメータを設定できる機能を実装しました(AlexanderKukushkin)

    これらには、スコープ、ノード名、名前空間、およびシークレットが含まれており、動的環境、つまりKubernetesでのPatroniの実行が容易になります。詳細については、 supported environment variables を参照してください。

  • 環境ベースの構成を活用するために、組み込みのPatroniDockerコンテナーを更新します(FeikeSteenbergen)。

  • ZookeeperサポートをPatroniDockerイメージに追加しました(AlexanderKukushkin)

  • ZookeeperとExhibitionrの構成オプションを分割する(AlexanderKukushkin)

  • patroniclがPatroniのコードを再利用して設定を読み取るようにしました。(AlexanderKukushkin)

    これにより、patronictlは環境ベースの構成を利用できるようになります。

  • アプリケーション名をprimary_conninfoのノード名に設定します。(AlexanderKukushkin)

    これにより、特定のノードの同期レプリケーションの識別と構成が簡素化されます。

Stability, security and usability improvements

  • sysidをリセットし、バックアップの復元の進行中にpg_controldataを呼び出さないようにしました。(AlexanderKukushkin)

    この変更により、バックアップからのこのノードの長時間の初期化中にPatroniAPIヘルスチェックによって生成されるノイズの量が減少します。

  • 多数のpg_rewindのコーナーケースを修正しました(AlexanderKukushkin)

    ソースクラスターがマスターではない場合は、pg_rewindを実行しないでください。

    さらに、新しいパラメータ remove_data_directory_on_rewind_failure がtrueに設定されていない限り、巻き戻しが失敗したときにデータディレクトリを削除しないでください。デフォルトではfalseです。

  • DCSのレプリケーション接続文字列からパスワードを削除しました。(AlexanderKukushkin)

    以前は、Patroniは常にDCSのPostgresURLからのレプリケーション資格情報を使用していました。これは、patroni構成から資格情報を取得するように変更されました。シークレット(レプリケーションユーザー名とパスワード)はDCSで公開されなくなりました。

  • 降格呼び出し周りの非同期機構を修正しました。(AlexanderKukushkin)

    降格は、DCS対話をブロックすることなく完全に非同期で実行されるようになりました。

  • patronictlが設定されている場合、常に認証ヘッダーを送信するようにしました。(AlexanderKukushkin)

    これにより、Patroniが承認を必要とするように設定されている場合、patronictlは「保護された」リクエスト、つまり再起動または再初期化を発行できるようになります。

  • SystemExit例外を正しく処理します(AlexanderKukushkin)

    SIGTERMを受信したときにPatroniが適切に停止しない問題を回避します。

  • confd用のサンプルhaproxyテンプレート(AlexanderKukushkin)

    confideを使用して、DCSのpatroni状態からhaproxy構成を生成し、動的に変更します。

  • ドキュメントを改善および再構成して、新規ユーザーにとってより使いやすいものにします(LauriApple)

  • APIはpg_ctlの停止中にrole=masterを報告する必要があります。(AlexanderKukushkin)

    特にクラスター停止の場合、コールバック呼び出しの信頼性が高まります。さらに、「pg_ctl」を介して開始、停止、再起動呼び出しのタイムアウトを設定する「pg_ctl_timeout」オプションを導入します。

  • etcdの再試行ロジックを修正しました。(AlexanderKukushkin)

    再試行をより予測可能かつ堅牢にします。

  • Zookeeperコードの短いネットワーク障害に対する回復力を強化しました(AlexanderKukushkin)

    接続タイムアウトを減らして、Zookeeperの接続試行の頻度を増やします。

バージョン0.90

このリリースでは、Consulのサポートが追加され、新しい noloadbalance タグが含まれ、 clonefrom タグの動作が変更され、 pg_rewind 処理が改善され、 patronictl 制御プログラムが改善されています。

Consul support

  • Consulサポートの実装(AlexanderKukushkin)

    パトローニはEtcdとZookeeperに加えてConsulと対戦します。接続パラメータはYAMLファイルで構成できます。

New and improved tags

  • noloadbalance タグを実装します(AlexanderKukushkin)

    このタグにより、Patroniは常にレプリカがロードバランサーに利用できないことを返すようになります。

  • clonefrom タグの実装を変更しました(AlexanderKukushkin)

    以前は、ノード名を clonefrom に指定する必要があり、タグ付きレプリカが特定のノードから強制的に複製されました。新しい実装では clonefrom がブール型タグになります。これがtrueに設定されている場合、レプリカは他のレプリカがそこからクローンを作成する候補になります。複数の候補が存在する場合、レプリカはランダムに1つを選択します。

Stability and security improvements

  • 多数の信頼性の向上(AlexanderKukushkin)

    いくつかの偽のエラーメッセージを削除し、フェイルオーバーの安定性を向上させ、DCSからのデータの読み取り、シャットダウン、以前のリーダーの降格、および再接続に関するいくつかの特殊なケースに対処します。

  • 停止中にパトローニの子供たちが殺されないようシステムスクリプトを改善しました(JanKeirse、AlexanderKukushkin)

    以前は、Patroniを停止するときに、 systemd もPostgreSQLにシグナルを送信していました。PatroniはPostgreSQLを単独で停止しようとしたため、別のシャットダウン要求(スマートシャットダウン、その後の高速シャットダウン)が送信されることになりました。その結果、レプリカの切断が早すぎて、元のマスターが降格後に再参加できなくなりました。Alexanderによる事前調査をもとにJanによって修正されました。

  • 元のマスターがレプリカとして再参加する前にpg_rewindを呼び出すことができなかったいくつかのケースを排除しました。(OleksiiKliukin)

    以前は、前のマスターがクラッシュした場合にのみ pg_rewind を呼び出していました。pg_rewindがシステムに存在する限り、元のマスターに対して常にpg_rewindを実行するようにこれを変更します。これにより、レプリカが最新の変更を取得する前にマスターがシャットダウンされた場合(つまり「スマート」シャットダウン中)が修正されます。

  • 特に、単体テストと受け入れテストに対する数多くの改善により、ZookeeperとConsul(AlexanderKukushkin)のサポートが可能になりました。

  • TravisCIを高速化し、Zookeeper(エキシビター)とConsul(AlexanderKukushkin)に対するテスト実行のサポートを実装します。

    単体テストと受け入れテストは両方とも、各コミットまたはプルリクエストでEtcd、Zookeeper、およびConsulに対して自動的に実行されます。

  • PatroniからPostgreSQLコマンドを呼び出す前に環境変数をクリアしました(FeikeSteenbergen)

    これにより、Patroniが管理するPostgreSQLクラスターに接続することによってシステム環境変数が読み取られる可能性が防止されます。

Configuration and control changes

  • patronictlとPatroniの設定を統合しました(FeikeSteenbergen)

    patronictlは、Patroni自体と同じ設定ファイルを使用できます。

  • Patroniが環境変数から設定を読み取れるようにします(OleksiiKliukin)

    これにより、Patroniの構成の自動生成や、異なるソースからの単一の構成のマージが簡素化されます。

  • APIによって返される情報にデータベースシステム識別子を含めます(FeikeSteenbergen)

  • 利用可能なすべてのDCSに delete_cluster を実装しました(AlexanderKukushkin)

    patronictlでEtcd以外のDCSのサポートを有効にします。

バージョン0.80

このリリースでは、 カスケードレプリケーション のサポートが追加され、 スケジュールされたフェイルオーバー を提供することでPatroni管理が簡素化されます。新しいリリースに移行するために、Patroniの古いバージョン(特に0.78)をこのバージョンと組み合わせて使用​​する場合があります。スケジュールされたフェイルオーバーとカスケードレプリケーション関連の機能は、Patroni0.80以降でのみ動作することに注意してください。

Cascading replication

  • patroniノード(OleksiiKliukin)に replicatefrom タグと clonefrom タグのサポートを追加します。

replicatefrom タグを使用すると、レプリカはマスターではなくソースとして任意のノードを使用できるようになります。 clonefrom は最初のバックアップに対して同じことを行います。これらを組み合わせることで、Patroniはカスケードレプリケーションを完全にサポートできるようになります。

  • レプリケーション接続を実行していなくてもレプリカを初期化できる、レプリケーションメソッドの実行のサポートを追加しました(OleksiiKliukin)。

これは、S3またはFTPに保存されているスナップショットからレプリカを作成する場合に便利です。実行中のレプリケーション接続を必要としないレプリケーションメソッドでは、yaml設定で no_master:true を指定する必要があります。レプリケーション接続が存在する場合、これらのスクリプトは引き続き順番に呼び出されます。

Patronictl, API and DCS improvements

  • スケジュールされたフェイルオーバーを実装します(FeikeSteenbergen)。

    patronictlまたはAPI呼び出しを使用して、将来の特定の時刻にフェールオーバーが発生するようにスケジュールできます。

  • patronictlに dbuser および password パラメータのサポートを追加しました(FeikeSteenbergen)。

  • PostgreSQLバージョンをヘルスチェック出力に追加しました(FeikeSteenbergen)。

  • patronictlでのZookeeperのサポートを改善しました(OleksandrShulgin)

  • python-etcd0.43への移行(AlexanderKukushkin)

Configuration

  • Patroni(JanKeirse)用のサンプルシステム構成スクリプトを追加します。

  • PatroniがDB接続用の設定ファイルで指定されたスーパーユーザー名を無視する問題を修正しました(AlexanderKukushkin)。

  • Patroni(AlexanderKukushkin)によって起動されたポストマスター用に別のセッションIDとプロセスグループを作成して、CTRL-Cの処理を​​修正しました。

Tests

  • Patroni(AlexanderKukushkin、OleksiiKliukin)を実行する実際のシナリオをチェックするために、 behave を使用して受け入れテストを追加します。

    テストは behave コマンドを使用して手動で起動できます。また、プルリクエストやコミット後に自動的に起動されます。

    一部の古いバージョンのリリースノートは project's github page _にあります。