リリースノート
バージョン4.1.0
2025-09-23リリース
New features
systemd /"notify/"ユニットタイプのサポートを追加します Ronan Dunklau
通知ユニットタイプがないと、Patroniを起動し、すぐにsystemdを使用してSIGHUP信号を送信し、シグナルハンドラーを設定する前に効果的に強制終了することができます。
APIとctlで受信および再生LSN /ラグ情報を提供する Polina Bungina
Patroni REST API
/clusterエンドポイントとpatronictl listコマンドは、各レプリカメンバーの受信LSN、再生LSN、受信ラグ、および再生ラグ情報を提供するようになりました。スタンバイクラスターへのクリーンな降格を保証します。Polina Bungina
動的構成への
standby_clusterセクションの導入が、クリーンなクラスター降格につながることを確認します。patronictl demote-clusterおよびpromote-clusterコマンドを実装します。Polina Bunginaクラスターの降格とプロモーションの新しいコマンドは、動的な構成の編集と結果ステータスの確認の両方を処理します。
sync_priorityタグの実装Polina Bunginaこのパラメーターは、
synchronous_modeがonに設定されている場合、同期レプリカ選択中にメンバーが持つ優先順位を制御します。--validate-configの--printオプションを実装します。Polina Bungina検証が成功した後、ローカル構成環境構成オーバーライドを含むを出力します。
kubernetes.bootstrap_labelsの実装Polina Bunginaこの機能を使用すると、
initializing new cluster、running custom bootstrap script、starting after custom bootstrap、またはcreating replica状態にあるときにメンバーポッドに割り当てられるラベルを定義できます。重複したハートビートログを抑制する構成オプションを追加しました Michael Morris
trueに設定されている場合、同一の連続したハートビートログは出力されません。オプションの
cluster_type属性を永続的なレプリケーションスロットに追加します Michael Bankこれにより、特定の永久レプリケーションスロットを常に作成するか、プライマリまたはスタンバイクラスターでのみ作成するかを設定できます。
HTTP Serverヘッダーを構成可能にする デビッド・グリアソン
HTTP Serverヘッダーで公開される情報を制限できる
restapi.server_tokens構成パラメーターを導入します。レプリカメンバーでのレプリケーションの準備APIチェックを実装しますAnts Aasma
以前の実装では、PostgreSQLが開始されるとすぐにレプリカの準備ができていると考えられました。この変更により、レプリカポッドは、PostgreSQLがレプリケートし、リーダーからそれほど遠くない場合にのみ準備ができていると見なされます。
Improvements
ウォッチドッグ構成障害のログレベルを削減します。Ants Aasma
ウォッチドッグが
requiredモードで構成されていない限り、デバッグログレベルで`Could not promote Linux watchdog device`ログラインを表示します。以前は情報レベルで表示されていました。pg_stat_wal_receiverからwritten_lsnおよびlatest_end_lsnを活用します Alexander Kukushkin実際の書き込みLSNである
written_lsnは、実際にフラッシュLSNであるpg_last_wal_receive_lsn()によって返されるものよりも優先されるようになりました。latest_end_lsnは、ソースホスト上のWALフラッシュをポイントします。プライマリの場合、DCSに保存されている値はloop_wait秒ごとにのみ更新されるため、リプレイラグのより適切な計算が可能になります。failover=trueオプションで作成されたスロットとの相互作用を回避します。Alexander Kukushkinこの変更は、論理フェールオーバースロット機能を完全に機能させるために必要です。
PostgreSQL状態を
/metricsREST APIエンドポイントに追加します Ivan FilianinPostgreSQLインスタンスの状態情報を、
/metricsREST APIエンドポイントのPrometheus形式の出力で利用できるようになりました。
バージョン4.0.7
2025-09-22リリース
New features
PostgreSQL 18 RC1のサポートを追加します Alexander Kukushkin
GUCのバリデータールールが拡張されました。 Patroniは、新しいバックグラウンドI/Oワーカーを適切に処理するようになりました。
Bugfixes
WindowsでのローカルホストのIPv6への解決に関する潜在的な問題を修正しました。András Váczi
PostgreSQLで
listen_addressesを構成する場合、0.0.0.0または127.0.0.1を使用すると、IPv6を除くIPv4のみのリッスンが制限されます。ただし、一般的なWindowsシステムでは、localhostは多くの場合、デフォルトでIPv6アドレス::1に解決されます。互換性を保証するために、Patroniは、 Windowsシステムでlocalhostの代わりに127.0.0.1でリッスンするようにPostgreSQLを構成します。/configキーがDCSに存在する場合にのみグローバル構成を返すようになりました Alexander KukushkinDCSで
/configキーが欠落している場合、Patroni REST APIはエラーを発生する代わりに空の構成を返していました。Etcdが利用できない場合にフェイルセーフモードがトリガーされない問題を修正しました Alexander Kukushkin
Patroniは
etcd3例外を常に適切に処理していなかったため、フェイルセーフモードがトリガーされませんでした。シグナルハンドラーのリエントランシーデッドロックを修正します Waynerv
一部の特殊な場合に
PID=1を使用してDockerコンテナで実行されているPatroniは、SIGCHLDを受信した後にデッドロックが発生していました。WALを予約しない場合、永続的な物理スロットを再作成します イスラエル・バース・ルビオ
WALを予約せずにPatroniスコープの外部で作成された永続的な物理レプリケーションスロットは、
replication slot cannot be advancedエラーを発生させていました。これを回避するために、パトローニはそのようなスロットを再作成します。etcd3の監視キャンセルメッセージを適切に処理するようになりました Alexander Kukushkinetcd3は、監視チャネルにキャンセルメッセージを送信しても、接続は閉じません。これにより、Patroniは古いデータを使用することになります。 Patroniは、チャンク応答の読み取りループを中断し、Patroni側で接続を閉じることにより、それを解決します。HTTPConnectionソケットがpyopensslでラップされている場合のハンドルケース、Alexander KukushkinPatroniは、
python-etcdで適用されたpyopensslインターフェイスを正しく使用していませんでした。
Documentation improvements
2ノードクラスターガイダンスの向上 Nikolay Samokhvalov
フェイルオーバー中の動作とDCS要件を明確にします。
バージョン4.0.6
2025-06-06リリース
Bugfixes
より高い優先度のリーダーからのフェイルオーバーのバグを修正しました。Alexander Kukushkin
Patroniが現在のノードと同じ
LSNを報告する場合、優先度の高い元リーダーを無視するようにします。PGDATAの外部で作成されたpostgresql.confファイルのアクセス許可を修正しました。Michael BankkPGDATAディレクトリの外部にpostgresql.confファイルを作成するときは、システム全体のumask値を尊重します。synchronous_mode=quorumのスイッチオーバーのバグを修正しました。Alexander Kukushkin候補が指定されている場合、クォーラム要件をチェックしません。
クラスター用語を比較することにより、古いEtcdノードを無視します。Alexander Kukushkin
Etcdクラスターの最後の既知の/"raft_term/"を記憶し、クライアント要求を実行するときに、Etcdノードから報告された/"raft_term/"と比較します。
SIGHUPのPostgreSQL構成ファイルの更新 Alexander Kukushkin以前は、Patroniは、グローバルまたはローカル構成の変更が検出された場合にのみPostgreSQL構成ファイルを置き換えていました。
etcd3によって発生したUnavailable例外を適切に処理するようになりました。Alexander KukushkinPatroniは、同じ
etcd3ノードでこのような要求を再試行していましたが、別のノードに切り替えることがより良い戦略です。etcd3リース処理の改善 Alexander KukushkinPatroniがHAループごとに少なくとも1回
etcd3リースを更新するようにしてください。リーダーロックを取得しようとしたときに409ステータスコードの注釈を再確認します Alexander Kukushkin
Patroniバージョン4.0.3で読み込まれたリーダーオブジェクトに対して行われたのと同じ動作を実装します。
スロットを進めるときは
replay_lsnを考慮してください Polina Bunginareplay_lsnを超えてレプリカのスロットを進めないでください。さらに、レプリカ上のこのスロットのconfirmed_flush_lsnを既に超えているが、レプリカがこのスロットがプライマリにある実際のLSNをまだ再生していない場合、スロットをreplay_lsn位置に進めます。プロモート後に
CHECKPOINTが実行されるようにしました。 Alexander KukushkinCHECKPOINTがまだ完了していないため、降格時にチェックポイントタスクがリセットされなかった可能性があります。これにより、次のプロモートがトリガーされたときに古いresultを使用することになりました。/"offline/"降格の同時実行は避けてください Alexander Kukushkin
遅いシャットダウンの場合、次のハートビートループがDCSエラー処理メソッドに再度ヒットし、
AsyncExecutor is busy, demoting from the main thread警告が発生し、オフライン降格が再度開始される場合があります。初期化失敗時にデータディレクトリの名前を変更する前に
data_dir値を正規化する Waynervdata_dirパラメーター値の末尾のスラッシュによって、初期化失敗の後に名前変更プロセスが中断されないようにします。synchronous_standby_namesに期待値が含まれていることを確認してください Alexander Kukushkin以前は、非クォーラム同期レプリケーションのステートマシンを実装するメカニズムは、
synchronous_standby_namesの実際の値をチェックせず、その結果、pg_stat_replicationがsynchronous_standby_namesのサブセットである場合、synchronous_standby_namesの古い値が使用されました。
バージョン4.0.5
2025-02-20リリース
Stability improvements
python-json-logger>=3.1との互換性。Alexander Kukushkin古いAPIの使用によって生成された警告を削除します。
Python 3.13との互換性 Alexander Kukushkin
Python 3.13に対してテストを実行します。
pyinstaller>=4.4との互換性ジョー・ジェンセンpyinstallertoc属性が存在しない場合、デフォルトのiter_modulesにフォールバックします。PostgreSQL 9.5サポートに関する問題を修正しました。Alexander Kukushkin
pg_rewind出力フォーマットを適切に処理します。synchronous_standby_namesフォーマットが/"num/"仕様をサポートしていないことを検討します。
urlparseの最新の変更との互換性 Alexander Kukushkinurlparseは、URLに[]文字を含む複数のホストを受け入れなくなりました。問題を軽減するには、可能な場合はlibpqからPQconninfoParse()のネイティブラッパーに切り替え、libpqの古いバージョンにリンクされている古いpsycopg2バージョンにのみ実装を使用します。
Bugfixes
再起動の確認時に再起動するメンバーのみを表示します András Váczi
以前は、
patronictl restart <clustername> --pendingを実行すると、再起動が保留中かどうかに関係なく、確認にすべてのメンバーがリストされていました。Patroniでの長時間実行ジョブをキャンセルして、レプリカブートストラップ障害が発生したデータディレクトリを削除する Alexander Kukushkin
以前は、Patroniは
pg_basebackup/wal-g/pgBackRest/barmanまたは同様のものが実行されているときにレプリカブートストラップを実行できました。patronictl edit-configのスラッシュを含むクラスター名を適切に処理するようになりました。Antoni Murcluster_nameのスラッシュをアンダースコアに置き換えます。物理スロットのドロップが早すぎるのは避けてください Alexander Kukushkin
フェールオーバーの後、新しいプライマリでは--このメンバーが昇格するまで、レプリカでは-クラスター内にリーダーが存在するまで、
xminを含む物理レプリケーションスロットの削除を延期します。controldata()のサブプロセスによって発生したすべての例外を処理するようになりました。Alexander KukushkinPatroniは、
pg_controldataユーティリティを呼び出したときに発生する可能性のあるすべての例外を適切に処理していませんでした。フェイルオーバー時に保持されない元リーダーのスロットのバグを修正しました Alexander Kukushkin
フェールオーバーでは、元のリーダーの
/memberキーが正確に同時に有効期限が切れる間、DCSに存在するメンバーに誤って依存しないようにします。クォーラムステートマシンのいくつかのバグを修正しました。Alexander Kukushkin
リーダーレースの正常なノードが存在するかどうかを評価する場合、降格する前に、クォーラム要件を考慮する必要があります。それがないと、元のリーダーは非同期ノードに囲まれてリカバリーすることになる可能性があります。
QuorumStateResolverは、レプリカノードがすぐに参加および切断された場合を正しく処理していませんでした。
Improvements
空または非辞書構成ファイルのエラーを改善しましたJulian
Patroni構成ファイルに有効な
Mappingオブジェクトが含まれるかどうかを検証するときに、より明示的な例外をスローします。
バージョン4.0.4
2024-11-22リリース
Stability improvements
py-consulモジュールとの互換性を追加しました。Alexander Kukushkinpython-consulモジュールは長い間メンテナンスされていませんが、py-consulは公式の代替品です。 python-consulとの下位互換性は保持されます。prettytable>=3.12.0モジュールとの互換性を追加しました。Alexander Kukushkin非推奨の警告に対処します。
ydiff==1.4.2モジュールとの互換性 Alexander Kukushkin最新バージョンの互換性問題を修正し、
requirements.txtでバージョンを制約し、最新バージョンの互換性テストを導入します。
Bugfixes
プライマリリカバリが失敗した後に
on_role_changeコールバックを実行します。Polina Bungina、Alexander Kukushkinさらに、クラッシュ後に起動に失敗したプライマリの
on_role_changeコールバックを実行して、レプリカとしてのさらなる起動が失敗した場合でも、コールバックが実行される可能性を高めます。patronictl list -Wのスレッドリークを修正しました。Alexander KukushkinDCSインスタンスオブジェクトをキャッシュして、スレッドリークを回避します。
サポートされているパラメーターのみが接続文字列に書き込まれるようにしました Alexander Kukushkin
Patroniは、新しいバージョンで導入されたパラメーターを接続文字列に渡していましたが、これが接続エラーを引き起こしていました。
バージョン4.0.3
2024-10-18リリース
Bugfixes
パスワードを公開しないようにユーザーを作成するときに
pgauditを無効にする kvisetPatroniは、
pgaudit拡張機能が有効になっているときに、作成時にsuperuser、replication、およびrewindパスワードをログに記録していました。混合セットアップの問題を修正しました。パトロニv4以前のプライマリとv4+のレプリカ。 Alexander Kukushkin
リーダーで実行されているパトロニバージョンが4.0.0より前の場合、
/statusキーからメンバーのスロット位置を取得しようとするのではなく、/membersキーから抽出したxlog_locationを使用します。そうしないと、レプリカでのWALの蓄積が発生しています。Patroniバリデーターのない有効なPostgreSQL GUCを無視しないでください Polina Bungina
GUCにPatroniバリデーターがないが、実際に有効なGUCであるかどうかを
postgres --describe-configに対してチェックします。
Improvements
K8sでリーダーオブジェクトを読み取るときに409ステータスコードの注釈を再確認します。Alexander Kukushkin
要求はターゲットを正常に更新しましたが、
PATCH要求がパトロニによってキャンセルされた場合、追加の更新を回避します。sslnegotiationクライアントサイド接続オプションのサポートを追加しました Alexander Kukushkinsslnegotiationは、最終的なPostgreSQL 17リリースに追加されました。
バージョン4.0.2
2024-09-17リリース
Bugfixes
構成検証ファイルの検出中に例外を処理する Alexander Kukushkin
Patroniがリスト操作を実行するための十分な権限を持っていないディレクトリをスキップします。
非アクティブなホット物理レプリケーションスロットが
xminを保持しないことを確認します。Alexander Kukushkin、Polina Bunginaバージョン3.2.0以降、Patroniはレプリカにすべてのメンバーの物理レプリケーションスロットを作成し、定期的に
pg_replication_slot_advance()ファンクションを使用してそれらを前進させます。ただし、何らかの理由でhot_standby_feedbackが有効になっており、プライマリがレプリカに降格されている場合、現在非アクティブなスロットにはNOT NULLxmin値が新しいプライマリに伝播されます。これにより、xminホリゾンは前方に移動されず、バキュームはデッドタプルをクリーンアップできません。この修正では、Patroniは非アクティブであるはずがNOT NULLxmin値を持つ物理レプリケーションスロットを再作成します。スタートアップフェーズ中に未処理の
DCSErrorを修正しました Waynervノード名の一意性を確認する前に、DCS接続を確認してください。
pg_settingsを照会するときにCMDLINE_OPTIONSGUCを明示的に含めます Alexander KukushkinPatroniが実行中のスタンバイに参加するときに、コマンドラインパラメーターとしてポストマスターに渡されたすべてのGUCが復元されていることを確認します。これは、Patroni 3.2.2で修正されたバグのフォローアップです。
synchronous_standby_namesクォーティングロジックのバグを修正しました。Alexander KukushkinPostgreSQLドキュメントによると、
ANYおよびFIRSTキーワードは二重引用符で囲まれることになっていますが、Patroniは以前にこれをしていません。キープアライブ接続の範囲外の問題を修正する hadizamani021
ttlセットに基づいて計算されたkeepaliveオプション値が、現在のプラットフォームの最大許可値を超えていないことを確認します。
バージョン4.0.1
2024-08-30リリース
Bugfix
Patroniは自分自身に不要なレプリケーションスロットを作成していました Alexander Kukushkin
nameに大文字または特殊文字が含まれている場合に発生していました。
バージョン4.0.0
2024-08-29リリース
警告
このバージョンでは、/"primary/"を優先して、/"master/"用語を削除する作業が完了しました。これは、いくつかの破壊的な変更を意味します。リリースノートを注意深くお読みください。 Patroni 4+へのアップグレードは、Patroni 3.1.0以降を実行している場合にのみ確実に機能します。古いバージョンから4+に直接アップグレードすることは可能ですが、ノードの残りの部分が他のパトロニバージョンで実行されているときにプライマリに障害が発生すると、予期しない動作が発生する可能性があります。
Breaking changes
Patroniコードから非包括的な/"master/"用語を削除するときに、次の重大な変更が導入されました。
Kubernetesでは、Patroniはデフォルトで
rolelabelをprimaryに設定します。古い動作を維持し、ダウンタイムまたは長く複雑な移行を回避したい場合は、パラメーターkubernetes.leader_label_valueおよびkubernetes.standby_leader_label_valuemasterを構成できます。続きを読むrole。Patroniロールは、
masterではなくprimaryとしてDCSに書き込まれます。Patroni REST APIによって返されるPatroniロールが
masterからprimaryに変更されました。Patroni REST APIは、
/switchover、/failover、/restartエンドポイントへの要求でrole=masterを受け入れなくなりました。/metricsREST APIエンドポイントはpatroni_masterメトリックを報告しなくなります。patronictlは、どのコマンドの--masterオプションを受け入れなくなりました。 代わりに--leaderまたは--primaryオプションを使用する必要があります。カスタムレプリカ作成方法の宣言的構成の
no_masterオプションは特別なオプションとして扱われなくなりました。代わりにno_leaderを使用してください。patroni_wale_restoreスクリプトは--no_masterオプションを受け入れなくなりました。patroni_barmanスクリプトは--role=masterオプションを受け入れなくなりました。すべてのコールバックスクリプトは、
role=masterの代わりに渡されたrole=primaryオプションを使用して実行されます。
patronictl failoverは、Patroni 3.2.0以降非推奨になった--leaderオプションを受け入れません。Patroni 3.2.0が削除されたため、ユーザー作成機能
bootstrap.users構成セクションは非推奨になりました。
New features
クォーラムベースのフェイルオーバーAnts Aasma、Alexander Kukushkin
この機能は、クォーラムベースの同期レプリケーションPostgreSQL v10から利用可能を実装しています。これは、1つのスタンバイへのレプリケーションのより高いレイテンシを他のスタンバイで補うことができるため、通常動作中でもワーストケースのレイテンシを削減するのに役立ちます。 Patroniは、追加の安全対策を実装して、受信した最新のトランザクションに基づいてフェールオーバー候補を選択することにより、ユーザーに可視的なデータの損失を防ぎます。
pg_dist_nodeにCitusセカンダリを登録する Alexander KukushkinPatroniは、
role==replica、state==runningを含むノードのリストを維持するようになりました。noloadbalancerole==replicapg_dist_nodeメンバーのレプリケーションスロットの構成可能な保持期間 Alexander Kukushkin
メンバーキーが存在しないときにメンバーレプリケーションスロットを保持する時間を制御する
member_slots_ttlグローバル構成パラメーターのサポートを実装します。Patroniによって作成されたログファイルのアクセス許可を設定可能にします Alexander Kukushkin
Patroniによって作成されたログファイルに特定の権限を設定できます。指定しない場合、権限は現在の
umask値に基づいて設定されます。PostgreSQL 17 beta3との互換性 Alexander Kukushkin
GUCのバリデータールールが拡張されました。 Patroniは、シャットダウン中にすべての新しい補助バックエンドを処理し、論理レプリケーションスロットの同期に必要なため、
primary_conninfoにdbnameを設定します。Patroni構成検証のための
--ignore-listen-portオプションを実装します Sahil Naphadepatroni --validate-configの実行時に、既にバインドされたポートを無視できるようにします。
Improvements
wal_log_hintsを構成可能にする Paul_Kimuse_pg_rewindがoffに設定されている場合、wal_log_hints構成のオーバーヘッドを回避できます。pg_basebackupコマンドをDEBUGレベルでログWaynerv失敗した初期化のデバッグを容易にします。
Bugfixes
フェイルセーフになっているときにカスケードノードの永久スロットを進めます Alexander Kukushkin
フェイルセーフモードがアクティブになっているときに、カスケードレプリカのスロットがプライマリで適切に進められていることを確認します。これは、
POST /failsafeREST API要求でのレプリカ応答をxlog_locationで拡張することにより実行されます。現在のノードを同期として選択しないでください Alexander Kukushkin
現在のプライマリの名前と一致する
application_nameを使用して、現在のプライマリノードからストリーミングしている/"something/"が存在する可能性があります。 Patroniはこの状況を適切に処理していなかったため、プライマリが同期ノードとして宣言される可能性があり、その結果、スイッチオーバーをブロックしていました。POST /failsafeの
restapi.allowlist_include_membersを無視する Alexander KukushkinGUC検証の向上Polina Bungina
postgres --describe-configコマンドの実行を介した追加の検証のため、以前はパトロニ構成を介してそこにリストされていないGUCを設定することはできませんでした。この制限は削除されました。UNIXソケットが検出されたときに、
localhostの行を.pgpassファイルに追加します Alexander Kukushkin指定された
hostパラメーターが/文字で始まる場合、Patroniは.pgpassファイルに追加行を追加します。これにより、hostがデフォルトのソケットディレクトリパスと一致する場合のコーナーケースをカバーできます。ロギングの問題を修正する Waynerv
フェイルセーフ処理ログで適切な要求URLを定義し、ポストマスターチェックログのタイムスタンプの順序を修正しました。
バージョン3.3.2
2024-07-11リリース
Bugfixes
プレーンPostgres同期レプリケーションモードを修正しました。Israel Barth Rubio
synchronous_modeがPatroniに導入されてから、プレーンのPostgres同期レプリケーションは機能していませんでした。このバグ修正では、Patroniはsynchronous_modeが無効になっている場合、ユーザーの構成に従ってsynchronous_standby_namesの値を設定します。その場合、スタンバイでの論理スロットの無効化を処理します。Polina Bungina
スタンバイのPG16論理レプリケーションスロットは、ホライズンによって無効にすることができます。今後、パトロニは無効になったスロットのコピー、つまり再作成を強制します。
論理スロットアドバンスとコピーで競合状態を修正しました Alexander Kukushkin
このバグのため、無効な論理レプリケーションスロットがPostgreSQLの再起動で複数回コピーされた場合に発生する可能性がありました。
バージョン3.3.1
2024-06-17リリース
Stability improvements
Python 3.12との互換性 Alexander Kukushkin
logging.LogRecordに追加された新しい属性をハンドルします。
Bugfixes
replicatefromタグ処理の無限再帰を修正しました Alexander Kukushkinこの修正の一部として、
is_physical_slot()のチェックと調整のドキュメントも改善します。スタンバイクラスターでの間違ったロール報告を修正しました Alexander Kukushkin
synchronous_standby_namesおよび同期レプリケーションは、実際のプライマリノードでのみ動作し、カスケードレプリケーションの場合、Postgresによって単に無視されます。この修正の前に、patronictl listおよびGET /clusterは一部のノードを同期として誤って報告していました。allow_in_place_tablespacesGUCの可用性を修正しました Polina Bunginaallow_in_place_tablespacesはPostgreSQL 15に追加されただけでなく、PostgreSQL 10-14にバックパッチされました。
バージョン3.3.0
2024-04-04リリース
警告
古いPartoniバージョンはすべて ydiff>=1.3 と互換性がありません。
問題を/"fix"するために使用できる次のオプションがあります。
Patroniを最新バージョンにアップグレードする
Patroniをインストールした後、
ydiff<1.3をインストールしますcdiffモジュールのインストール
New features
auth_dataをZookeeperクライアントに渡す機能を追加します。Aras Mumcuyan接続に使用する認証資格情報を指定できます。
Barman統合のためのcontribスクリプトを追加しました。Israel Barth RubioBarman操作をリモートで実行でき、カスタムブートストラップ/カスタムレプリカメソッドまたはon_role_changeコールバックとして使用できるアプリケーションpatroni_barmanを提供します。詳細については、patroni_barmanを確認してください。JSONログ形式のサポートalisalemmiplainデフォルトとは別に、Patroniはjsonログ形式もサポートするようになりました。python-json-logger>=2.0.2ライブラリをインストールする必要があります。pending_restart_reason情報の表示 Polina Bunginapending_restartフラグが設定される原因となったPostgreSQLパラメーターに関する拡張情報を提供します。patronictl listと/patroniの両方のREST APIエンドポイントは、パラメーター名とその/"diff/"をpending_restart_reasonとして表示するようになりました。nostreamタグの実装 Grigory Smolkinnostreamタグがtrueに設定されている場合、ノードはレプリケーションプロトコルを使用してWALをストリーミングせず、代わりにアーカイブリカバリに依存しますrestore_commandが構成されている場合。また、ノード自分自身とそのすべてのカスケードレプリカの永久論理レプリケーションスロットのコピーと同期も無効にします。
Improvements
logセクションの検証を実装します。Alexander Kukushkinこれまで、バリデーターは、提供されたロギング構成の正しさをチェックしていませんでした。
PostgreSQLパラメーター変更のロギングを向上させました。Polina Bungina
古い値を人間が判読可能な形式に変換し、
pg_controldataとPatroniグローバル構成の不一致に関する情報をログに記録します。
Bugfixes
許可されない
pg_basebackupオプションを適切にフィルターして除外する Israel Barth Rubioバグのため、Patroniは
- setting: value形式で提供されている場合、basebackupレプリカブートストラップ方法用に構成された許可されていないオプションを適切にフィルタリングしていませんでした。etcd3認証エラー処理を修正しました Alexander Kukushkin要求を実行する直前に認証が行われなかった場合、
etcd3認証エラーが常に1回リトライします。また、再認証時にウォッチャーを再起動しないでください。バリデーターファイル検出のロジックの改善 Waynerv
importlibライブラリを使用して、可能な場合は使用可能な構成パラメーターを含むファイルを検出しますPython 3.9以降の場合。この実装はより安定しており、zipアーカイブに基づいたPatroniディストリビューションを中断しません。standby_clusterセクションで複数のホストが指定されている場合にのみtarget_session_attrsを使用します。Alexander Kukushkinstandby_cluster.hostセクションにコンマで区切られた複数のホストが含まれる場合にのみ、target_session_attrs=read-writeがスタンバイリーダーノードのprimary_conninfoに追加されるようになりました。ydiffライブラリバージョン1.3+の互換性コードを追加しました Alexander KukushkinPatroniは、Pythonモジュールではなく単なるターミナルツールであると考えられているため、パブリックではない
ydiffのいくつかのAPIに依存しています。残念ながら、1.3のAPIの変更により、古いPatroniバージョンが壊れました。
バージョン3.2.2
2024-01-17リリース
Bugfixes
DCSがワイプされたときにレプリカを復元させないでください Alexander Kukushkin
これは、パトローニがスタンドアロンのPGクラスターを引き継ぐことになっている方法で発生していました。
Consulから更新されたばかりの同期キーを取得するときに一貫した読み取りを使用するようになりました。Alexander Kukushkin
Consulは、更新したキーの
ModifyIndexをすぐに取得するインターフェイスを提供していないため、明示的な読み取り操作を実行する必要があります。古い読み取りはデフォルトで許可されているため、キーの古いバージョンを取得する場合がありました。再起動が必要なパラメーターが元の値にリセットされた場合、Postgres構成をリロードします Polina Bungina
以前は、Patroniは構成を更新せず、
pending_restartをリセットするだけでした。同期モードで非同期候補へのフェイルオーバーを実行する際の確認プロンプトメッセージの誤った反転ロジックを修正しました。Polina Bungina
この問題は
patronictlにのみ存在しました。patronictlのフェイルオーバー候補からリーダーを除外する ポリナ・ブンギナクラスターが正常な場合、既存のリーダーへのフェールオーバーはno-opです。
Citusデータベースと拡張機能を冪等に作成する Alexander Kukushkin、Zhao Junwang
Citusデータベースに依存関係を追加する必要がある場合に、
post_bootstrapスクリプトでそれらを作成できます。矛盾する
nofailoverタグをフィルタリングしないでください。Polina Bunginaノードに設定された構成
{nofailover: false, failover_priority: 0}では、レースに参加できませんでしたが、nofailoverタグが優先される必要があるため、レースに参加する必要があります。PyInstallerのフリーズした問題を修正しました Sophia Ruan
freeze_support()はargparseの後に呼び出されたため、PatroniはPostgresを起動できませんでした。patronictlおよびCitus構成の構成ジェネレーターのバグを修正しました。Israel Barth Rubioこれにより、環境変数を介して設定された
patronictlおよびCitus構成パラメーターが生成された構成に書き込まれません。実行中のスタンバイに参加するときに、リカバリGUCと一部のパトローニ管理パラメーターを復元します Alexander Kukushkin
Patroniは、内部構造の1つで
portが欠落していることに関するエラーが発生し、Postgres v12以降の再起動に失敗していました。pending_restartフラグ周辺の修正Polina Bunginarecovery_target_action = promoteでカスタムブートストラップしている場合、または誰かがたとえばALTER SYSTEMを使用してhot_standbyまたはwal_log_hintsを変更したときは、pending_restartを公開しないでください。
バージョン3.2.1
2023-11-30リリース
Bugfixes
patronictlの--format引数の受け入れられる値を制限します Alexander Kukushkin任意の文字列を受け入れ、値が認識されない場合は出力を生成していませんでした。
リーダーキーを解放する前に、シャットダウン時にレプリカノードがチェックポイントLSNを受信したことを確認します。Alexander Kukushkin
以前は、場合によっては、CHECKPOINTが続くSWITCHレコードのLSNを使用していましたアーカイブモードが有効になっている場合。その結果、以前のプライマリは場合によって
pg_rewindを実行する必要がありましたが、データの損失は関係ありません。ノード名の一意性チェックを実行するときに実際のHTTP要求を実行します Alexander Kukushkin
コンテナでPatroniを実行している場合、トラフィックがポートでリッスンし、着信接続を受け入れる
docker-proxyを使用してルーティングされる可能性があります。それは偽陽性を引き起こしていました。Etcd v2でのCitusサポートを修正しました。Alexander Kukushkin
Patroniは、Etcd v2を使用した新しいCitusクラスターの展開に失敗していました。
Postgres v16+での
pg_rewindの動作を修正しました。Alexander Kukushkinpg_waldumpのエラーメッセージ形式がv16で変更されたため、必要でない場合でもパトロニによってpg_rewindが呼び出されました。カスタムブートストラップのバグを修正しました。Alexander Kukushkin
Patroniは、ブートストラップコマンド自分自身である
--command引数を誤って適用していました。REST APIヘルスチェックエンドポイントに関する問題を修正しました Sophia Ruan
接続が適切にクローズされていないため、Postgresの再起動後、Postgresの
unknown状態を返す可能性がありました。postgres --describe-config出力結果をキャッシュする Waynervこれらは、PostgreSQL構成の検証にどのGUCが利用できるかを判断するために使用され、Patroniの実行中にこのリストが変更されることは想定されていません。
バージョン3.2.0
2023-10-25リリース
Deprecation notice
bootstrap.usersサポートはバージョン4.0.0で削除されます。新しいクラスターを展開した後にユーザーを作成する必要がある場合は、bootstrap.post_bootstrapフックを使用してください。
Breaking changes
loop_wait + 2*retry_timeout <= ttlルールを適用し、最小可能値をハードコードする Alexander Kukushkin最小値
loop_wait=2、retry_timeout=3、ttl=20。値が小さいか、ルールに違反している場合、それらは調整され、警告がPatroniログに書き込まれます。
New features
フェイルオーバーの優先順位 Mark Pekala
tags.failover_priorityの助けを借りて、リーダーレース中にノードの優先順位を高くできるようになりました。詳細については、ドキュメントrefタグを参照してください。patroni --generate-config [--dsn DSN]およびpatroni --generate-sample-configを実装しました Polina Bungina実行中のPostgreSQLクラスターの構成ファイル、または新しいPatroniクラスターのサンプル構成ファイルを生成できます。
Patroni REST APIのPostgresへの専用接続を使用する Alexander Kukushkin
システムにストレスがかかっている場合、メインハートビートループのブロックを回避するのに役立ちます。
ノードsskserkの
nameでいくつかのエンドポイントを強化するモニタリングエンドポイントの場合、
nameはscopeの横に追加され、メトリックエンドポイントの場合、nameがタグに追加されます。厳密なフェイルオーバー/スイッチオーバーの違いを保証します Polina Bungina
ログメッセージの精度が向上し、正常な同期クラスターの非同期ノードへのフェールオーバーが可能になります。
永続的な物理レプリケーションスロットを永続的な論理スロットと同様に動作させます Alexander Kukushkin
リーダーになることができるすべてのノードで永続的な物理レプリケーションスロットを作成し、
pg_replication_slot_advance()ファンクションを使用してスタンバイノード上のスロットのrestart_lsnを進めます。patronictlの--dcs引数を介して名前空間を指定する機能を追加しました。Israel Barth Rubio構成ファイルなしで
patronictlを使用すると便利です。カスタムブートストラップ構成での追加パラメーターのサポートを追加します。Israel Barth Rubio
以前は、カスタム引数を
commandに追加することのみが可能でしたが、それらをマッピングとしてリストできるようになりました。
Improvements
citus.local_hostnameGUCを、パトロニがPostgresに接続するために使用する値と同じ値に設定します。Alexander KukushkinCitusがローカルPostgresに接続したい場合があります。デフォルトでは、
localhostを使用しますが、常に使用できるわけではありません。
Bugfixes
スタンバイクラスターの
synchronous_mode設定を無視する Polina BunginaPostgresはカスケード同期レプリケーションをサポートしておらず、
synchronous_modeがスタンバイクラスターでのスイッチオーバーを中断していたことは無視されません。on_reloadコールバックのSIGCHLDを処理します Alexander Kukushkinこれを行わないと、ゾンビプロセスが発生し、次の
on_reloadが実行された場合にのみ刈り取られます。Etcd v3で作業する際の
AuthOldRevisionエラーを処理します。Alexander Kukushkin、Kenny Doこのエラーは、EtcdがJWTを使用するように構成されている場合、Etcdのユーザデータベースが更新されたときに発生します。
バージョン3.1.2
2023-09-26リリース
Bugfixes
wal_keep_sizeチェックのバグを修正しました。Alexander Kukushkinwal_keep_sizeは、通常ユニットがあるGUCであり、パトロニはその値をintにキャストできませんでした。その結果、bootstrap.dcsの値はその後/configキーに書き込まれませんでした。/syncキーとsynchronous_standby_names間の不一致を検出および解決するようになりました。Alexander Kukushkin通常、Patroniは非常に特定の順序で
/syncおよびsynchronous_standby_namesを更新しますが、バグの場合、または誰かが手動でリセットした場合synchronous_standby_names、Patroniは一貫性のない状態になってしまいました。その結果、フェールオーバーが非同期ノードで発生する可能性がありました。実行中のPostgresに参加するときにGUCの値を読み取ります Alexander Kukushkin
pauseで再起動すると、Patroniはpostgresql.confからsynchronous_standby_namesGUCを破棄していました。それを解決し、同様の問題を回避するために、Patroniは、既に実行中のPostgresに参加する場合、GUCの値を読み取ります。ノードの一意性をチェックする際の迷惑な警告を沈黙させました Alexander Kukushkin
Patroniがすぐに再起動された場合、
WARNINGメッセージはurllib3によって生成されます。
バージョン3.1.1
2023-09-20リリース
Bugfixes
プロモート時にフェイルセーフ状態をリセットする ChenChangAo
フェールセーフモードがアクティブになった直後にスイッチオーバー/フェールオーバーが発生した場合、フェールセーフが非アクティブになった後、新しく昇格したプライマリは自分自身を降格していました。
patronictlの無駄な警告を沈黙させます。Alexander KukushkinpatronictlがPatroniと同じpatroni.yamlファイルを使用し、PGDATAディレクトリにアクセスできる場合、グローバル構成の不正な値に関する迷惑な警告が表示されていた可能性があります。コーナーケースの同期モードを明示的に有効にする Alexander Kukushkin
プライマリからストリーミングするレプリカがない場合、同期モードは事実上アクティブ化されません。
0整数値検証のバグを修正しました。Israel Barth Rubioほとんどの場合、それは問題を発生させず、警告だけでした。
スタンバイクラスターの論理スロットを返さないでください Alexander Kukushkin
Patroniはスタンバイクラスターに論理レプリケーションスロットを作成できないため、グローバル構成で定義されている場合は無視する必要があります。
patronictl --help出力でのdocstringの表示を回避します。Israel Barth Rubioclickモジュールは、そのための特別なヒントを取得する必要があります。kubernetes.standby_leader_label_valueのバグを修正しました。Alexander Kukushkinこの機能は事実上動作しませんでした。
クラスターシステム識別子が
patronictl list出力に返されました Polina Bunginaこの問題は、Citusのサポートを実装しているときに発生しました。コーディネーターとすべてのワーカーで異なるため、識別子を非表示にする必要があります。
Kubernetes実装の
write_leader_optimeメソッドをオーバーライドする Alexander Kukushkinこのメソッドは、新しいプライマリになることができる正常なレプリカがない場合に、シャットダウンLSNをリーダーエンドポイント/構成マップに書き込むことになっています。
一時停止中に停止したpostgresを開始しないでください Alexander Kukushkin
競合状態のため、パトロニは、一部のリカバリパラメーター
primary_conninfoまたは同様のものが変更されたため、スタンバイを再起動する必要があると誤って仮定していました。patronictl queryコマンドのバグを修正しました。Israel Barth Rubio-m引数のみが指定された場合、または-rまたは-mのいずれも提供されない場合、機能しませんでした。コマンドラインで使用される整数パラメーターを適切に処理してpostgresを起動するようにしました。Polina Bungina
値が文字列として提供され、整数にキャストされない場合、Citusクラスターの
max_connectionsに基づいてmax_prepared_transactionsの誤った計算が発生しました。pg_rewindを決定するときはpg_stat_wal_receiverに依存しないでください。 Alexander Kukushkinpg_stat_wal_receiverによって報告されたreceived_tliは、実際の再生タイムラインより進んでいる場合がありますが、レプリケーション接続を介してDENTIFY_SYSTEMによって報告されるタイムラインは常に正しいです。
バージョン3.1.0
2023-08-03リリース
Breaking changes
restapi.keyfileおよびrestapi.certfileのセマンティックが変更されました。Alexander Kukushkin以前、Patroniは、
ctlセクションに各構成パラメーターが存在しない場合、フォールバックとしてrestapi.keyfileおよびrestapi.certfileをクライアント証明書として使用していました。
警告
クライアント証明書の検証を有効にしている場合 restapi.verify_client が required に設定されている場合、 restapi.verify_client は ctl.certfile 、 ctl.keyfile 、 ctl.keyfile_password に restapi.verify_client を提供します。提供されない場合、Patroniは正しく動作しません。
New features
ポッドのロールラベルを構成可能にする Waynerv
kubernetes.leader_label_value、kubernetes.follower_label_valueおよびkubernetes.standby_leader_label_valueパラメーターを使用して値をカスタマイズできます。この機能は、masterロールをprimaryに変更する場合に非常に役立ちます。機能と移行手順の詳細kubernetes.leader_label_valueを読むことができます。
Improvements
patroni --validate-configのさまざまな改善。Alexander KukushkinさまざまなDCS、
bootstrap.dcs、ctl、restapi、およびwatchdogセクションのパラメーター検証が向上しました。パトローニの実行中にリカバリー中にクラッシュした場合、リカバリーしていないスタートPostgres。Alexander Kukushkin
これにより、リカバリ時間が短縮され、不必要なタイムラインのインクリメントを防ぐことができます。
/statusキーの不要な更新を回避します。Alexander Kukushkin永続的な論理スロットがない場合、Patroniは、プライマリのLSNが前進しない場合でも、ハートビートループごとに
/statusを更新していました。失効した予備選にリーダー争いを勝たせてはいけない アレクサンダー・ククシュキン
リソースの不足がために重要な時間パトローニがハングしていた場合、リーダーロックを取得する前に他のノードがPostgresを昇格させていないことをさらにチェックします。
特定のPostgreSQLパラメーター検証の可視性を実装しました Alexander Kukushkin、Feike Steenbergen
max_connections、max_wal_senders、max_prepared_transactions、max_locks_per_transaction、max_replication_slots、またはmax_worker_processesの検証が失敗した場合、 Patroniは正常なデフォルト値を使用していました。これに加えて、警告も表示されます。PGDATAで作成されたファイルとディレクトリのアクセス許可を設定します。Alexander KukushkinPatroniによって作成されたすべてのファイルは、所有者の読み取り/書き込み権限のみを持っていました。この動作は、別のユーザーで実行され、グループの読み取り権限に依存しているバックアップツールを破壊していました。今、Patroniは
PGDATAの権限を尊重し、PGDATA内に作成するすべてのディレクトリとファイルの権限を正しく設定します。
Bugfixes
シェルWaynervを介して
archive_commandを実行するPatroniは、シングルユーザーモードでクラッシュリカバリーを実行する前、または
pg_rewindの前に、一部のWALセグメントをアーカイブする場合があります。 archive_commandに&&のようなシェル演算子が含まれている場合、Patroniでは動作しませんでした。/"on switchover"のシャットダウンチェックを修正しました。Polina Bungina
指定された候補はまだストリーミング中であり、シャットダウンチェックを受信していない可能性がありますが、他の一部のノードが正常だったため、リーダーキーが削除されました。
/"isprimary"チェックを修正しました Alexander Kukushkin
リーダーレース中に、レプリカは、古いリーダーのPostgresがまだプライマリとして実行されていることを認識できませんでした。
patronictl listを修正しました。Alexander Kukushkinクラスター名前フィールドは、
tsv、json、およびyaml出力フォーマットにありませんでした。一時停止後の
pg_rewindの動作を修正しました Alexander Kukushkin特定の条件下では、Patroniは、メンテナンスモードから復帰した後、
pg_rewindを使用して偽のプライマリをクラスターに参加させることができませんでした。Etcd v3実装のバグを修正しました。Alexander Kukushkin
リビジョンの不一致のため、
create_revision/mod_revisionフィールドを使用してキー更新が実行された場合、内部KVキャッシュを無効にします。一時停止中のスタンバイクラスターのレプリカの動作を修正しました Alexander Kukushkin
リーダーキーの有効期限が切れると、スタンバイクラスターのレプリカはリモートノードをフォローせず、
primary_conninfoをそのまま維持します。
バージョン3.0.4
2023-07-13リリース
New features
スタンバイノードのレプリケーションステータスを可視化します Alexander Kukushkin
PostgreSQL 9.6+の場合、Patroniは、スタンバイが他のノードからストリーミングされている場合は
streamingとして、またはレプリケーション接続がなく、restore_commandが設定されている場合はin archive recoveryとしてレプリケーション状態を報告します。状態は、DCSのmemberキー、REST API、およびpatronictl list出力に表示されます。
Improvements
Etcd v3のエラーメッセージの向上 Alexander Kukushkin
Etcd v3クラスターにアクセスできない場合 Patroniは、
/v2エンドポイントにアクセスできないと報告していました。可能であれば
patronictlのクォーラム読み取りを使用します Alexander KukushkinEtcdまたはConsulクラスターは読み取り専用に低下する可能性がありますが、
patronictlビューからはすべて問題ありませんでした。今では、エラーで失敗します。構成内の重複した名前からのスプリットブレインを防止します。 Mark Pekala
Patroniは、起動時に、同じ名前のノードがDCSに登録されているかどうかを確認し、そのREST APIを照会しようとします。 REST APIがアクセス可能な場合、Patroniはエラーで終了します。人的エラーからの保護に役立ちます。
パトローニの実行中にクラッシュした場合、スタートPostgresがリカバリーしていません。Alexander Kukushkin
リカバリー時間を短縮することができ、不必要なタイムラインのインクリメントから役立ちます。
Bugfixes
REST API SSL証明書は、SIGHUPの受信時にリロードされませんでした。Israel Barth Rubio
リグレッションは3.0.3で導入されました。
max_connectionsのようなパラメーターの整数GUC検証を修正しました。Feike Steenbergenパトローニは引用符で囲まれた数値を好みませんでした。リグレッションは3.0.3で導入されました。
synchronous_modeの問題を修正しました。Alexander Kukushkinsynchronous_mode_strictが有効になっているときに不在の同期スタンバイを誤って待機しないように、synchronous_commit=offとともにtxid_current()を実行します。
バージョン3.0.3
2023-06-22リリース
New features
PostgreSQL 16 beta1との互換性 Alexander Kukushkin
拡張されたGUCのバリデータールール。
PostgreSQL GUCのバリデーターを拡張可能にする Israel Barth Rubio
バリデータールールは、
patroni/postgresql/available_parameters/ディレクトリにあるYAMLファイルからロードされます。ファイルはアルファベット順に並べられ、次々に適用されます。非標準のPostgresディストリビューションのカスタムバリデーターを使用できるようになります。restapi.request_queue_sizeオプションを追加しました。Andrey Zidenkov、Aleksei SukhovPatroni REST APIが使用するTCPソケットの要求キューサイズを設定します。キューがいっぱいになると、それ以降の要求は/"Connection denied/"エラーを取得します。デフォルト値は5です。
新しいクラスターを初期化するときに
initdbを直接呼び出します。Matt Baker以前は
pg_ctlを介して呼び出され、initdbに渡されるパラメーターの特別な引用符が必要でした。停止フックの前に追加Le Duane
フックは
postgresql.before_stopを介して構成でき、pg_ctl stopの直前に実行されます。終了コードはシャットダウンプロセスに影響を与えません。カスタムPostgresバイナリ名のサポートを追加しました Israel Barth Rubio、Polina Bungina
カスタムPostgresディストリビューションを使用する場合、 PostgresバイナリがコミュニティPostgresディストリビューションで使用されるものとは異なる名前でコンパイルされる場合があります。カスタムバイナリ名は、
postgresql.bin_name. *および ``PATRONI_POSTGRESQL_BIN_* `` 環境変数を使用して構成できます。
Improvements
patroni --validate-configのさまざまな改善Polina Bunginabootstrap.initdbをオプショナルにします。これは新しいクラスターにのみ必要ですが、構成に欠落している場合、patroni --validate-configは不平を訴えていました。postgresql.bin_dirが空であるか、設定されていない場合にエラーを出さないようにします。代わりに、最初にデフォルトのPATHでPostgresバイナリを見つけてみてください。postgresql.authentication.rewindセクションをオプショナルにします。それが見つからない場合、Patroniはスーパーユーザーを使用しています。
patronictlのエラーレポートの向上Israel Barth Rubio/nシンボルは、実際の改行シンボルの代わりに、そのままレンダリングされました。
Bugfixes
Citusサポートの問題を修正しました。Alexander Kukushkin
スイッチオーバー中に昇格したワーカーからコーディネーターへのREST API呼び出しが失敗した場合、特定のCitusグループが無期限にブロックされたままになっていました。
patronictl`の--dcs-url`オプションで`etcd3` URLを許可します。Israel Barth Rubio
ユーザが`patronictl`の`--dcs-url`オプションを介して`etcd3` URLを渡そうとすると、例外が発生します。
バージョン3.0.2
2023-03-24リリース
警告
バージョン3.0.2は、3.6より古いPythonのサポートを終了しました。
New features
同期スタンバイレプリカステータスを
/metricsエンドポイントに追加しました。Thomas von Dein、Alexander Kukushkin以前は、
primary/standby_leader/replicaのみをレポートしていました。patronictlでのPAGERの使いやすい処理Israel Barth RubioPAGER環境変数を介してページャーを構成可能になります。これは、デフォルトのlessおよびmoreをオーバーライドします。K8sを再試行可能なHTTPステータスコードを構成可能にします Alexander Kukushkin
一部の管理対象プラットフォームでは、ステータスコード
401 Unauthorizedを取得することができますが、これは数回の再試行後に解決される場合があります。
Improvements
recovery_target_actionがpromoteに設定されている場合にのみ、カスタムブートストラップ中にhot_standbyをoffに設定します。 Alexander Kukushkinrecovery_target_action=pauseを正しく動作させる必要がありました。on_reloadコールバックが他のコールバックをkillすることを許可しないでください Alexander Kukushkinon_start/on_stop/on_role_changeは、通常、仮想IPを追加/削除するために使用され、on_reloadはそれらに干渉しないはずです。awsコールバックサンプルスクリプトで
IMDSFetcherに切り替えました Polina BunginaIMDSv2は使用するトークンを必要とし、IMDSFetcherはそれを透過的に処理します。
Bugfixes
Kubernetesで実行されているCitusクラスターの
patronictl switchoverを修正しました。Lukáš Lalinskýdefaultとは異なる名前空間では機能しませんでした。メジャーバージョンが不明な場合は
PGDATAに書き込まないでください Alexander Kukushkinstart直後に
PGDATAが空であった場合まだマウントされていない場合、PatroniはPostgreSQLバージョンについて誤った仮定を立て、実際のメジャーバージョンがv10+であってもrecovery.confファイルを誤って作成していました。コーディネーターフェイルオーバー後のCitusメタデータのバグを修正しました。Alexander Kukushkin
citus_set_coordinator_host()呼び出しはメタデータの同期を発生させず、変更はワーカーノードでは不可視でした。この問題は、citus_update_node()に切り替えることにより解決されます。すべてのetcdノードが/"failed"した場合、構成ファイルにリストされているetcdホストをフォールバックとして使用します Alexander Kukushkin
etcdクラスターは時間の経過とともにトポロジを変更する場合があり、Patroniはそれに従おうとします。ある時点ですべてのノードが到達不能になった場合、Patroniは、構成からのノードと、再接続しようとするときに最後の既知のトポロジの組み合わせを使用します。
バージョン3.0.1
2023-02-16リリース
Bugfixes
適切なロール名を
on_role_changeコールバックスクリプトに渡します。 (アレクサンダー・ククシュキン、ポリーナ・ブンギナ)Patroniは、プロモーション時に
promotedロールをon_role_changeコールバックスクリプトに誤って渡していました。渡されたロール名はmasterに戻りました。この回帰は3.0.0で導入されました。
バージョン3.0.0
2023-01-30リリース
このバージョンでは、 Citus _との統合を追加し、プライマリを降格せずに一時的なDCSの停止を乗り切ることができます。
警告
バージョン3.0.0は、Python 2.7をサポートする最後のリリースです。次のリリースでは、3.7より古いPythonバージョンのサポートを終了します。
RAFTサポートは非推奨です。メンテナンスには最善を尽くしますが、発生する可能性のある問題については保証も責任も負いません。
このバージョンは、/"primary/"を優先して、/"master/"を削除する最初のステップです。次のメジャーリリースへのアップグレードは、少なくとも3.0.0を実行している場合にのみ確実に機能します。
New features
DCSフェイルセーフモード Alexander Kukushkin、Polina Bungina
この機能が有効になっている場合、Patroniクラスターは一時的なDCSの停止を生き延びることができます。詳細については、 documentation をご覧ください。
Citusのサポート Alexander Kukushkin、Polina Bungina、Jelte Fenema
Patroni enables easy deployment and management of Citus clusters with HA. Please check here page for more information.
Improvements
不明ながアクティブなレプリケーションスロットをドロップする際の再発エラーの抑制 Michael Bankk
Patroniはこれらのログを書き込みますが、デバッグでのみです。
HAループごとに1つのモニタリングクエリーのみを実行します。Alexander Kukushkin
同期レプリケーションが有効になっている場合は、そうではありません。
最新の障害データディレクトリのみを保持します。William Albertus Dembo
ブートストラップが失敗した場合、Patroniはタイムスタンプサフィックスを使用して$PGDATAフォルダーの名前を変更していました。今後、サフィックスは
.failedになり、そのようなフォルダーが存在する場合、名前を変更する前に削除されます。同期レプリケーション接続のチェックの向上 Alexander Kukushkin
新しいホストが
synchronous_standby_namesに追加されると、pg_stat_replication.sync_state = 'sync'に加えてプライマリに追いついた場合にのみDCSで同期として設定されます。
Removed functionality
patronictl scaffoldの削除 Alexander Kukushkinこれを使用する唯一の理由は、スタンバイクラスターを実行するハッキングな方法でした。
バージョン2.1.7
2023-01-04リリース
Bugfixes
古いPythonモジュールとの小さな非互換性を修正しました。Alexander Kukushkin
彼らは、Debianバスター/Ubuntu bionicでPatroniをビルド/実行できませんでした。
バージョン2.1.6
2022-12-30リリース
Improvements
sslソケットのシャットダウン時の迷惑な例外を修正しました Alexander Kukushkin
HAProxyは、HTTPステータスコードを取得するとすぐに接続を閉じているため、PatroniがSSL接続を適切にシャットダウンする時間がありません。
arm64のDockerfileの例を調整する (Polina Bungina)
明示的な
amd64およびx86_64を削除します。libnss_files.so.*は削除しないでください。
Security improvements
非レプリケーション接続に
search_path=pg_catalogを適用する Alexander KukushkinPatroniはスーパーユーザー接続に大きく依存しているため、
pg_catalogの対応するオブジェクトと同じ名前とシグネチャを持つpublicスキーマのユーザー定義ファンクションおよび/または演算子を使用して実行される可能性のある攻撃から保護したいと思います。そのため、search_path=pg_catalogは、Patroniによって作成されたすべての接続レプリケーション接続を除くに適用されます。パスワードが
pg_stat_statementsに記録されないようにします Feike Steenbergenこれは、ユーザーを作成するときに
pg_stat_statements.track_utility=offを設定することにより実現されます。
Bugfixes
proxy_addressをオプショナルとして宣言します Denis Laxaldeこれは事実上不要なオプションであるため。
安全でないオプションの動作を改善しました Alexander Kukushkin
REST API要求にクライアント証明書が使用される場合、Ctlの
insecureオプションは適切に動作しませんでした。新しいクラスターがブートストラップされるときに
bootstrap.dcsからウォッチドッグ構成を取得します。Matt BakerPatroniは、DCSのブートストラップに使用される構成を取得するのではなく、新しいクラスターをブートストラップするときに、デフォルトでウォッチドッグを最初に構成していました。
WIN32で実行可能ファイルを検索するときにファイル拡張子が処理される方法を修正しました。Martín Marqués
拡張子がまだない場合、ファイル名にのみ
.exeを追加します。Consul TTLセットアップを修正しました。Alexander Kukushkin
HTTPクライアントで値を設定するときに
ttl/2.0を使用しましたが、クラスのプロパティで現在の値を2で乗算するのを忘れました。その結果、Consul TTLが2倍オフになりました。
Removed functionality
patronictl configureの削除 Polina Bungina別個の
patronictl構成を作成する必要はありません。
バージョン2.1.5
2022-11-28リリース
このバージョンは、 PostgreSQL 15との互換性を強化し、Etcd v3サポートを実稼働対応として宣言します。 Raftのパトローニはベータ版のままです。
New features
patroni --validate-configの改善 Denis Laxalde構成が無効な場合はコード1で終了し、標準エラー出力にエラーを出力します。
一時停止中にレプリケーションスロットをドロップしないでください Alexander Kukushkin
Patroniは、メンバーがクラスターに参加/離脱するときに、物理レプリケーションスロットを自動的に作成/削除します。一時停止中のスロットは削除されなくなります。
モニタリングエンドポイントの
HEAD要求メソッドのサポート Robert CutajarGETの代わりに使用される場合、PatroniはHTTPステータスコードのみを返します。Windowsでの動作テストのサポート Alexander Kukushkin
新しいREST APIエンドポイント
POST /sigtermを導入することにより、 Windowsで正常なPatroniシャットダウンSIGTERMをエミュレートします。postgresql.proxy_addressの紹介 Alexander Kukushkinこれは
proxy_urlとしてDCSのメンバーキーに書き込まれ、サービスディスカバリに使用/役立つ可能性があります。
Stability improvements
スレッドから
pg_replication_slot_advance()を呼び出します。Alexander Kukushkin多くの論理レプリケーションスロットを持つビジーなクラスターでは、
pg_replication_slot_advance()呼び出しがメインHAループに影響を与え、メンバーキーの有効期限が発生する可能性がありました。古いプライマリで
pg_rewindを呼び出す前に、欠落している可能性のあるWALをアーカイブします Polina Bunginaプライマリがクラッシュして、かなりの時間ダウンしている場合、一部のWALファイルがアーカイブと新しいプライマリから失われる可能性があります。
pg_rewindは、古いプライマリからこれらのWALファイルを削除し、スタンバイとして起動できなくする可能性があります。readyWALファイルをアーカイブすることにより、この問題を軽減するだけでなく、一般的に継続的なアーカイブエクスペリエンスが向上します。Kubernetesサービスを作成しようとするときは
403エラーを無視します。Nick Hudson、Polina BunginaPatroniは、サービスを作成しようとして失敗したことによりログをスパム送信していましたが、実際には既に存在する可能性があります。
livenessプローブの向上 Alexander Kukushkin
ライブネス問題は、ハートビートループがプライマリの`ttl`またはレプリカの`2*ttl`より長く実行されている場合に失敗し始めます。これにより、Kubernetesで watchdog の代替として使用できます。
スイッチオーバー時に同期ノードのみがロックを取得しようとするようにしました Alexander Kukushkin、Polina Bungina
以前は、ターゲットを指定せずに手動スイッチオーバーが実行された場合、最新の非同期メンバーがリーダーになる可能性はほとんどありませんでした。
ブートストラップの実行中のクローン作成を回避する Ants Aasma
クラスターブートストラップの実行中は、リーダーをトリガーする必要のないレプリカ作成メソッドを許可しないでください。
kazoo-2.9.0との互換性 Alexander Kukushkin
Pythonバージョンによっては、閉じたソケットで
select()が呼び出される場合、SequentialThreadingHandler.select()メソッドはTypeErrorおよびIOError例外を発生させる場合があります。ソケットをシャットダウンする前にSSL接続を明示的にシャットダウンします Alexander Kukushkin
これを行わないと、OpenSSL 3.0で
unexpected eof while readingエラーが発生しました。`prettytable>=2.2.0`との互換性 Alexander Kukushkin
内部APIの変更が原因で、クラスター名前ヘッダーが誤った行に表示されました。
Bugfixes
Etcd resume_grantの有効期限が切れたトークンを処理する monsterxx03
エラーが発生した場合は、新しいトークンを取得して、要求を再試行します。
GET /read-only-syncエンドポイントのバグを修正しました。Alexander Kukushkinこれは、以前のリリースで導入されたもので、事実上動作しませんでした。
データディレクトリストレージが消失した場合の処理 Alexander Kukushkin
Patroniは、PGDATAが存在し空ではないことを定期的にチェックしていますが、ストレージに問題が発生した場合、
os.listdir()はOSError例外を発生させ、ハートビートループを中断しています。ユーザーのバックエンドが閉じるのを待機するときに
master_stop_timeoutを適用する Alexander Kukushkinユーザーのバックエンドのように見えるものは、実際には停止に失敗しているバックグラウンドワーカーCitusメンテナンスデーモンなどである可能性があります。
postgresql.listenの*:<port>を受け入れます Denis Laxaldepatroni --validate-configは、無効であることについて苦情を述べていました。Raftのタイムアウトの修正 Alexander Kukushkin
Patroniまたはpatronictlが起動すると、既知のメンバーからRaftクラスタートポロジを取得しようとします。これらの呼び出しは、適切なタイムアウトなしで行われました。
トークンが変更された場合に領事サービスを強制的に更新します。 John A. Lotoski
そうしないと、エラー/"rpc error Making call: rpc error Making call: ACL not found/"が発生します。
バージョン2.1.4
2022-06-01リリース
New features
一般的なDebian / Ubuntuシステムでの
pg_rewindの動作を改善します Gunnar /"Nick/" Bluthpostgresql.conf`をデータディレクトリの外部に保持するPostgresセットアップたとえば、Ubuntu/Debianパッケージでは、 ``pg_rewind --restore-target-wal` は
restore_commandの値を理解できません。Consulサービスチェックで
TLSServerNameの設定を許可する マイケル・グメリンチェックがIPによって実行され、Consul
node_nameがFQDNではない場合に役立ちます。ウォッチドッグに
ppc64leサポートを追加しました。Jean-Michel Scheiwilerまた、一部の非x86プラットフォームでのウォッチドッグのサポートを修正しました。
aws.pyコールバックを
botoからboto3に切り替えました。Alexander Kukushkin
boto2.xは2018年から放棄され、python 3.9で失敗します。
K8sのサービスアカウントトークンを定期的に更新します。 Haitao Li
Kubernetes v1.21以降、サービスアカウントトークンは1時間で有効期限が切れます。
/read-only-syncモニタリングエンドポイントDennis4bを追加しました/read-onlyに似ていますが、同期レプリカのみが含まれます。
Stability improvements
プライマリとの論理デコードセットアップに構成の不一致がある場合、論理レプリケーションスロットをレプリカにコピーしないでください。 Alexander Kukushkin
スロットが
pluginまたはdatabase構成オプションと一致しない場合、レプリカはプライマリから論理レプリケーションスロットをコピーしません。以前は、スロットがこれらの構成オプションと一致するかどうかのチェックは、レプリカがスロットをコピーして起動するまで実行されず、不要な再起動が繰り返されていました。PostgreSQL v12+のリカバリ構成パラメーターの特別な処理 Alexander Kukushkin
レプリカとしてスタートしている間、パトロニは、
pg_settingsから照会する代わりに現在のパラメーター値をキャッシュすることにより、リーダーアドレスが変更された場合、postgresql.confを更新し、リスタート/リロードできる必要があります。postgresql.listenパラメーターでのIPv6アドレスの処理の向上 Alexander Kukushkinlistenパラメーターにはポートがあるため、IPv6アドレスを角かっこ内に入力しようとしますが、リストに複数のIPがある場合、これは正しく削除されませんでした。PostgreSQL v10以前でのみ発散チェックを実行する場合に
replication資格情報を使用する Alexander Kukushkinrewindが有効になっている場合、Patroniは新しいPostgresバージョンでsuperuserまたはrewind資格情報を再度使用します。
Bugfixes
dateutil.parserのインポートの欠落を修正しました。Wesley Mendes他のモジュールからインポートされたという理由だけで、テストは失敗していませんでした。
optimeアノテーションが文字列であることを確認しました Sebastian Hasler特定の場合、パトローニはそれを数値として渡そうとしていました。
失敗した
pg_rewind試行の処理の向上 Alexander Kukushkinpg_rewind中にプライマリが利用できなくなると、$PGDATAは破損した状態のままになります。その後、Patroniは、構成で許可されていない場合でもデータディレクトリを削除します。PostgreSQLの準備ができていない場合は、リーダー
ConfigMap/Endpointからslotsアノテーションを削除しないでください。 Alexander Kukushkinslots値が渡されない場合、アノテーションは現在の値を保持します。K8s APIウォッチャーによる同時実行問題の処理 Alexander Kukushkin
特定の不明な条件下では、ウォッチャーが古くなる場合があります。その結果、
attempt_to_acquire_leader()メソッドはHTTPステータスコード409により失敗する可能性があります。その場合、ウォッチャー接続をリセットし、最初からリスタートします。
バージョン2.1.3
2022-02-18リリース
New features
patronictlの暗号化されたTLSキーのサポートを追加しました Alexander Kukushkinctl.keyfile_passwordまたはPATRONI_CTL_KEYFILE_PASSWORD環境変数を介して構成できます。/metricsエンドポイントにメトリックを追加しました。Alexandre Pereira
具体的には、
patroni_pending_restartおよびpatroni_is_paused。スタンバイクラスタ構成で複数のホストを指定できるようにしますマイケル・バンク
スタンバイクラスターがPatroniクラスターからレプリケートしている場合、PostgreSQL v10以降の
libpqで利用可能なクライアントサイドのフェールオーバーに依存するのが良いかもしれません。つまり、スタンバイリーダーのprimary_conninfoとpg_rewind接続文字列のtarget_session_attrs=read-writeを設定します。pgpassファイルは複数行ホストごとに1行で生成され、プライマリクラスターノードでCHECKPOINTを呼び出す代わりに、スタンバイクラスターはpg_controlが更新されるのを待機します。
Stability improvements
古い
psycopg2との互換性。Alexander Kukushkinたとえば、Ubuntu 18.04パッケージからインストールされた
psycopg2には、UndefinedFile例外がまだありません。すべてのEtcdノードが応答しない場合は、
etcd3ウォッチャーを再起動します。 Alexander Kukushkinウォッチャーが生きている場合、すべてのEtcdノードに障害が発生している場合でも、
get_cluster()メソッドは古い情報を返し続けます。一時停止中にスタンバイクラスターのリーダーロックを削除しないでください Alexander Kukushkin
以前は、ロックは、スタンバイリーダーではなく、プライマリとして実行されているノードによってのみ維持されていました。
Bugfixes
スタンバイリーダーブートストラップのバグを修正しました。Alexander Kukushkin
Patroniは、Postgresが60秒後に接続の受け入れを開始しない場合、ブートストラップが失敗したと考えていました。このバグは2.1.2リリースで導入されました。
カスケードスタンバイへのフェイルオーバーのバグを修正しました。Alexander Kukushkin
カスケードスタンバイでどのスロットを作成するかを判断するとき、リーダーが存在しない可能性があることを考慮するのを忘れていました。
Postgres構成バリデータの小さな問題を修正しました。Alexander Kukushkin
validator.pyで最小値と最大値が引用符で囲まれていたため、PostgreSQL v14で導入された整数パラメーターは検証に失敗していました
リーダーのステータスを確認するときにレプリケーション資格情報を使用する Alexander Kukushkin
remove_data_directory_on_diverged_timelinesは設定されている可能性がありますが、rewind_credentialsは定義されておらず、ノード間のスーパーユーザーアクセスは許可されていません。REST API証明書の置換時の/"port in use/"エラーを修正しました Ants Aasma
証明書を切り替えるときに、同時API要求との競合状態が発生しました。置換期間中にアクティブなものがある場合、置換はポート使用中エラーでエラーになり、PatroniはアクティブなAPIサーバーがない状態でスタックします。
パスワードに
%文字が含まれる場合、クラスターブートストラップのバグを修正しました。 Bastien Wirtzブートストラップメソッドは、すべてのパラメーターを適切に引用して
DOブロックを実行しますが、cursor.execute()メソッドは渡されたパラメーターを含む空のリストを好みませんでした。/"AttributeError: no property 'leader'/"例外を修正しました。Hrvoje Milković
これは、同期モードが有効になっており、DCSコンテンツがワイプアウトされた場合に発生する可能性があります。
ダイバージェンスタイムラインチェックのバグを修正しました。Alexander Kukushkin
パトローニは、タイムラインが分岐したと誤って仮定していました。 pg_rewindの場合、問題は発生しませんでしたが、 pg_rewindが許可されず、
remove_data_directory_on_diverged_timelinesが設定されている場合、以前のリーダーが再初期化される結果になりました。
バージョン2.1.2
2021-12-03リリース
New features
psycopg>=3.0との互換性。Alexander Kukushkinデフォルトでは、
psycopg2が優先されます。 psycopg>=3.0`は、 ``psycopg2` が利用できない場合、またはそのバージョンが古すぎる場合にのみ使用されます。dcs_last_seenフィールドをREST APIに追加します Michael Bankこのフィールドは、クラスターメンバーがDCSと正常に通信した最後にUNIXエポックとしてノートします。これは、ネットワークパーティションを特定および分析するのに役立ちます。
pg_controldataが/"shut down/"を報告したときにリーダーロックを解放します Alexander Kukushkinarchive_commandが遅い/障害がある場合の遅いスイッチオーバー/シャットダウンの問題を解決するために、pg_controldataがshut downとしてPGDATAをきれいに報告し始め、すべての変更を受け取った少なくとも1つのレプリカが存在することを確認した直後に、パトロニはリーダーキーを削除します。この条件を満たすレプリカがない場合、リーダーキーは削除されず、古い動作が保持されます。つまり、パトローニはロックを更新し続けます。sslcrldir接続パラメーターのサポートを追加しました Kostiantyn Nemchenko新しい接続パラメーターはPostgreSQL v14で導入されました。
ZookeeperでZNodesのACL設定を許可します。Alwyn Davis
新しい構成オプション
zookeeper.set_aclsを導入して、Kazooが作成する各ZノードにデフォルトのACLを適用するようにします。
Stability improvements
次のHAループまで、次のリカバリーの試行を遅らせます。Alexander Kukushkin
ディスク領域たとえば、Postgresがクラッシュし、そのために起動に失敗した場合、Patroniはそれを回復しようとすることにあまりにも熱心にログを氾濫させています。
降格する前にログを追加します。これには時間がかかる場合があります。 Michael Bank
降格が完了するまでに時間がかかる場合があり、ログを見ても、正確に何が起こっているのかが明らかでない場合があります。
/"I am/"ステータスメッセージを改善しました Michael Bank
no action. I am a secondary ({0})vsno action. I am ({0}), a secondarywal_keep_sizeに変換するときにintwal_keep_segmentsにキャストするようになりました。 Jorge Solórzanoグローバル
wal_keep_segmentsの文字列としてwal_keep_segmentsを指定することが可能であり、Pythonは動的型付け言語であるため、文字列は単に乗算されました。例wal_keep_segments: /"100/"は100100100100100100100100100100100100100100100100MBに変換されました。同期レプリケーションが有効になっている場合、同期ノードへのスイッチオーバーのみを許可します Alexander Kukushkin
それに加えて、リーダーは既知の同期ノードに対してのみレースを行います。
Postgresが遅い場合に、キャッシュされたロールをフォールバックとして使用する Alexander Kukushkin
一部の極端なケースでは、Postgresが非常に遅いため、通常の監視クエリが数秒で終了しない場合があります。
statement_timeout例外が適切に処理されない場合、リーダーキーの有効期限が切れた場合、または更新が失敗したときにPostgresが時間通りに降格されない状況が発生する可能性があります。このような例外が発生した場合、Patroniはキャッシュされたroleを使用して、Postgresがプライマリとして実行されているかどうかを判断します。メンバーZNodeの不必要な更新を回避します。Alexander Kukushkin
メンバーデータの値が変更されていない場合、更新は発生しないはずです。
プロモート後のチェックポイントの最適化 Alexander Kukushkin
最新のタイムラインが既に
pg_controlに保存されている場合は、CHECKPOINTの実行を避けてください。initdbで新しいクラスターを初期化した直後に、不必要なCHECKPOINTを回避するのに役立ちます。同期ノードを選択するときに
nofailoverのないメンバーを優先する Alexander Kukushkin以前の同期ノードはレプリケーションラグにのみ基づいて選択されていたため、
nofailoverタグが付いているノードは他のノードと同じ同期になる機会がありました。プライマリに障害が発生した場合、フェールオーバーは自動的に発生しないため、この動作は混乱を招くと同時に危険でした。etcdマシンキャッシュから重複ホストを削除します Michael Bank
etcdクラスター内のアドバタイズされたクライアントURLは、誤って構成されている可能性があります。この場合、Patroniで重複を削除するのは簡単な成果です。
Bugfixes
スロット管理中に一時的なレプリケーションスロットをスキップする Alexander Kukushkin
v10から
pg_basebackupは、WALストリーミング用の一時的なレプリケーションスロットを作成します。パトローニは、スロット名が不明に見えるため、それをドロップしようとしていました。それを修正するために、pg_stat_replication_slotsビューを照会するときにすべての一時スロットをスキップします。pg_replication_slot_advance()がタイムアウトしないことを確認します Alexander Kukushkinこの場合、パトロニはデフォルトの
statement_timeoutを使用していましたが、呼び出しが失敗すると、回復しない可能性が非常に高いため、pg_walおよびpg_catalogのサイズが増加します。/statusは、降格時に更新されませんでした Alexander KukushkinPostgreSQLを降格した後、古いリーダーはDCSの最後のLSNを更新します。
2.1.0から、新しい/statusキーが導入されましたが、optimeは引き続き/optime/leaderに書き込まれます。降格時のハンドルDCS例外 Alexander Kukushkin
リーダーロックの更新に失敗したためにマスターを降格しているときに、DCSが完全にダウンし、
get_cluster()呼び出しが例外を発生する場合があります。適切に処理されない場合、DCSが回復するまでPostgresは停止したままになります。use_unix_socket_replは場合によっては機能しませんでした Alexander Kukushkin具体的には、
postgresql.unix_socket_directoriesが設定されていない場合。この場合、Patroniはlibpqのデフォルト値を使用することになっています。Patroni REST APIのいくつかの問題を修正しました Alexander Kukushkin
clusters_unlockedは定義できない場合があり、GET /metricsエンドポイントで例外が発生しました。それに加えて、エラー処理方法は、connect_addressタプルに常に2つの要素があることを前提としていましたが、実際には、IPv6の場合にはもっと多くの要素がある可能性があります。巻き戻しを決定する前に、新しく昇格したノードの復旧が完了するのを待ってください Alexander Kukushkin
実際のプロモートが発生し、新しいタイムラインが作成されるまでに時間がかかる場合があります。待機せずに、レプリカは巻き戻しが必要ではないという結論に達する可能性があります。
巻き戻しを決定するときに履歴ファイルの欠落したタイムラインを処理する Alexander Kukushkin
現在のレプリカのタイムラインがプライマリの履歴ファイルにない場合、レプリカはリワインドが必要でないという誤った想定をしていました。
バージョン2.1.1
2021-08-19リリース
New features
ETCD SRV名前サフィックスのサポート David Pavlicek
Etcdを使用すると、同じドメインの下の複数のEtcdクラスターを区別できます。今後、Patroniもそれをサポートします。
新しいリーダーhuiyalin525で歴史を豊かにします
新しい列を
patronictl history出力に追加します。クラスター内のKubernetes構成用にCAバンドルを構成可能にします Aron Parsons
デフォルトでは、Patroniは
/var/run/secrets/kubernetes.io/serviceaccount/ca.crtを使用しており、この新機能によりカスタムkubernetes.cacertを指定できます。Consulサービスとしての動的な登録/登録解除とタグの変更をサポート Tommy Li
以前は、Patroniの再起動が必要でした。
Bugfixes
REST APIの不必要なリロードを回避します。Alexander Kukushkin
以前のリリースでは、ディスクで変更された場合にREST API証明書をリロードする機能を追加しました。残念ながら、リロードは開始直後に無条件で発生していました。
etcd.use_proxiesが設定されているときにクラスターメンバーを解決しないでください Alexander KukushkinPatroniは、起動時に、メンバーのリストを照会することにより、Etcdクラスターの正常性をチェックします。それに加えて、ホスト名を解決しようとしましたが、これはプロキシを介してEtcdで作業する場合に必要ではなく、不要な警告を発生させていました。
pg_stat_replicationのNULL値を含む行をスキップする Alexander Kukushkinpg_stat_replicationビューは、state = 'streaming'の場合でも、replay_lsn、flush_lsn、またはwrite_lsnフィールドにNULL値を含めることができるようです。
バージョン2.1.0
2021-07-06リリース
このバージョンでは、 PostgreSQL v14との互換性を追加し、フェールオーバー/スイッチオーバーを生き抜くための論理レプリケーションスロットを作成し、REST APIのホワイトリストのサポートを実装し、ログ数をハートビートごとに1行に削減します。
New features
PostgreSQL v14との互換性 Alexander Kukushkin
Patroniが/"pause/"モード自分自身にない場合、WAL再生の一時停止を解除します。プライマリの
max_connectionsなどの特定のパラメーターの変更により、/"paused/"になる可能性があります。フェールオーバー論理スロット Alexander Kukushkin
PostgreSQL v11以降で論理レプリケーションスロットがフェールオーバー/スイッチオーバーを生き残るようにします。レプリケーションスロットは、リスタートでプライマリからレプリカにコピーされた場合、後で pg_replication_slot_advance() _ファンクションを使用して前方に移動します。その結果、スロットはフェイルオーバー前に既に存在し、イベントが失われることはありませんが、一部のイベントは複数回配信される可能性があります。
Patroni REST APIの許可リストを実装しました Alexander Kukushkin
構成されている場合、ルールと一致するIPのみが安全でないエンドポイントを呼び出すことができます。それに加えて、クラスターのメンバーのIPをリストに自動的に含めることができます。
Unixソケットを介したレプリケーション接続のサポートを追加しました。 Mohamed El-Rifai
以前、Patroniはレプリケーション接続に常にTCPを使用していましたが、SSL検証で問題が発生する可能性がありました。 UNIXソケットを使用すると、レプリケーションユーザーをSSL検証から免除できます。
ユーザー定義タグのヘルスチェックArman Jafari Tehrani
predefined tags: と合わせて、
patronictl list出力およびREST APIで表示されるカスタムタグを指定できます。今後、ヘルスチェックでカスタムタグを使用できるようになります。Prometheus
/metricsエンドポイントを追加しました。Mark Mercado、Michael Bank/patroniと同じメトリックを公開するエンドポイント。Patroniログのおしゃべり性の低下 Alexander Kukushkin
すべてが正常な場合、 HAループの実行ごとに1行のみが書き込まれます。
Breaking changes
古い
permanent logical replication slots機能は、PostgreSQL v10以前では動作しなくなりました。Alexander Kukushkinプロモーションを実行した後に論理スロットを作成する戦略では、論理イベントが失われないこと、したがって無効になることを保証できません。
ノードがロックを保持している場合、
/leaderエンドポイントは常に200を結果ます。 Alexander Kukushkinスタンバイクラスターを昇格させるには、ロードバランサーのヘルスチェックを更新する必要がありますが、これはあまり便利ではなく、忘れがちです。それを解決するには、
/leaderヘルスチェックエンドポイントの動作を変更します。クラスターが通常のクラスターであるかstandby_clusterであるかを考慮せずに、 200を返します。
Improvements in Raft support
Raftトラフィック暗号化の信頼できるサポート Alexander Kukushkin
PySyncObjのさまざまな問題のため、暗号化のサポートは非常に不安定でしたRaft実装でのDNSの問題の処理 Alexander Kukushkin
self_addrおよび/またはpartner_addrsがIPの代わりにDNS名を使用して構成されている場合、PySyncObjはオブジェクトの作成時に1回のみ効果的に解決を行っていました。同じノードが別のIPでオンラインに戻ったときに問題が発生していました。
Stability improvements
psycopg2-2.9+との互換性。Alexander Kukushkinpsycopg2では、autocommit = Trueはwith connectionブロックで無視され、レプリケーションプロトコル接続が切断されます。Zookeeperでの過剰なHAループの実行を修正しました。Alexander Kukushkin
メンバーZノードの更新は連鎖反応を引き起こし、その結果、 HAループが連続して複数回実行されました。
ディスク上のREST API証明書が変更された場合はリロードします Michael Todorovic
REST API証明書ファイルがインプレースで更新された場合、Patroniはリロードを実行しませんでした。
kerberos認証が使用される場合、pgpassディレクトリを作成しないでください Kostiantyn Nemchenko
Kerberosとパスワード認証は相互に排他的です。
カスタムブートストラップの小さな問題を修正しました。Alexander Kukushkin
PITRを実行する場合にのみ
hot_standby=offでPostgresを起動し、PITRが完了したら再起動します。
Bugfixes
kazoo-2.7+との互換性。Alexander KukushkinPatroniは自分自身で再試行を処理しているため、使用可能な接続がない場合にZookeeperクラスターへの要求がすぐに破棄される
kazooの古い動作に依存しています。プロキシを介して接続していることが知られている場合、Etcd v3クラスターのバージョンを明示的に要求します Alexander Kukushkin
PatroniはgPRCゲートウェイを介してEtcd v3クラスターと連携しており、クラスターバージョンに応じて、異なるエンドポイント
/v3、/v3beta、または/v3alphaを使用する必要があります。バージョンはクラスタートポロジとともにのみ解決されましたが、プロキシを介して接続するときに後者は決して実行されないため。
バージョン2.0.2
2021-02-22リリース
New features
外部管理対象レプリケーションスロットを無視する機能 James Coleman
Patroniは、不明なレプリケーションスロットを削除しようとしていますが、レプリケーションスロットを外部で管理する必要がある場合が確かにあります。これから、削除しないスロットを構成できるようになります。
REST APIの暗号スイート制限のサポートを追加しました Gunnar /"Nick/" Bluth
restapi.ciphersまたはPATRONI_RESTAPI_CIPHERS環境変数を介して構成できます。REST APIの暗号化されたTLSキーのサポートを追加しました。Jonathan S. Katz
restapi.keyfile_passwordまたはPATRONI_RESTAPI_KEYFILE_PASSWORD環境変数を介して構成できます。REST API認証資格情報の定数時間比較 Alex Brasetvik
==の代わりにhmac.compare_digest()を使用します。これは、タイミング攻撃に対して脆弱です。レプリケーションラグに基づいて同期ノードを選択する Krishna Sarabu
同期ノードのレプリケーションラグが構成されたしきい値を超え始めると、非同期に降格および/または他のノードに置き換えられる可能性があります。動作は
maximum_lag_on_syncnodeで制御されます。
Stability improvements
カスタムブートストラップを行うときに
hot_standby = offでpostgresを開始する Igor Yanchenkoカスタムブートストラップ中に、Patroniはベースバックアップを復元し、Postgresを起動し、復旧が完了するまで待機しています。スタンバイの一部のPostgreSQLパラメーターは、プライマリより小さくすることはできません。新しい値WALから復元され、構成された値より大きい場合、Postgresはパニックして停止します。このような動作を回避するために、
hot_standbyモードを使用せずにカスタムブートストラップを実行します。必要なウォッチドッグが正常でない場合にユーザーに警告します Nicolas Thauvin
ウォッチドッグデバイスが書き込み可能でない場合、または必須モードで欠落している場合、メンバーは昇格できません。この誤った構成を検索する場所をユーザーに示す警告を追加しました。
シングルユーザーモードのリカバリーの詳細度の向上 Alexander Kukushkin
PostgreSQLが明確にシャットダウンされていないことにPatroniが気づいた場合、特定の場合、シングルユーザーモードでPostgresを起動することによりクラッシュリカバリーが実行されます。ディスク上の領域の不足などにより、復旧に失敗した場合がありますが、エラーは飲み込まれました。
python-consul2モジュールとの互換性を追加しました。Alexander Kukushkin、Wilfried Roset古き良き
python-consulは数年以来メンテナンスされていないため、誰かが新機能とバグ修正を備えたフォークを作成しました。patronictlを実行するときにbypass_api_serviceを使用しないでください Alexander KukushkinK8sポッドが非
default名前空間で実行されている場合、kubernetesエンドポイントを照会するための十分な権限があるとは限りません。この場合、Patroniは警告を表示し、bypass_api_service設定を無視します。patronictlの場合、警告は少し迷惑でした。raft.data_dirが存在しない場合は作成するか、書き込み可能であることを確認します。 Mark Mercado使いやすさと使いやすさが向上します。
Bugfixes
一時停止中にリーダーロックを失った場合、再起動またはプロモーションを中断しないでください Alexander Kukushkin
一時停止中に、ロックなしでプライマリとしてpostgresを実行できます。
REST APIの
shutdown_request()に関する問題を修正しました Nicolas LimageSSL接続の処理を改善し、スレッドが開始されるまでハンドシェイクを遅延するために、Patroniは
HTTPServerのいくつかのメソッドをオーバーライドします。shutdown_request()メソッドは忘れられました。Zookeeper使用時のスリープ時間の問題を修正しました。Alexander Kukushkin
HAコードの実行の間に、パトローニが最大2倍長く眠っていた可能性がありました。
ブートストラップが失敗した後にデータディレクトリを移動するときの無効な
os.symlink()呼び出しを修正しました。Andrew L'Ecuyerブートストラップが失敗した場合、Patroniはデータディレクトリ、pg_wal、およびすべてのテーブルスペースの名前を変更しています。その後、シンボリックリンクを更新して、ファイルシステムの一貫性を保ちます。
srcおよびdst引数がスワップされたため、シンボリックリンクの作成は失敗していました。post_bootstrap()メソッドのバグを修正しました。Alexander Kukushkin
スーパーユーザーパスワードが構成されていない場合、Patroniは
post_initスクリプトの呼び出しに失敗し、したがって、ブートストラップ全体が失敗していました。スタンバイクラスターのpg_rewindに関する問題を修正しました。Alexander Kukushkin
スーパーユーザー名がPostgresと異なる場合、接続文字列にデータベース名が含まれていないため、スタンバイクラスターの
pg_rewindは障害が発生していました。Etcd v3での認証が明示的に失敗した場合にのみ終了します Alexander Kukushkin
起動時に、PatroniはEtcdクラスタートポロジの検出を実行し、必要に応じて認証します。 etcdサーバーの1つがアクセスできない場合があり、パトロニはこのサーバーで認証を実行しようとしましたが、次のノードで再試行する代わりに失敗しました。
空のリストを返すpsutil cmdline()でケースを処理します。Alexander Kukushkin
ゾンビプロセスはまだポストマスターの子ですが、cmdline()がありません。
PATRONI_KUBERNETES_USE_ENDPOINTS環境変数をブール値として扱います Alexander Kukushkinそうしないと、環境を介して
kubernetes.use_endpointsを無効にすることが不可能でした。同時エンドポイント更新エラーの処理を改善しました Alexander Kukushkin
Patroniは、現在のエンドポイントオブジェクトを明示的に照会し、現在のポッドがリーダーロックをまだ保持していることを確認して、更新を繰り返します。
バージョン2.0.1
リリース2020-10-01
New features
lessが利用できない場合は、patronictl edit-configのページャーとしてmoreを使用します。 Pavel GolubWindowsでは、
more.comになります。それに加えて、requirements.txtではcdiffがydiffに変更されましたが、patronictlは互換性のために両方をサポートしています。raftbind_addrおよびpasswordのサポートを追加しました Alexander Kukushkinraft.bind_addrは、NATの背後で実行されている場合に役立つ場合があります。raft.passwordは、トラフィック暗号化を有効にしますcryptographyモジュールが必要です。sslpassword接続パラメーターのサポートを追加しました Kostiantyn NemchenkoConnectionパラメーターはPostgreSQL 13で導入されました。
Stability improvements
一時停止中の動作を変更しました Alexander Kukushkin
PGDATAディレクトリが見つからない/空の場合、Patroniはbootstrapメソッドを呼び出しません。Patroniは一時停止中にsysid不一致でも終了せず、警告のみをログに記録します。
Postgresがリカバリーでなく書き込みを受け入れて実行されていないが、sysidが初期化キーと一致しない場合、ノードは一時停止モードでリーダーキーを取得しようとしません。
クラッシュリカバリーを実行するときに
master_start_timeoutを適用する Alexander KukushkinPostgresがリーダーノードでクラッシュした場合、PatroniはシングルユーザーモードでPostgresを起動することによりクラッシュリカバリーを実行します。クラッシュリカバリー中に、リーダーロックが更新されます。クラッシュリカバリーが
master_start_timeout秒以内に終了しなかった場合、Patroniは強制的に停止し、リーダーロックを解放します。urllib3要件からsecureエクストラを削除しました Alexander Kukushkinそこに追加する唯一の理由は、Python 2.7の
ipaddress依存関係でした。
Bugfixes
Kubernetes.update_leader()のバグを修正しました。Alexander Kukushkinリーダーオブジェクトの更新が失敗した場合、未処理の例外がプライマリの降格を妨げていました。
RAFTが使用されているときにハングする
patronictlを修正しました。Alexander KukushkinPatroni構成で
patronictlを使用する場合、self_addrをpartner_addrsに追加する必要があります。get_guc_value()のバグを修正しました。Alexander KukushkinPatroniはPostgreSQL 12で
restore_commandの値の取得に失敗していたため、pg_rewindの欠落しているWALの取得は機能しませんでした。
バージョン2.0.0
2020-09-02リリース
このバージョンは、 PostgreSQL 13との互換性を強化し、複数の同期スタンバイのサポートを追加し、 pg_rewind の処理が大幅に向上し、純粋なRAFT Etcd、Consul、またはZookeeperなしでEtcd v3およびPatroniのサポートを追加し、オプションで呼び出しが可能です pre_promote フェンシングスクリプト。
PostgreSQL 13 support
PostgreSQL 13+で
standby_leaderに昇格するときにon_reloadを起動しないでください Alexander Kukushkinstandby_leaderに昇格するときに、primary_conninfoを変更し、ロールを更新し、Postgresをリロードします。on_role_changeおよびon_reloadは実質的に互いに重複するため、Patroniはon_role_changeのみを呼び出します。gssencmodeおよびchannel_binding接続パラメーターのサポートを追加しました Alexander KukushkinPostgreSQL 12では、
gssencmodeおよび13channel_binding接続パラメーターを導入し、postgresql.authenticationセクションで定義された場合に使用できるようになりました。wal_keep_segmentsからwal_keep_sizeへのハンドル名前変更 Alexander Kukushkin構成に誤りがある場合13では
wal_keep_segments、古いバージョンではwal_keep_size、Patroniは自動的に構成を調整します。可能であれば、13で
--restore-target-walとともにpg_rewindを使用します Alexander KukushkinPostgreSQL 13では、Patroniは
restore_commandが構成されているかどうかを確認し、pg_rewindにそれを使用するように指示します。
New features
[ベータ]純粋なRAFTでのパトローニのサポートを実装しました Alexander Kukushkin
これにより、Etcd、Consul、Zookeeperなどのサードパーティに依存せずにPatroniを実行できます。 HAの場合、3つのPatroniノード、またはPatroniで2つのノードと1つのノードで
patroni_raft_controllerを実行する必要があります。詳細については、patroni_raft_controllerを確認してください。[ベータ] gPRCゲートウェイを介したEtcd v3プロトコルのサポートを実装しました。Alexander Kukushkin
Etcd 3.0は4年以上前にリリースされ、Etcd 3.4ではデフォルトでv2が無効になっています。また、v2がEtcdから完全に削除される可能性があるため、PatroniにEtcd v3のサポートを実装しました。それを使用し始めるには、Patroni構成ファイルである
etcd3セクションを明示的に作成する必要があります。複数の同期スタンバイのサポート Krishna Sarabu
これにより、複数の同期レプリカでクラスターを実行できます。同期レプリカの最大数は、新しいパラメーター
synchronous_node_countによって制御されます。デフォルトで1に設定され、synchronous_modeがoffに設定されている場合、効果はありません。pre_promoteスクリプトを呼び出す可能性を追加しました。Sergey Dudoladovコールバックとは異なり、
pre_promoteスクリプトは、リーダーロックを取得した後、Postgresを昇格する前に同期的に呼び出されます。スクリプトが失敗するか、ゼロ以外の終了コードで終了すると、現在のノードはリーダーロックを解放します。構成ディレクトリのサポートを追加しました Floris van Nee
ディレクトリ内のYAMLファイルは、アルファベット順にロードおよび適用されます。
PostgreSQLパラメーターの高度な検証 Alexander Kukushkin
特定のパラメーターが現在のPostgreSQLバージョンでサポートされていない場合、またはその値が正しくない場合、Patroniはパラメーターを完全に削除するか、値を修正しようとします。
プロモート後の強制チェックポイントが完了したときにメインスレッドを起動します Alexander Kukushkin
レプリカは、DCSのリーダーのメンバーキーを介してチェックポイントの指示を待機しています。キーは通常、 HAループごとに1回のみ更新されます。メインスレッドをウェイクアップしないと、レプリカは必要よりも長く
loop_wait秒まで待機する必要があります。9.6+での
pg_stat_wal_receiverビューの使用 Alexander Kukushkinビューには、
primary_conninfoおよびprimary_slot_nameの最新の値が含まれていますが、recovery.confの内容は古い可能性があります。Patroni構成ファイルでのIPv6アドレスの処理の改善 Mateusz Kowalski
IPv6アドレスは角かっこで囲まれることになっていますが、パトローニはそれをプレーンに取得することを期待していました。両方の形式がサポートされるようになりました。
Consul
service_tags設定パラメーターを追加しました。Robert Edströmこれらは、ロードバランサーなどによる動的なサービス検出に役立ちます。
ZookeeperのSSLサポートを実装しました Kostiantyn Nemchenko
kazoo>=2.6.0が必要です。カスタムブートストラップ方法の
no_paramsオプションを実装しました。Kostiantyn Nemchenkoこれにより、シェルスクリプトにラップせずに
wal-g、pgBackRestおよびその他のバックアップツールを呼び出すことができます。initに失敗した後にWALとテーブルスペースを移動する Feike Steenbergen
reinitを実行したときに、PatroniはPGDATAだけでなく、シンボリックリンクされたWALディレクトリとテーブルスペースも既に削除していました。move_data_directory()メソッドは、同様のジョブ、つまりWALディレクトリとテーブルスペースの名前を変更し、PGDATAのシンボリックリンクを更新します。
Improved in pg_rewind support
タイムライン発散チェックの改善 Alexander Kukushkin
レプリカ上の再生された場所がスイッチポイントの前にない場合、または元のプライマリのチェックポイントレコードの最後がスイッチポイントと同じである場合、巻き戻す必要はありません。チェックポイントレコードの最後を取得するために、
pg_waldumpを使用し、その出力を解析します。pg_rewindがそれについて文句を言っている場合は、不足しているWALを取得してみます Alexander Kukushkinpg_rewindに必要なWALセグメントがpg_walディレクトリに存在しないため、pg_rewindは分岐ポイントの前にチェックポイントの場所を見つけることができません。 PostgreSQL 13以降、pg_rewindは、不足しているWALを取得するためにrestore_commandを使用できます。古いPostgreSQLバージョンの場合、Patroniは失敗した巻き戻し試行のエラーを解析し、自分自身でrestore_commandを呼び出すことにより欠落しているWALを取得しようとします。スタンバイクラスターで新しいタイムラインを検出し、必要に応じて巻き戻し/再初期化をトリガーします。 Alexander Kukushkin
standby_clusterは、プライマリクラスターから分離されているため、リーダー選挙とタイムラインのスイッチについてすぐには認識しません。ファクトを検出するために、standby_leaderは、pg_walの新しい履歴ファイルを定期的にチェックします。履歴ログ出力を短縮および美化します Alexander Kukushkin
Patroniが
pg_rewindの必要性を判断しようとしている場合、プライマリから履歴ファイルの内容をログに書き込む可能性があります。履歴ファイルは、フェイルオーバー/スイッチオーバーのたびに成長し、最終的にはあまりにも多くの行を占有し始めますが、そのほとんどはあまり役に立ちません。生データを表示する代わりに、Patroniは、現在のレプリカタイムラインの前に3行と後に2行のみを表示します。
Improvements on K8s
kubernetespythonモジュールを削除します。Alexander Kukushkin公式のPython kubernetesクライアントには、大量の自動生成コードが含まれているため、非常に重くなっています。 PatroniはK8s APIエンドポイントのごく一部のみを使用し、それらのサポートの実装は難しくありませんでした。
kubernetesサービスをバイパスできるようにしました。Alexander KukushkinK8sで実行されている場合、Patroniは通常、
kubernetesサービスを介してK8s APIと通信します。そのアドレスはKUBERNETES_SERVICE_HOST環境変数で公開されます。他のサービスと同様に、kubernetesサービスはkube-proxyによって処理され、これは、構成に応じて、トラフィックルーティングにユーザー空間プログラムまたはiptablesに依存します。中間コンポーネントをスキップし、K8sマスターノードに直接接続することにより、より良い再試行戦略を実装し、K8sマスターノードがアップグレードされたときにPostgresを降格するリスクを軽減できます。PatroniクラスターのすべてのポッドのHAループを同期します Alexander Kukushkin
そうしないと、障害検出時間が
ttlからttl + loop_waitに増加しました。K8のサブセットアドレスに
referencesおよびnodenameを設定します。Alexander Kukushkin一部のロードバランサーはこの情報に依存しています。
update_leader()で考えられる競合状態を修正しました。Alexander Kukushkinパトロニの外部で発生するリーダー構成マップまたはエンドポイントの同時更新により、
update_leader()呼び出しが失敗する可能性があります。この場合、Patroniは、現在のノードがまだリーダーロックを所有していることを再確認し、更新を繰り返します。存在しない構成のパッチの適用を明示的に禁止します Alexander Kukushkin
kubernetes以外のDCSでは、cluster.configがNoneであるため、 PATCH呼び出しは例外で失敗していますが、Kubernetesでは、喜んで構成アノテーションを作成し、ブートストラップが完了した後にブートストラップ構成の書き込みを防止していました。pauseのバグを修正しました。Alexander Kukushkinリーダーキーが存在しない場合、レプリカは
primary_conninfoを削除し、Postgresを再起動していましたが、何もしないはずです。
Improvements in REST API
ワーカースレッドが開始されるまでTLSハンドシェイクを遅延します。Alexander Kukushkin、Ben Harris
TLSハンドシェイクがAPIスレッドで実行され、クライアントサイドがデータを送信しなかった場合、APIスレッドはブロックされましたDoSの危険があります。
REST APIのクライアント証明書とは別に
basic-authをチェックします Alexander Kukushkin以前は、クライアント証明書のみが検証されていました。 2つのチェックを独立して実行することは、完全に有効なユースケースです。
OPTIONS要求のHTTPヘッダーの後にダブルCRLFを書き込みます。Sergey BurladyanHAProxyは単一の
CRLFで満足していましたが、Consulのヘルスチェックは、切断された接続と予期しないEOFについて不平を言いました。GET /clusterは、Zookeeper Alexander Kukushkinの古いメンバー情報を表示していましたエンドポイントは、Patroni内部クラスタービューを使用していました。 Patroni自分自身の場合、それは問題を引き起こしませんでしたが、外部に公開される場合、最新の情報、特にレプリケーションラグを表示する必要があります。
スタンバイクラスターのヘルスチェックを修正しました。Alexander Kukushkin
マスターの
GET /standby-leaderとstandby_leaderのGET /masterは、誤って200で応答していました。DELETE /switchoverを実装しました Alexander KukushkinREST API呼び出しは、スケジュールされたスイッチオーバーを削除します。
/readinessおよび/livenessエンドポイントを作成しました Alexander Kukushkinこれらは、K8sサービスがラベルセレクターで使用される場合、サブセットアドレスから/"unhealthy"ポッドを削除するのに役立つ可能性があります。
GET /replicaおよびGET /asyncREST APIヘルスチェックの強化 Krishna Sarabu、Alexander Kukushkinチェックはオプショナルキーワード
?lag=<max-lag>をサポートするようになり、遅延が指定された値より小さい場合にのみ200で応答します。この機能に依存する場合、リーダーのWAL位置に関する情報はloop_wait秒ごとにのみ更新されることに注意してください。REST API応答でのユーザー定義のHTTPヘッダーのサポートを追加しました Yogesh Sharma
この機能は、ブラウザから要求が行われた場合に役立つ場合があります。
Improvements in patronictl
patronictl pauseに存在しないリーダーを呼び出そうとしないでください。Alexander KukushkinK8sでリーダーのないクラスターを一時停止しているときに、
patronictlは、メンバー/"None/"にアクセスできないという警告を表示していました。メンバー
conn_urlが見つからない場合の処理 Alexander KukushkinK8sでは、Patroniがまだ実行されていないため、ポッドに必要なアノテーションがない可能性があります。
patronictlが失敗していました。ASCIIクラスタートポロジを印刷する機能を追加しました。Maxim Fedotov、Alexander Kukushkin
カスケードレプリケーションを使用してクラスターの概要を取得するのに非常に役立ちます。
patronictl flush switchoverの実装 Alexander Kukushkinそれまでは
patronictl flushは、スケジュールされた再起動のキャンセルのみをサポートしていました。
Bugfixes
既存のPGDATAを使用したクラスターのブートストラップ中の属性エラー Krishna Sarabu
/historyキーを作成/更新しようとしたとき、PatroniはDCSでまだ作成されていないClusterConfigオブジェクトにアクセスしていました。Consulの例外処理の向上 Alexander Kukushkin
touch_member()メソッドの未処理の例外により、Patroniプロセス全体がクラッシュしました。post_initスクリプトにsynchronous_commit=localを適用する Alexander KukushkinPatroniはユーザー
replication、rewindを作成するときに既にそれを行っていましたが、post_initの場合にそれを欠いていたのは見落としでした。その結果、スクリプトが自分自身で内部的に実行していない場合、synchronous_modeのブートストラップは完了できませんでした。領事プールマネージャーponvenkatesの
maxsizeの増加デフォルトの
size=1では、いくつかの警告が生成されました。パトローニはPostgresが実行されていると誤って報告していました Alexander Kukushkin
たとえば、Postgresがディスク不足エラーのためにクラッシュした場合、状態は更新されませんでした。
欠損値または空の値の代わりに
*をpgpassに入れます Alexander Kukushkinたとえば
standby_cluster.portが指定されていない場合、pgpassファイルは誤って生成されました。特殊文字を使用してリーダーノードでの物理レプリケーションスロットの作成をスキップする Krishna Sarabu
Patroniは、名前に'-'などの特殊文字が含まれている場合、リーダーノードの休止スロット
slots定義時を作成しているようですたとえば、/"abc-us-1/"の場合。カスタムブートストラップで存在しない
pg_hba.confの削除を回避します Krishna Sarabuカスタムブートストラップ後に
pg_hba.confがたまたまpgdataディレクトリの外部にある場合、Patroniは失敗していました。
バージョン1.6.5
2020-08-23リリース
New features
マスターストップタイムアウト クリシュナ・サラブ
Postgresを停止するときにPatroniが待機できる秒数。
synchronous_modeが有効な場合にのみ有効です。 0より大きい値に設定され、synchronous_modeが有効になっている場合、Patroniはstopオペレーションがmaster_stop_timeoutで設定された値を超えて実行されている場合にSIGKILLをポストマスターに送信します。耐久性と可用性のトレードオフに応じて値を設定します。パラメーターが設定されていないか、正以外の値に設定されている場合、master_stop_timeoutは効果がありません。プライマリの名前で永続的な物理スロットを作成しないでください。 Alexander Kukushkin
レプリカがダウンしているときにプライマリがWALセグメントをリサイクルするのは一般的な問題です。これで、固定数のノードと名前が変更されない静的クラスターに適したソリューションができました。
slotsのすべてのノードの名前をリストする必要があるため、ノードがダウンしているDCSに登録されていないときにプライマリがスロットを削除しないようにします。Config Validatorの最初のドラフトIgor Yanchenko
Patroni構成を検証するためには、
patroni --validate-config patroni.yamlを使用します。タイムライン履歴の最大長を構成する機能 Krishna Sarabu
Patroniは、フェイルオーバー/スイッチオーバーの履歴をDCSの
/historyキーに書き込みます。時間の経過とともにこのキーのサイズは大きくなりますが、ほとんどの場合、最後の数行のみが関心があります。max_timelines_historyパラメーターを使用すると、DCSに保持するタイムライン履歴項目の最大数を指定できます。Kazoo 2.7.0互換性Danyal Prout
Kazooの一部の非パブリックメソッドはシグネチャを変更しましたが、パトローニはそれらに依存していました。
Improvements in patronictl
メンバータグを表示する コスティアンティン・ネムチェンコ、アレクサンダー・ククシュキン
タグはノードごとに個別に構成され、それらの概要を取得する簡単な方法はありませんでした
メンバーの成果の向上 Alexander Kukushkin
冗長クラスター名はすべての行に表示され、テーブルヘッダーにのみ表示されます。
$ patronictl list
+ Cluster: batman (6813309862653668387) +---------+----+-----------+---------------------+
| Member | Host | Role | State | TL | Lag in MB | Tags |
+-------------+----------------+--------+---------+----+-----------+---------------------+
| postgresql0 | 127.0.0.1:5432 | Leader | running | 3 | | clonefrom: true |
| | | | | | | noloadbalance: true |
| | | | | | | nosync: true |
+-------------+----------------+--------+---------+----+-----------+---------------------+
| postgresql1 | 127.0.0.1:5433 | | running | 3 | 0.0 | |
+-------------+----------------+--------+---------+----+-----------+---------------------+
構成ファイルが明示的に指定されているが見つからない場合に失敗する Kaarel Moppel
以前は
patronictlはDEBUGメッセージのみを報告していました。初期化されていないK8sポッドが保護者を破壊する問題を解決しました。Alexander Kukushkin
Patroniは、K8の特定のポッドアノテーションに依存しています。 Patroniポッドのいずれかが停止または起動している場合、有効なアノテーションはまだなく、
patronictlは例外で失敗していました。
Stability improvements
K8s APIサーバーへのLIST呼び出しが失敗した場合に1秒のバックオフを適用する Alexander Kukushkin
これは主に、ログの氾濫を回避するために必要ですが、メインスレッドのスタベーションを防ぐことにも役立ちます。
retry-afterHTTPヘッダーがK8s APIから返された場合に再試行します。Alexander KukushkinK8s APIサーバーが要求で圧倒されている場合、再試行を求める場合があります。
ポストマスターから
KUBERNETES_環境をスクラブする Feike SteenbergenKUBERNETES_環境変数はPostgreSQLには必要ありませんが、ポストマスターに公開すると、バックエンドおよび通常のデータベースユーザーたとえばpl/perlを使用して公開されます。再初期化時にテーブルスペースをクリーンアップする Krishna Sarabu
再初期化中に、Patroniは
PGDATAのみを削除し、ユーザー定義のテーブルスペースディレクトリを残していました。これにより、Patroniが再初期化でループする原因となります。この問題の以前の回避策は、PGDATAスクリプトを実装することでした。プロモートが発生した後に
CHECKPOINTを明示的に実行するようにしました Alexander Kukushkin新しいプライマリが
pg_rewindで使用できるようになるまでの時間を短縮するのに役立ちます。etcdメンバーのスマートリフレッシュ Alexander Kukushkin
PatroniがEtcdクラスターのすべてのメンバーで要求の実行に失敗した場合、Patroniは、次回再試行する前にIP /ホストの変更が
AまたはSRVレコードを再チェックします。pg_controldataの欠損値をスキップする (Feike Steenbergen)PGDATAと一致しないバージョンのバイナリを使用しようとすると、値が欠落します。 PatroniはとにかくPostgresを起動しようとします、そしてPostgresはメジャーバージョンが一致しないと不平を言い、エラーで中断します。
Bugfixes
必要に応じてConsulのSSL検証を無効にします。Julien Riou
urllib3の特定のバージョンから、SSL検証を効果的に無効にするには、cert_reqsを明示的にssl.CERT_NONEに設定する必要があります。HAループのすべてのサイクルでレプリケーション接続を開くことを避けます。Alexander Kukushkin
回帰は1.6.4で導入されました。
障害が発生したプライマリで
on_role_changeコールバックを呼び出します Alexander Kukushkin特定の場合では、仮想IPが古いプライマリに接続されたままになる場合があります。回帰は1.4.5で導入されました。
pg_rewindが成功した後にpostgresが開始された場合、リワインド状態をリセットする Alexander Kukushkin
このバグの結果、Patroniは一時停止モードでpostgresを手動でシャットダウンして起動していました。
recovery.confをチェックするときにrecovery_min_apply_delayをmsに変換します12より前のPostgreSQLで
recovery_min_apply_delayが構成されている場合、Patroniはレプリカを無期限に再起動していました。PyInstallerの互換性Alexander Kukushkin
PyInstallerは、Pythonアプリケーションをスタンドアロンの実行可能ファイルにフリーズ(パッケージ)します。
multiprocessingのforkではなくspawnメソッドに切り替えたときに、互換性が壊れました。
バージョン1.6.4
2020-01-27リリース
New features
patronictl reinitの--waitオプションを実装しました Igor Yanchenko--waitオプションが使用される場合、Patronictlはreinitが完了するまで待機します。Windowsサポートのさらなる改善Igor Yanchenko、Alexander Kukushkin
統合テストに使用されるすべてのシェルスクリプトはPythonで書き換えられます
pg_ctl killは、非posixシステムでpostgresを停止するために使用されますUnixドメインソケットを使用しないでください
Stability improvements
unix_socket_directoriesおよびstats_temp_directoryが存在することを確認します Igor YanchenkoPatroniとPostgresの起動時に、
unix_socket_directoriesおよびstats_temp_directoryが存在することを確認するか、それらを作成してみてください。 Patroniは、作成に失敗すると終了します。postgresql.pgpassがパトローニが書き込みアクセスがある場所にあることを確認します。Igor Yanchenko書き込みアクセスがない場合、Patroniは例外で終了します。
デフォルトでConsul
serfHealthチェックを無効にします Kostiantyn Nemchenkoネットワークに小さな問題が発生した場合でも、
serfHealthの障害は、ノードに関連付けられているすべてのセッションの無効化につながります。したがって、リーダーキーはttlよりもはるかに早く失われ、レプリカの不要な再起動と、場合によってはプライマリの降格が発生します。K8s APIへの接続のTCPキープアライブを構成する Alexander Kukushkin
TTL秒後にソケットから何も取得しない場合、デッドであると考えられます。
ユーザー作成時にパスワードのロギングを回避する Alexander Kukushkin
パスワードが拒否されるか、ロギングが冗長に構成されているか、まったく構成されていない場合、パスワードがpostgresログに書き込まれる可能性があります。それを回避するために、Patroniはユーザーを作成/更新しようとする前に、
log_statement、log_min_duration_statement、およびlog_min_error_statementをいくつかの安全な値に変更します。
Bugfixes
カスケードレプリカで
standby_cluster構成のrestore_commandを使用する Alexander Kukushkinstandby_leaderは、機能が存在する最初から既にそれを行っていました。レプリカで同じことをしないと、スタンバイリーダーに追いつけない可能性があります。スタンバイクラスターによって報告された更新タイムライン Alexander Kukushkin
タイムラインスイッチの場合、スタンバイクラスターはプライマリから正しく複製していましたが、
patronictlは古いタイムラインを報告していました。custom_confで特定のリカバリパラメーターを定義できるようにしました。 Alexander Kukushkin
レプリカでリカバリパラメーターの検証を行うとき、パトロニは、 パトロニ構成で定義されていないが、
postgresql.auto.confまたはpostgresql.conf以外のファイルで定義されている場合、archive_cleanup_command、promote_trigger_file、recovery_end_command、recovery_min_apply_delay、およびrestore_commandをスキップします。名前にピリオドを含むpostgresqlパラメーターの処理を改善しました Alexander Kukushkin
このようなパラメーターは、ユニットが必ずしも文字列ではない拡張機能によって定義できます。値の変更には、再起動が必要になる場合がありますたとえば
pg_stat_statements.max。シャットダウン中の例外処理を改善しました。Alexander Kukushkin
シャットダウン中に、PatroniはDCSのステータスを更新しようとします。 DCSにアクセスできない場合、例外が発生する場合があります。例外処理の欠如が、ロガースレッドの停止を妨げていました。
バージョン1.6.3
2019-12-05リリース
Bugfixes
pg_rewindの実行時にパスワードを公開しないでください Alexander Kukushkin#1301 _にバグが導入されました
postgresql.authentication〜pg_basebackupおよびカスタムレプリカ作成方法で指定された接続パラメーターを適用します。Alexander Kukushkin彼らはURLのような接続文字列に依存しているため、パラメーターは適用されません。
バージョン1.6.2
2019-12-05リリース
New features
patroni --versionを実装しました イゴール・ヤンチェンコPatroniの現在のバージョンを出力して終了します。
すべてのhttp要求の
user-agenthttpヘッダーを設定します Alexander KukushkinPatroniは、httpプロトコルを介してConsul、Etcd、およびKubernetes APIと通信しています。特別に作られた
user-agent例Patroni/1.6.2 Python/3.6.8 Linuxがあると、デバッグとモニタリングに役立つ場合があります。例外トレースバックのログレベルを構成できるようにします Igor Yanchenko
log.traceback_level=DEBUGを設定すると、トレースバックはlog.level=DEBUGの場合にのみ可視されます。デフォルトの動作は同じままです。
Stability improvements
構成ファイルに必要なモジュールを検索するときに、すべてのDCSモジュールのインポートを回避します。Alexander Kukushkin
たとえば、ファイルだけが必要な場合、Etcd、Consul、およびKubernetesのモジュールをインポートする必要はありません。動物園の飼育員。メモリ使用量を削減し、 INFOメッセージ
Failed to import smthの問題を解決します。明示的な要件からpython
requestsモジュールを削除しました Alexander Kukushkinこれは重要な目的には使用されませんでしたが、
urllib3の新しいバージョンがリリースされると多くの問題を発生させました。YAML配列の代わりにコンマ区切りの文字列として書き込まれた
etcd.hostsの処理を改善しました。Igor Yanchenko以前は、
host1:port1, host2:port2フォーマットで書き込まれると失敗していましたコンマの後のスペース文字。
Usability improvements
patronictlの空のリストからメンバーを選択することをユーザーに強制しないでください Igor Yanchenkoユーザーが間違ったクラスター名を指定した場合、空のリストからメンバーを選択するように求めるのではなく、例外を発生させます。
REST APIがバインドできない場合にエラーメッセージをもっと役立つようにしました Igor Yanchenko
経験の浅いユーザーにとって、Pythonスタックトレースから何が悪いのかを理解するのは難しい場合があります。
Bugfixes
wal_buffersの計算を修正しました。Alexander KukushkinPostgreSQL 11では、基本単位が8 kBブロックからバイトに変更されました。
PostgreSQL 10+でのみ
primary_conninfoでpassfileを使用する Alexander Kukushkin古いバージョンでは、最新バージョンの
libpqがインストールされていない限り、passfileが動作する保証はありません。
バージョン1.6.1
2019-11-15リリース
New features
PATRONICTL_CONFIG_FILE環境変数msvechlaを追加しました環境から
patronictlの--config-file引数を構成できます。patronictl historyの実装 Alexander Kukushkinフェイルオーバー/スイッチオーバーの履歴を表示します。
pg_rewindを実行するときにPGOPTIONSで-c statement_timeout=0を渡すようにしました。 Alexander Kukushkinサーバー上の
statement_timeoutが小さな値に設定され、pg_rewindによって実行されたステートメントのいずれかがキャンセルされた場合から保護します。PostgreSQL構成のより低い値を許可しますSoulou
Patroniは、一部のPostgreSQL構成パラメーターを一部のハードコードされた値より小さく設定することを許可していませんでした。最小許可値が小さくなりました、デフォルト値は変更されていません。
証明書ベースの認証を許可します Jonathan S. Katz
この機能は、スーパーユーザー、レプリケーション、リワインドアカウントの証明書ベースの認証を有効にし、ユーザーは接続する
sslmodeを指定できます。パスワードの代わりに
primary_conninfoでpassfileを使用します。Alexander Kukushkinpostgresql.confでの
600権限の設定を回避できます構成の変更に関係なく
pg_ctl reloadを実行します Alexander Kukushkin一部の構成ファイルはPatroniによって制御されていない可能性があります。誰かがREST APIを介してまたはPatroniプロセスにSIGHUPを送信してリロードを実行している場合、通常はPostgresもリロードされると予想されます。以前は、Patroni構成の
postgresqlセクションに変更がない場合、これは発生しませんでした。primary_conninfoだけでなくすべての復旧パラメーターを比較します Alexander Kukushkin以前は、
check_recovery_conf()メソッドはprimary_conninfoが変更されたかどうかをチェックするだけで、他のすべてのリカバリパラメーターは考慮されませんでした。再起動せずにいくつかの回復パラメーターを適用できるようにします。Alexander Kukushkin
PostgreSQL 12から、次のリカバリパラメーターは、再起動せずに変更できます。
archive_cleanup_command、promote_trigger_file、recovery_end_command、およびrecovery_min_apply_delay。将来のPostgresリリースでは、このリストは拡張され、Patroniはそれを自動的にサポートします。use_slotsをオンラインで変更できるようにしました Alexander Kukushkin以前は、Patroniを再起動し、スロットを手動で削除する必要がありました。
Postgresの起動時に
PATRONI_接頭辞の環境変数のみを削除する Cody Coonsさまざまな外部データラッパーの実行に関する多くの問題を解決します。
Stability improvements
K8s APIを使用する場合はLIST + WATCHを使用します。Alexander Kukushkin
これにより、オブジェクトの変更ポッド、エンドポイント/構成マップを効率的に受信でき、K8sマスターノードのストレスが軽減されます。
ブートストラップ中にPGDATAが空でない場合のワークフローを改善しました。Alexander Kukushkin
initdbソースコードによると、lost+foundおよび.dotfilesのみが存在する場合、PGDATAが空であると見なす場合があります。今、パトローニも同じことをしています。PGDATAがたまたま空でなく、同時にpg_controldataの観点から有効でない場合、Patroniは文句を言って終了します。すべてのHAループで高価な
os.listdir()の呼び出しを回避します Alexander KukushkinシステムがIOストレス下にある場合、
os.listdir()の実行に数秒または数分かかる場合があり、パトロニのHAループに悪影響を与える可能性があります。これにより、更新がないためにリーダーキーがDCSから消失する可能性もあります。 PGDATAが空ではないことを確認するための、より適切で安価な方法があります。次に、PGDATAにglobal/pg_controlファイルの存在を確認します。ログインフラストラクチャの一部の改善 Alexander Kukushkin
以前は、ロギングスレッドが
daemonスレッドであったため、シャットダウン時に最後の数行のログ行が失われる可能性がありました。Python 3.4+で
spawnマルチプロセッシングスタートメソッドを使用する Maciej KowalczykPythonでは、スレッドとマルチプロセッシングがうまく混合しないことが知られています issue _ 。デフォルトの方法
forkからspawnへの切り替えが推奨される回避策です。そうしないと、 Postgresが実際に起動して実行されているにもかかわらず、 Postmaster開始プロセスがハングし、Patroniが無期限にINFO: restarting after failure in progressを報告する可能性があります。
Improvements in REST API
REST APIでクライアント証明書を確認できるようにします Alexander Kukushkin
verify_clientがrequiredに設定されている場合、PatroniはすべてのREST API呼び出しのクライアント証明書をチェックします。optionalに設定されている場合、クライアント証明書は、安全でないすべてのREST APIエンドポイントがチェックされます。Postgresが実行されていない場合、
GET /replicaヘルスチェック要求の応答コード503を返します。Alexander AnikinPostgresは、クライアント接続の受け入れを開始する前の復旧にかなりの時間を費やす場合があります。
/historyおよび/clusterエンドポイントを実装します Alexander Kukushkin/historyエンドポイントは、DCSのhistoryキーのコンテンツを表示します。/clusterエンドポイントは、すべてのクラスターメンバーと、保留中およびスケジュールされた再起動またはスイッチオーバーなどのサービス情報を表示します。
Improvements in Etcd support
Etcd RAFT内部エラーでの再試行 Alexander Kukushkin
Etcdノードはシャットダウンされるときに、
response code=300, data='etcdserver: server stopped'を送信します。これが、Patroniがプライマリを降格する原因となっていました。Etcd要求の再試行を早めにあきらめないでください Alexander Kukushkin
いくつかのネットワーク問題が発生すると、パトロニはすぐにEtcdノードのリストを使い果たし、
retry_timeout全体を使用せずに断念しました。その結果、プライマリが降格する可能性がありました。
Bugfixes
pg_rewindユーザーに実行権限を付与するときにsynchronous_commitを無効にする kremiussynchronous_mode_strict: trueでブートストラップが行われる場合、`GRANT EXECUTE`ステートメントは、使用可能な非同期ノードのため無期限に待機していました。Python 3.7のメモリリークを修正しました。Alexander Kukushkin
Patroniは
ThreadingMixInを使用してREST API要求を処理し、Python 3.7はデフォルトで非デーモン以外のすべての要求に対してスレッドを生成します。非同期アクションの競合状態を修正しました。Alexander Kukushkin
停止したPostgresを復旧しようとすることにより、
patronictl reinit --forceが上書きされる可能性がありました。これは、ベースバックアップの実行中にパトローニがPostgresを起動しようとした場合に発生しました。postmaster_start_time()メソッドの競合状態を修正しました。Alexander KukushkinメソッドがREST APIスレッドから実行される場合、別のカーソルオブジェクトを作成する必要があります。
大文字を含む名前を持つ同期スタンバイを昇格させない問題を修正しました。Alexander Kukushkin
Postgresは、
application_nameとsynchronous_standby_namesの値を比較するときに同じことをしていたため、名前を小文字に変換しました。新しいものを開始する前に、コールバックプロセスとともにすべての子をkillします Alexander Kukushkin
そうしないと、bashでコールバックを実装することが困難になり、最終的に2つのコールバックが同時に実行される状況が発生する可能性があります。
'start failed'問題を修正しました Alexander Kukushkin
特定の条件下では、 Postgresが起動して実行されているにもかかわらず、Postgresの状態が「start failed」に設定される場合があります。
バージョン1.6.0
2019-08-05リリース
このバージョンでは、PostgreSQL 12との互換性を追加し、PostgreSQL 11以降でスーパーユーザーなしでpg_rewindを実行できるようにし、IPv6サポートを有効にします。
New features
Psycopg2は要件から削除されたため、個別にインストールする必要があります。Alexander Kukushkin
2.8.0から
psycopg2は、ファイルシステム上の同じ場所に同時にインストールできる2つの異なるパッケージpsycopg2、およびpsycopg2-binaryに分割されました。依存関係地獄の問題を減らすために、ユーザーがインストール方法を選択できるようにしました。使用可能なオプションがいくつかあります。psycopg2を参照してください。PostgreSQL 12との互換性 Alexander Kukushkin
PostgreSQL 12からは
recovery.confはなくなり、以前のすべてのリカバリパラメーターはrecovery.confに変換されます。ALTER SYSTEM SET primary_conninfoまたは同様のものから保護するために、Patroniはpostgresql.auto.confを解析し、そこからすべてのスタンバイおよびリカバリーパラメーターを削除します。 Patroni構成は下位互換性を維持します。たとえば、restore_commandはGUCであるにもかかわらず、postgresql.recovery_conf.restore_commandセクションで指定でき、PatroniはPostgreSQL 12のpostgresql.confにそれを書き込みます。PostgreSQL 11以降でスーパーユーザーなしで
pg_rewindを使用できるようにしました Alexander Kukushkinこの機能を使用する場合は、Patroni構成ファイルの
postgresql.authentication.rewindセクションでusernameおよびpasswordを定義してください。既存のクラスターの場合、ユーザーを手動で作成し、いくつかの機能でGRANT EXECUTE権限を作成する必要があります。詳細については、PostgreSQLusername_をご覧ください。レプリカで実際の
primary_conninfo値と目的のprimary_conninfo値をスマートに比較します Alexander Kukushkin既存のプライマリスタンバイクラスターをパトロニによって管理されているクラスターに変換する場合、レプリカのリスタートを回避するのに役立つ場合があります
IPv6のサポート Alexander Kukushkin
2つの大きな問題がありました。 Patroni REST APIサービスは
0.0.0.0でのみリッスンしており、api_urlおよびconn_urlで使用されるIPv6 IPアドレスは適切に引用されませんでした。KerberosのサポートAjith Vilas、Alexander Kukushkin
Patroni構成ファイルでパスワードを定義する代わりに、Postgresノード間でKerberos認証を使用することが可能になります
Manage
pg_ident.confAlexander Kukushkinこの機能は
pg_hba.confと同様に動作します。postgresql.pg_identが構成ファイルまたはDCSで定義されている場合、Patroniはその値をpg_ident.confに書き込みますが、postgresql.parameters.ident_fileが定義されている場合、Patroniはpg_identが外部から管理されていると想定し、ファイルを更新しません。
Improvements in REST API
/healthエンドポイントを追加しました Wilfred RosetPostgreSQLが実行されている場合にのみHTTPステータスコードを結果ます
/read-onlyおよび/read-writeエンドポイントを追加しました。Julien Riou/read-onlyエンドポイントは、レプリカとプライマリ全体で読み取りバランスのとれた読み取りを有効にします。/read-writeエンドポイントは、/primary、/leader、および/masterのエイリアスです。SSLContextを使用してREST APIソケットをラップしました。Julien Rioussl.wrap_socket()の使用は非推奨であり、TLS 1.1のような間もなく非推奨になるプロトコルはまだ許可されていました。
Logging improvements
2段階ロギング Alexander Kukushkin
すべてのログメッセージは、最初にメモリ内のキューに書き込まれ、後で別のスレッドからstderrまたはファイルに非同期にフラッシュされます。最大キューサイズは制限されています構成可能。制限に到達すると、Patroniはログを失い始めますが、これはHAループをブロックするよりはまだ良いです。
レイテンシーとともにGET / OPTIONS API呼び出しのデバッグログを有効にします。Jan Tomsa
HAProxy、Consul、またはどのノードがプライマリ/レプリカであるかを決定するその他のツールによって実行されるヘルスチェックのデバッグに役立ちます。
再試行でキャッチされた例外をログに記録します Daniel Kucera
試行回数またはタイムアウトに到達したときの最後の例外をログに記録します。 DCSへの通信が失敗した場合に、いくつかの問題のデバッグに役立つことを願っています。
Improvements in patronictl
スケジュールされたスイッチオーバーと再起動のためのダイアログの強化 Rafia Sabih
以前のダイアログはスケジュールされたアクションを考慮していないため、誤解を招くものでした。
構成ファイルが存在するかどうかを確認します Wilfred Roset
指定されたファイル名が存在しない場合、サイレントに無視する代わりに、構成ファイルについて詳しく説明します誤解を招く可能性があります。
EDITORのフォールバック値を追加しました ウィルフリード・ロゼットEDITOR環境変数が定義されていない場合、patronictl edit-configは`PatroniCtlException`で失敗していました。新しい戦略は、editorおよびviを試すことです。これは、ほとんどのシステムで利用できるはずです。
Improvements in Consul support
Consul一貫性モードを指定できるようにしました。Jan Tomsa
一貫性モード here _の詳細については、こちらをご覧ください。
SIGHUPでConsul構成をリロードキャメロンダニエルクセラ、アレクサンダーククシュキン
これは、誰かが
tokenの値を変更する場合に特に役立ちます。
Bugfixes
スイッチオーバー/フェイルオーバーのコーナーケースを修正しました。Sharoon Thomas
REST APIにアクセスできず、フォールバックとしてDCSを使用している場合、変数
scheduled_atは未定義になる場合があります。カスタムブートストラップ中に
pg_hba.confのローカルホストへのオープントラスト Alexander Kukushkin以前はunix_socketのみにオープンされていたため、多くのエラーが発生していました
FATAL: no pg_hba.conf entry for replication connection from host /"127.0.0.1/", user /"replicator/"元のリーダーがリードしている場合でも、同期ノードを正常であると考えます Alexander Kukushkin
プライマリがDCSへのアクセスを失うと、Postgresを読み取り専用で再起動しますが、他のノードがREST APIを介して古いプライマリにアクセスできる場合があります。古いプライマリが同期スタンバイより先にWAL位置を報告していたため、このような状況により、同期スタンバイが昇格しませんでした。
スタンバイクラスターのバグ修正 Alexander Kukushkin
standby_leaderがアクセスできない場合に、スタンバイクラスターでレプリカをブートストラップできるようにし、その他のいくつかのマイナー修正。
バージョン1.5.6
2019-08-03リリース
New features
プロキシのセットを介したetcdクラスターでの作業のサポート Alexander Kukushkin
etcdクラスターに直接アクセスできず、プロキシのセットを介してアクセスできない場合があります。この場合、Patroniはetcdトポロジ検出を実行せず、プロキシホストを介したラウンドロビンだけを実行します。動作は`etcd.use_proxies`によって制御されます。
ノードのロールが変更されたときのコールバック動作が変更されました Alexander Kukushkin
ロールが`master`または`standby_leader`から`replica`に、または`replica`から`standby_leader`に変更された場合、`on_restart`コールバックは、`on_role_change`コールバックを優先して呼び出されません。
postgresの起動方法を変更します Alexander Kukushkin
自分自身と`multiprocessing.Pipe`を実行する代わりに`multiprocessing.Process`を使用して、ポストマスターpidをPatroniプロセスに送信します。その前はパイプを使用していましたが、標準入力がクローズされた状態でポストマスタープロセスを残していました。
Bug fixes
スタンバイリーダーのREST APIから返されたロールを修正しました Alexander Kukushkin
`standby_leader`の代わりに`replica`を誤って返していました
Killできなかった場合はコールバック終了を待機します Julien Tachoires
Patroniには、新しいコールバックをキャンセルしたもの`sudo`の下で実行されているコールバックスクリプトを終了するための十分な特権がありません。実行中のスクリプトを強制終了できなかった場合、Patroniは完了するまで待機して、次のコールバックを実行します。
dcs.get_clusterメソッドにかかるロック時間を削減します。Alexander Kukushkin
ロックが保持されているため、DCSの遅延がREST APIヘルスチェックに影響を与え、誤検出を発生させていました。
pg_wal/`pg_xlog`がシンボリックリンクの場合、PGDATAのクリーニングを改善しました。Julien Tachoires
この場合、Patroniはターゲットディレクトリからファイルを明示的に削除します。
os.path.relpathの不要な使用を削除します。Ants Aasma
それは作業ディレクトリを解決できるか、後でファイルシステムからリンクが解除されるディレクトリでPatroniが起動された場合に何が失敗するかによって異なります。
Etcdとの通信時にsslバージョンを強制しないでください Alexander Kukushkin
何らかの不明な理由で、debianおよびubuntuのpython3-etcdはパッケージの最新バージョンに基づいていないため、Etcd v3でサポートされていないTLSv1を適用します。 Patroni側でこの問題を解決しました。
バージョン1.5.5
2019-02-15リリース
このバージョンでは、以前のマスターの自動再初期化の可能性を導入し、patroniclリスト出力を改善し、多くのバグを修正します。
New features
PATRONI_ETCD_PROTOCOL、PATRONI_ETCD_USERNAME、および`PATRONI_ETCD_PASSWORD`環境変数のサポートを追加します。Étienne M
以前は、構成ファイルまたは`PATRONI_ETCD_URL`の一部としてのみそれらを構成することが可能でしたが、これは必ずしも便利ではありません。
元マスターを自動的に再初期化できるようにしました。Alexander Kukushkin
pg_rewindが無効になっているか、使用できない場合、タイムラインが分岐しているため、元のマスターは新しいレプリカとして起動できない場合があります。この場合、それを修正する唯一の方法は、データディレクトリをワイプし、再初期化することです。この動作は、`postgresql.remove_data_directory_on_diverged_timelines`を設定することにより変更できます。設定されると、Patroniはデータディレクトリをワイプし、元のマスターを自動的に再初期化します。
patroniclリストのタイムラインに関する情報を表示する Alexander Kukushkin
古いレプリカの検出に役立ちます。それに加えて、ポート値がデフォルトでない場合、または同じホストで実行されている複数のメンバーが存在する場合、Host`は:{port}'をインクルードします。
$SCOPE-configエンドポイントに関連付けられたヘッドレスサービスを作成します Alexander Kukushkin
/"config/"エンドポイントは、クラスター全体のPatroniおよびPostgresの構成、履歴ファイル、そして最後に最も重要な`initialize`キーを保持します。 Kubernetesマスターノードが再起動またはアップグレードされると、サービスなしでエンドポイントが削除されます。 headlessサービスは削除されません。
Bug fixes
リーダーウォッチブロッキングクエリの読み取りタイムアウトを調整します Alexander Kukushkin
Consulのドキュメントによると、実際の応答タイムアウトは、指定された最大待機時間に追加される少量のランダムな追加待機時間だけ増加して、同時要求のウェイクアップ時間を分散します。 `wait / 16`の追加時間を最大期間に加算します。私たちの場合、どちらが大きいかに応じて、`wait / 15`または1秒を追加します。
レプリケーションプロトコルを介してpostgresに接続するときは、常にreplication=1を使用します。 Alexander Kukushkin
Postgres 10以降、pg_hba.confのdatabase=replicationを含む行は、パラメーターreplication=databaseを使用した接続を受け入れません。
wal専用スタンバイクラスターのrecovery.confにprimary_conninfoを書き込まないでください Alexander Kukushkin
`standby_cluster`構成で`host`も`port`も定義されていないにもかかわらず、Patroniは`primary_conninfo`を`recovery.conf`に配置していましたが、これは役に立たず、多くのエラーを生成していました。
バージョン1.5.4
リリース2019-01-15
このバージョンは、柔軟なロギングを実装し、多くのバグを修正します。
New features
伐採インフラの改善アレクサンダー・ククシュキン、ルーカス・キャピストラント、アレクサンダー・アニキン
ロギング構成は、環境変数からだけでなく、Patroni構成ファイルから構成できます。構成を更新してリロードを実行するか、PatroniプロセスにSIGHUPを送信することにより、ランタイムにロギング構成を変更できます。デフォルトでは、Patroniはログをstderrに書き込みますが、ログをファイルに直接書き込み、特定のサイズに達したときにローテーションすることが可能になりました。それに加えて、カスタム日付形式のサポートと、各Pythonモジュールのログレベルを微調整する可能性が追加されました。
リーダー選挙中に現在のタイムラインを考慮できるようにしますアレクサンダー・ククシュキン
ノードは、現在最新の既知のタイムラインにないにもかかわらず、自分自身を最も正常なノードと考えている場合があります。場合によっては、このようなノードのプロモーションを回避したい場合があります。これは、`check_timeline`パラメータを`true`に設定することにより実現できますデフォルトの動作は変更されません。
スーパーユーザーの資格情報の要件の緩和
Libpqでは、ユーザー名もパスワードも明示的に指定せずに接続を開くことができます。状況に応じて、pgpassファイルまたはpg_hba.confの信頼できる認証方法に依存します。 pg_rewindもlibpqを使用しているため、同じように動作します。
環境変数を介してConsul Serviceの登録とチェック間隔を構成する機能を実装しました Alexander Kukushkin
Consulでのサービスの登録は1.5.0で追加されましたが、これまではpatroni.yamlを介してのみ有効にすることができました。
Stability Improvements
カスタムブートストラップ中にarchive_modeをoffに設定します Alexander Kukushkin
クラスターが完全に機能するまで、walsと履歴ファイルのアーカイブは避けたいです。 カスタムブートストラップにpg_upgradeが関係する場合、これは非常に役立ちます。
起動時にグローバル構成をロードするときに5秒のバックオフを適用します Alexander Kukushkin
Patroniが起動したばかりのときにDCSのハンマリングを回避するのに役立ちます。
シャットダウン時に生成されるエラーメッセージの量を削減します。Alexander Kukushkin
それらは無害ですが、かなり迷惑で、時には怖かったです。
作成時にrecovery.confのrwパーマを明示的に保護します Lucas Capistrant
このファイルには、レプリケーションユーザーとパスワードが含まれているため、patroni/postgresユーザー以外の者にこのファイルを読んでほしくない。
HTTPServer例外をロガーにリダイレクトします。Julien Riou
デフォルトでは、このような例外は通常のログを台無しにして標準出力にログに記録されました。
Bug fixes
pg_ctlプロセスのstdoutへのstderrパイプを削除しました Cody Coons
メインPatroniプロセスからstderrを継承すると、すべてのPostgresログがすべてのpatroniログとともに表示されます。 PatroniおよびPostgresログは、標準のツールdockerログ、kubectlなどを使用して使用できるため、これはコンテナ環境で非常に役立ちます。それに加えて、この変更は、postgresがいくつかの警告をstderrに書き込むときに、Patroniがポストマスターpidをキャッチできないバグを修正します。
Consulサービスチェックの登録解除タイムアウトをGo時間形式で設定します Pavel Kirillov
明示的に記載されていない限り、タイムユニットの登録は失敗していました。
standby_clusterクラスター構成のチェックを緩和します。Dmitry Dolgov、Alexander Kukushkin
有効な値として文字列のみを受け入れていたため、ポートを整数として指定し、create_replica_methodsをリストとして指定することはできません。
バージョン1.5.3
2018-12-03リリース
互換性とバグ修正リリース。
動物園の飼育員に対してpython3で実行する際の安定性が向上しました。Alexander Kukushkin
`loop_wait`の変更により、パトローニは動物園の飼育員から切断され、再接続されませんでした。
postgres 9.3との壊れた互換性を修正しました。Alexander Kukushkin
9.3はreplication='database'を理解しないため、レプリケーション接続を開くときはreplication=1を指定する必要があります。
HAループごとに少なくとも1回はConsulセッションをリフレッシュし、Consulセッション例外の処理を改善するようにしました。 Alexander Kukushkin
ローカルコンスルエージェントを再起動すると、ノードに関連するすべてのセッションが無効になります。セッションリフレッシュを時間通りに呼び出さず、セッションエラーの適切な処理を実行しないことが、プライマリの降格を発生させていました。
バージョン1.5.2
2018-11-26リリース
互換性とバグ修正リリース。
kazoo-2.6.0との互換性 Alexander Kukushkin
要求が適切なタイムアウトで実行されることを確認するために、Patroniはpython-kazooモジュールからcreate_connectionメソッドを再定義します。 kazooの最後のリリースでは、create_connectionメソッドを呼び出す方法が少し変更されました。
Consulクラスターがリーダーを失ったときのPatroniクラッシュを修正しました。Alexander Kukushkin
クラッシュは、touch_memberメソッドの誤った実装が原因で発生していました。ブール値を返し、例外を発生させないはずです。
バージョン1.5.1
2018-11-01リリース
このバージョンは、永続的なレプリケーションスロットのサポートを実装し、pgBackRestのサポートを追加し、多くのバグを修正します。
New features
永久レプリケーションスロット Alexander Kukushkin
永続的なレプリケーションスロットは、フェールオーバー/スイッチオーバーで保持されます。つまり、新しいプライマリのPatroniは、プロモートの直後に構成済みのレプリケーションスロットを作成します。 patronictl edit-config`の助けを借りてスロットは設定できます。初期構成は :ref:`bootstrap.dcs <yaml_configuration> で行うこともできます。
pgbackrestのサポートを追加しました Yogesh Sharma
pgBackrestは、既存の$PGDATAフォルダーに復元できます。これにより、最後のバックアップから変更されていないファイルがスキップされるため、迅速な復元が可能になります。この機能をサポートするために、新しいパラメーター`keep_data`が導入されました。追加の例については、 replica creation method セクションを参照してください。
Bug fixes
/"スタンバイクラスター/"ワークフローのいくつかのバグ修正 Alexander Kukushkin
詳細については、https://github.com/patroni/patroni/pull/823を参照してください。
クラスター管理が一時停止され、DCSがアクセスできない場合のREST APIヘルスチェックを修正しました Alexander Kukushkin
回帰は以下で紹介されました https://github.com/patroni/patroni/commit/90cf930036a9d5249265af15d2b787ec7517cf57
バージョン1.5.0
2018-09-20リリース
このバージョンでは、Patroni HAクラスターがスタンバイモードで動作できるようにし、 Windowsでの実行の実験的なサポートを導入し、ConsulにPostgreSQLサービスを登録するための新しい構成パラメーターを提供します。
New features
スタンバイクラスターDmitry Dolgov
1つ以上のPatroniノードは、プライマリクラスタと並行してつまり別のデータセンターで実行され、プライマリクラスタのマスターから複製するスタンバイノードで構成されるスタンバイクラスターを形成できます。スタンバイクラスター内のすべてのPostgreSQLノードはレプリカです。これらのレプリカの1つはリモートマスターから直接複製するように自分自身を選択し、他のレプリカはカスケード方法でそこから複製します。この機能のより詳細な説明といくつかの構成例については、 here を参照してください。
領事館の登録サービス Pavel Kirillov、Alexander Kukushkin
consul configuration の`register_service`パラメータが有効になっている場合、ノードは名前`scope`とタグ`master`、`replica`または`standby-leader`でサービスを登録します。
実験的なWindowsサポートPavel Golub
今後、PatroniをWindowsで実行できるようになりますが、 Windowsのサポートは新しいもので、Linux対応するものほど多くの現実世界でのテストは受けていません。皆様のフィードバックをお待ちしております。
Improvements in patronictl
patronictl -k/--insecureフラグとrestapi証明書のサポートを追加しました。Wilfried Roset
以前は、REST APIが自己署名証明書で保護されていた場合、patronictl`はそれらの検証に失敗しました。その検証を無効にする方法はありませんでした。証明書検証を完全にスキップするように、または構成の :ref:`ctl: <patronictl_settings> セクションでCAおよびクライアント証明書を提供するように`patronictl`を構成できるようになりました。
patroniclスイッチオーバー/フェールオーバー出力からnofailoverタグを持つメンバーを除外する Alexander Anikin
以前は、patronictlを介して対話型スイッチオーバーまたはフェイルオーバーを実行するときに、これらのメンバーが候補として誤って提案されていました。
Stability improvements
pg_controldataの非キーと値の出力行の解析を回避する Alexander Anikin
特定の状況では、 pg_controldataはコロン文字のない行を出力します。これにより、pg_controldata出力を解析するPatroniコードのエラーがトリガーされ、実際の問題が隠蔽されます。多くの場合、このような行は、通常の出力前、つまりバイナリメジャーバージョンがPostgreSQLデータディレクトリのバージョンと一致しない場合、pg_controldataによって表示される警告で出力されます。
リーダー選挙中のエラーメッセージにメンバー名を追加します。Jan Mussler
リーダー選挙中に、パトローニはクラスターのすべての既知のメンバーに接続し、それらのステータスを要求します。このようなステータスはPatroniログに書き込まれ、メンバーの名前が含まれます。以前は、メンバーにアクセスできない場合、エラーメッセージにはその名前は示されず、URLのみが含まれていました。
レプリケーションスロットの作成時に、WALポジションをすぐに予約します。Alexander Kukushkin
9.6以降、`pg_create_physical_replication_slot`ファンクションは、追加のブールパラメータ`immediately_reserve`を提供します。 `false`に設定されている場合、デフォルトでもありますが、スロットは、最初のクライアント接続を受信するまでWALポジションを予約せず、スロットの作成と間の時間ウィンドウでクライアントが必要とする一部のセグメントを失う可能性があります。初期クライアント接続。
厳密な同期レプリケーションのバグを修正しました。Alexander Kukushkin
`synchronous_mode_strict: true`で実行している場合、場合によっては、Patroniは`*`を`synchronous_standby_names`に配置し、ほとんどのレプリケーション接続の同期状態を`potential`に変更します。以前、Patroniは、`async`状態を持つもののみを考慮するため、このような状況では同期候補を選択できませんでした。
バージョン1.4.6
リリース2018-08-14
Bug fixes and stability improvements
このリリースでは、非マスターノードの200を返すPatroni API /マスターエンドポイントに関する重大な問題を修正します。これは報告の問題であり、実際のスプリットブレインではありませんが、特定の状況では、クライアントが読み取り専用ノードにリダイレクトされる場合があります。
降格時にis_leaderステータスをリセット Alexander Kukushkin、Oleksii Kliukin
降格されたクラスターメンバーが/master API呼び出しでコード200で応答を停止することを確認します。
新しい/"cluster_unlocked/"フィールドをAPI出力に追加します Dmitry Dolgov
このフィールドは、クラスターでマスターが実行されているかどうかを示します。これは、レプリカの1つを除き、他のノードを照会できない場合に使用できます。
バージョン1.4.5
2018-08-03リリース
New features
新しいpostgres構成を適用する際のロギングを改善しました。Don Seiler
Patroniは、変更されたパラメーターの名前と値をログに記録します。
Python 3.7互換性Christoph Berg
asyncはpython3.7の予約キーワードです
メンバーがシャットダウンされたときにDCSで状態を/"stopped/"に設定します。Tony Sorrentino
これは、メンバーの状態を/"patronictl list/"コマンドの/"stopped/"として表示します。
古いpostmaster.pidが実行中のプロセスと一致する場合にログに記録されるメッセージを改善しますAnts Aasma
以前のものは混乱を超えていました。
patroniclリロード機能の実装Don Seiler
それまでは、REST APIを呼び出すか、パトロニプロセスにSIGHUP信号を送信することによってのみ構成をリロードすることができました。
レプリカとして起動するときに、制御データからいくつかのパラメーターを取得して適用します。Alexander Kukushkin
`max_connections`の値とグローバル構成で設定されるその他のパラメーターは、プライマリが実際に使用するものよりも低い場合があります。これが発生すると、レプリカは起動できないため、手動で修正する必要があります。 Patroniは、`pg_controldata`から値を読んで適用し、postgresを起動し、`pending_restart`フラグを設定することにより、それを処理します。
設定されている場合、postgresの起動時にLD_LIBRARY_PATHを使用します。 Chris Fraser
Postgresを起動すると、PatroniはPATH、LC_ALL、およびLANG環境変数が設定されている場合は、それらを渡していました。次に、 LD_LIBRARY_PATHで同じことを行っています。誰かがPostgreSQLを標準以外の場所にインストールすると役立つはずです。
create_replica_methodの名前をcreate_replica_methodsに変更しますDmitry Dolgov
それが実際に配列であることを明確にするため。古い名前は、下位互換性のために引き続きサポートされています。
Bug fixes and stability improvements
一時停止状態のpg_rewindによるレプリカ起動の条件を修正しました Oleksii Kliukin
以前にpg_rewindを既に実行したレプリカを起動しないようにします。
update_lockが成功した場合にのみマスターヘルスチェックに200応答する Alexander Kukushkin
DCSがパーティション化されている場合、Patroniが以前の降格マスターのマスターを報告しないようにします。
新しいコンスルモジュールとの互換性を修正しました。Alexander Kukushkin
v1.1.0からpython-consulは内部APIを変更し、`dict`の代わりに`list`を使用してクエリパラメーターを渡すようになりました。
シャットダウン中にPatroni REST APIスレッドから例外をキャッチする Alexander Kukushkin
これらのキャッチされない例外により、シャットダウン時にPostgreSQLが実行され続けました。
Postgresがマスターとして実行されている場合にのみクラッシュリカバリーを実行します。Alexander Kukushkin
`pg_controldata`が'in Production'または'shutting down'または'in crash recovery'をレポートする必要があります。その他のすべての場合、クラッシュリカバリーは必要ありません。
構成エラーの処理を向上させました。Henning Jacobs、Alexander Kukushkin
Patroni構成ファイルを更新し、SIGHUPをPatroniプロセスに送信することにより、ランタイム`restapi.listen`を含む多くのパラメーターを変更できます。この修正では、一部のパラメーターが無効な値を受け取ったときに、'restapi'スレッドからあいまいな例外を削除します。
バージョン1.4.4
2018-05-22リリース
Stability improvements
poll_failover_resultの競合状態を修正しました。Alexander Kukushkin
フェイルオーバーもスイッチオーバーにも直接影響しませんでしたが、まれに、元のリーダーがロックを解放したときに成功を報告するのが早すぎ、「Failedover to /」の代わりに「Failedover to /"None/"」が生成されました。 "desired-node/"'メッセージ。
Postgresパラメーター名を大文字と小文字を区別しないように扱う Alexander Kukushkin
Postgresパラメーターのほとんどはsnake_case名前を持っていますが、このルールには3つの例外がありますDateStyle、IntervalStyle、TimeZone。 Postgresは、別のケースたとえばtimezone = 'some/tzn'で書かれた場合、これらのパラメーターを受け入れます。ただし、Patroniはpg_settingsでこれらのパラメーター名の大文字と小文字を区別しない一致を見つけることができず、結果としてこのようなパラメーターを無視しました。
実行中のpostgresにアタッチし、クラスターが初期化されていない場合、スタートを中止します。Alexander Kukushkin
Patroniは、既に実行されているPostgresインスタンスに自分自身をアタッチできます。レプリカに到達する前に、マスターノードでPatroniの実行を開始することが不可欠です。
patronictl scaffoldの動作を修正しました Alexander Kukushkin
jsonエンコードされた文字列の代わりにdictオブジェクトをtouch_memberに渡すと、DCS実装がそれのエンコードを担当します。
一時停止中にリーダーキーの更新に失敗した場合、マスターを降格しないでください Alexander Kukushkin
メンテナンス中に、DCSは読み取り要求に応答し続けながら、書き込み要求の失敗を開始する場合があります。その場合、PatroniはDCSのリーダーロックの更新に失敗した後、Postgresマスターノードを読み取り専用モードにしていました。
Patroniが新しいポストマスタープロセスに気づいたときにレプリケーションスロットを同期します Alexander Kukushkin
Postgresが再起動された場合、Patroniはレプリケーションスロットのリストが予想と一致することを確認する必要があります。
一時停止から復帰した後のsysidと同期レプリケーションスロットを検証する Alexander Kukushkin
`maintenance`モード中に、データディレクトリが完全に書き換えられる場合があるため、`Database system identifier`がまだクラスターに属し、レプリケーションスロットがパトローニの期待と同期していることを確認する必要があります。
ポストマスターロックファイルが存在するデータディレクトリでPostgresを実行せずに開始すると失敗する可能性を修正しました。 Alexander Kukushkin
ポストマスターロックファイルからPIDの再利用を検出します。 DockerコンテナでPatroniとPostgresを実行している場合、このような問題が発生する可能性が高くなります。
誤ってワイプされたDCSの保護を向上させました Alexander Kukushkin
Patroniには、このような場合にフェイルオーバーを防ぐための多くのロジックが用意されています。すべてのキーを復元することもできます。ただし、この変更が発生するまでは、 /configキーを誤って削除すると、HAループの1サイクルの一時停止モードがオフになっていました。
無効なシステムIDが発生しても終了しないOleksii Kliukin
クラスターシステムIDが空の場合、または検証チェックに合格しない場合は終了しないでください。その場合、クラスターは再初期化が必要になる可能性が高くなります。結果メッセージにそれを記載します。そうしないと、再初期化が発生しないため、Patroniを終了しないでください。
Compatibility with Kubernetes 1.10+
空のサブセットのチェックを追加しました Cody Coons
Kubernetes 1.10.0+は、`[]`の代わりに`None`に設定された`Endpoints.subsets`を返し始めました。
Bootstrap improvements
recovery.confの削除をオプショナルにします。 Brad Nicholson
bootstrap.<custom_bootstrap_method_name>.keep_existing_recovery_conf`が定義され、 ``True` に設定されている場合、Patroniは既存の
recovery.confファイルを削除しません。これは、適切な`recovery.conf`を生成するpgBackRestのようなツールを使用してバックアップからブートストラップする場合に役立ちます。basebackupビルトインメソッドのオプションを許可します Oleksii Kliukin
カスタムレプリカ作成方法で定義される方法と同様に、構成で`basebackup`セクションを定義することにより、ビルトインbasebackupメソッドにオプションを提供できるようになりました。違いは、basebackup`セクションで受け入れられるフォーマットにあります。pg_basebackupは--key=value`と`--key`オプションの両方を受け入れるため、セクションのコンテンツはキーと値のペアの辞書、または1要素辞書またはキーのみのリスト値を受け入れないオプションの場合。追加の例については、 replica creation method セクションを参照してください。
バージョン1.4.3
2018-03-05リリース
Improvements in logging
環境変数からログレベルを設定できるようにします。Andy Newton、Keyvan Hedayati
PATRONI_LOGLEVEL-一般的なログレベルを設定します PATRONI_REQUESTS_LOGLEVEL-すべてのHTTP要求のログレベルを設定します。 Kubernetes API呼び出し 考えられるログレベルの名前を取得するには、`the docs for Pythonlogging <https://docs.python.org/3.6/library/logging.html#levels>`を参照してください。
Stability improvements and bug fixes
監視がタイムアウトしたときにetcdクラスタートポロジを再検出しないでください Alexander Kukushkin
etcd構成にホストが1つだけあり、正確にこのホストにアクセスできない場合、Patroniはクラスタートポロジの検出を開始していましたが、成功しませんでした。代わりに、次の利用可能なノードに切り替える必要があります。
カスタムブートストラップの後に、bootstrap.pg_hbaのコンテンツをpg_hba.confに書き込みます。 Alexander Kukushkin
`initdb`を使用した通常のブートストラップと同様に動作するようになりました
シングルユーザーモードはユーザー入力を待機していて、終了しませんでした。Alexander Kukushkin
回帰は以下で紹介されました https://github.com/patroni/patroni/pull/576
バージョン1.4.2
2018-01-30リリース
Improvements in patronictl
スケジュールされたフェイルオーバーの名前をスケジュールされたスイッチオーバーに変更します Alexander Kukushkin
フェールオーバーとスイッチオーバー機能はバージョン1.4で分離されましたが、`patronictl list`は引き続き`Scheduled switchover`の代わりに`Scheduledailover`を報告していました。
保留中の再起動に関する情報を表示する Alexander Kukushkin
一部の構成の変更を適用するには、postgresを再起動する必要がある場合があります。 Patroniは、REST APIで、およびノードのステータスをDCSに書き込むときに、既にそれに関するヒントを提供していましたが、それを表示する簡単な方法はありませんでした。
構成ファイルのcluster_nameを操作するようにshow-configを作成しました。 Alexander Kukushkin
`patronictl edit-config`と同様に動作します
Stability improvements
ブートストラップ中にpg_controldataの呼び出しを回避する Alexander Kukushkin
initdbまたはカスタムブートストラップ中に、pgdataは空ではないが、pg_controldataがまだ書き込まれていない時間枠があります。このような場合、 pg_controldata呼び出しはエラーメッセージで失敗していました。
psutilから発生した例外を処理します。Alexander Kukushkin
cmdlineは、`cmdline()`メソッドが呼び出されるたびに読み込まれ、解析されます。調べられるプロセスが既に消失している場合もあります。その場合、`NoSuchProcess`が発生します。
Kubernetes support improvements
k8s APIからのエラーを飲み込まないでください。Alexander Kukushkin
Kubernetes APIの呼び出しは、さまざまな理由で失敗する場合があります。場合によっては、このような呼び出しを再試行する必要があります、他の場合には、エラーメッセージと例外スタックトレースをログに記録する必要があります。ここでの変更は、Kubernetesの権限の問題をデバッグするのに役立ちます。
Kubernetesの例のDockerファイルを更新してマスターブランチからPatroniをインストールします Maciej Szulik
その前は`feature/k8s`を使用していましたが、時代遅れになりました。
k8sでパトロニを実行するための適切なRBACを追加します。Maciej Szulik
クラスターのポッドに割り当てられるサービスアカウント、必要な権限のみを保持するロール、サービスアカウントとロールを接続するロールバインディングを追加します。
バージョン1.4.1
2018-01-17リリース
Fixes in patronictl
フェイルオーバー先のメンバーの提案リストに現在のリーダーを表示しません。 (アレクサンダー・ククシュキン)
patronictlフェールオーバーは、クラスター内にリーダーが存在する場合でも機能する可能性があるため、フェールオーバーが可能なメンバーのリストから除外する必要があります。
patroniclスイッチオーバーを古いPatroni APIと互換性のあるものにしました Alexander Kukushkin
POST /switchover REST API呼び出しがステータスコード501で失敗した場合、再度実行されますが、/failoverエンドポイントに対して。
バージョン1.4
2018-01-10リリース
このバージョンでは、KubernetesをDCSとして使用するサポートを追加し、Etcd、Zookeeper、またはConsulを追加展開せずに、KubernetesでクラウドネイティブエージェントとしてPatroniを実行できます。
Upgrade notice
pipを介してPatroniをインストールすると、Etcd、Zookeper、Consul、またはKubernetesのライブラリ、またはAWSのサポートなどの依存関係は導入されません。それらを有効にするには、`pip install patroni[etcd,kubernetes]`などのpip installコマンドで明示的にリストする必要があります。
Kubernetes support
KubernetesベースのDCSを実装します。エンドポイントのメタデータは、構成とリーダーキーを保存するために使用されます。ポッド定義内のメタデータフィールドは、メンバー関連のデータを保存するために使用されます。エンドポイントの使用に加えて、PatroniはConfigMapsをサポートしています。この機能の詳細については、 Kubernetes chapter of the documentation をご覧ください。
Stability improvements
ポストマスタープロセスを別のオブジェクトに分解する Ants Aasma
このオブジェクトは、 pidと開始時刻を介して実行中のポストマスタープロセスを識別し、ポストマスターが背後で再起動されたとき、またはpostgresディレクトリがファイルシステムから消えたときの状況の検出および解決を簡素化します。
HAサイクルのすべてのループでPatroniによって発行されるSELECTの量を最小限に抑えます。Alexander Kukushkin
HAループの反復ごとに、パトローニは、リカバリステータスと絶対的なwal位置を知る必要があります。今後、Patroniは、レプリカで2つ、マスターで3つの代わりに、1つのSELECTのみを実行してこの情報を取得します。
ロックがある場合にのみシャットダウン時にリーダーキーを削除します。Ants Aasma
無条件削除は、不要で誤解を招く例外を生成していました。
Improvements in patronictl
versionコマンドをpatronictlに追加します。Ants Aasma
インストールされているPatroniのバージョンと実行中のPatroniインスタンスのバージョンクラスター名が指定されている場合が表示されます。
一部のpatronictlコマンドのcluster_name引数をオプショナルに指定するようにします。Alexander Kukushkin、Ants Aasma
patroniclが
scopeが定義された通常のPatroni構成ファイルを使用している場合に動作します。スケジュールされたスイッチオーバーとメンテナンスモードに関する情報を表示します Alexander Kukushkin
それまでは、PatroniログからまたはDCSから直接この情報を取得することができました。
patronictl reinitの改善 Alexander KukushkinPatroniが他のアクション、つまりpostgresを起動しようとしていたときに、
patronictl reinitが続行を拒否する場合がありました。 `patronictl`は、このような長時間実行アクションをキャンセルするコマンドを提供せず、唯一の危険な回避策はデータディレクトリを手動で削除することでした。 `reinit`の新しい実装は、reinitを続行する前に他の長時間実行アクションを強制的にキャンセルします。patronictl pauseおよびpatronictl resumeに--waitフラグを実装します。Alexander Kukushkin要求されたアクションがクラスター内のすべてのノードによって確認されるまで、
patronictlは待機します。このような動作は、DCSおよびREST APIを介してすべてのノードのpauseフラグを公開することにより実現されます。patronictl failoverの名前をpatronictl switchoverに変更します。Alexander Kukushkin以前の
failoverは、実際にはスイッチオーバーのみが可能でした。リーダーなしでクラスターで進むことを拒否しました。patronictl failoverの動作を変更します。Alexander Kukushkinリーダーがない場合でも機能しますが、その場合、新しいリーダーになるノードを明示的に指定する必要があります。
Expose information about timeline and history
DCSおよびAPI経由で現在のタイムラインを公開する Alexander Kukushkin
クラスターのメンバーごとに、現在のタイムラインに関する情報を保存します。この情報はAPIを介してアクセスでき、DCSに保存されます
DCSの/historyキーにプロモーション履歴を保存する Alexander Kukushkin
さらに、対応するプロモーションのタイムスタンプで強化されたタイムライン履歴をDCSの/historyキーに保存し、各プロモートで更新します。
Add endpoints for getting synchronous and asynchronous replicas
新しい/syncおよび/asyncエンドポイントを追加します Alexander Kukushkin、Oleksii Kliukin
これらのエンドポイント /synchronousおよび/asynchronousとしてもアクセスできますは、対応する同期および非同期レプリカ`noloadbalance`としてマークされたものを除く場合にのみ200を返します。
Allow multiple hosts for Etcd
新しい`hosts`パラメータをEtcd構成に追加します Alexander Kukushkin
このパラメーターには、実行中のetcdクラスターメンバーのリストを検出および設定するために使用されるホストの初期リストが含まれています。作業中に何らかの理由で、検出されたホストのこのリストが使い果たされると、そのリストに使用可能なホストがない場合、Patroniは`hosts`パラメータから初期リストに戻ります。
バージョン1.3.6
2017-11-10リリース
Stability improvements
postgresが実行されているかどうかを確認するときに、プロセスの開始時間を検証します。 (Ants Aasma)
postmaster.pidをクリーンアップしないクラッシュの後、同じpidを持つ新しいプロセスが存在する可能性があり、is_running()の誤検出が発生し、あらゆる種類の不正な動作につながります。
データディレクトリainlolcatを失ったときにブートストラップする前にpostgresqlをシャットダウンする
マスター上のデータディレクトリが強制的に削除されると、postgresプロセスはしばらく生きたままで、その元のマスターの代わりに作成されるレプリカの起動またはレプリケートを防ぐことができます。この修正により、Patroniはポストマスターpidとその開始時刻をキャッシュし、対応するデータディレクトリが削除された後も実行されている場合に古いポストマスターを終了させます。
postgresマスターが死亡した場合に、シングルユーザーモードでクラッシュリカバリーを実行します Alexander Kukushkin
スタンバイとしてすぐに起動するのは安全でなく、postgresが完全にシャットダウンしていない場合は
pg_rewindを実行できません。シングルユーザーのクラッシュリカバリーは、pg_rewindが有効になっている場合、または現在マスターが存在しない場合にのみキックインされます。
Consul improvements
Consulのデータセンター構成を提供できるようにしました Vilius Okockis、Alexander Kukushkin
その前に、Patroniは常にそれが実行されているホストのデータセンターと通信していました。
常にX-Consul-Token httpヘッダーでトークンを送信します Alexander Kukushkin
Patroni構成で
consul.tokenが定義されている場合、常に'X-Consul-Token' httpヘッダーで送信します。 python-consulモジュールは、consul.token_のクエリパラメータとしてトークンを受け入れないConsul REST APIと/"一貫性"を持とうとしますが、 'X-Consul-Token'ヘッダーで動作します。指定された値が可能な最小値より小さい場合、セッションTTLを調整します。 Stas Fomin、Alexander Kukushkin
Patroni構成で提供されるTTLがConsulでサポートされている最小TTLよりも小さい場合があります。その場合、Consulエージェントは新しいセッションの作成に失敗します。セッションがないと、PatroniはConsul KVストアにメンバーキーとリーダーキーを作成できません。その結果、異常なクラスターが発生します。
Other improvements
環境変数
PATRONI_LOGFORMATを介してカスタムログ形式を定義する スタスフォミンシステムロガーによって既に追加されている場合、Patroniログのタイムスタンプおよびその他の同様のフィールドを無効にすることを許可します通常はPatroniがサービスとして実行されている場合。
バージョン1.3.5
2017-10-12リリース
Bugfix
データディレクトリが削除された場合、ロールを'未初期化'に設定します Alexander Kukushkin
ノードがマスターとして実行されている場合、フェールオーバーを妨げていました。
Stability improvement
postgresを起動しようとして失敗した場合は、シングルユーザーモードでpostmasterを実行してみます。Alexander Kukushkin
通常、このような問題は、マスターとして実行されているノードが終了され、タイムラインが分岐されたときに発生します。
recovery.confにrestore_commandが定義されている場合、postgresが起動を中止し、制御データを変更しないままにする可能性が非常に高いです。クリーンなシャットダウンが必要なpg_rewindを使用できなくなります。
Consul improvements
セッションを作成するときにヘルスチェックを指定できるようにしました Alexander Kukushkin
指定しない場合、Consulは/"serfHealth/"を使用します。一方では、分離されたマスターの迅速な検出が可能になりますが、別の側面では、パトローニが短いネットワーク遅延を許容することが不可能になります。
Bugfix
Python 3のウォッチドッグを修正する Ants Aasma
ioctl()呼び出しインタフェースの誤解。 mutable=Falseの場合、 fcntl.ioctl()は実際にargバッファを返します。 intとstrの比較がエラーを返さなかったため、これは誤ってPython2で動作しました。エラー報告は、実際には、Python2でIOErrorを発生させ、Python3でOSErrorを発生させることにより実行されます。
バージョン1.3.4
2017-09-08リリース
Different Consul improvements
領事トークンをヘッダーとして渡します。Andrew Colin Kissa
ヘッダーは、トークンを領事館 API _に渡すための優先的な方法になりました。
Consulの詳細な構成 Alexander Kukushkin
scheme、token、クライアントおよびca証明書schemeを指定する可能性。python-consul-0.7.1以降との互換性Alexander Kukushkin
新しいpython-consulモジュールは、一部のメソッドのシグネチャを変更しました
/"TTLロックを取り出すことができませんでした"メッセージはログに記録されませんでした。 Alexander Kukushkin
重大なバグではありませんが、適切なログの欠如により、問題が発生した場合の調査が複雑になります。
Quote synchronous_standby_names using quote_ident
synchronous_standby_namesをpostgresql.confに書き込む場合、その値は引用符で囲む必要があります。Alexander Kukushkin適切に引用されていない場合、PostgreSQLは同期レプリケーションを効果的に無効にして、動作を継続します。
Different bugfixes around pause state, mostly related to watchdog アレクサンダー・ククシュキン
ウォッチドッグがアクティブでない場合はキープアライブを送信しない
一時停止モードでウォッチドッグをアクティブにしない
一時停止モードで正しいpostgres状態を設定する
postgresが停止している場合は、APIからクエリを実行しないでください
バージョン1.3.3
2017-08-04リリース
Bugfixes
synchronous_mode_strictがオンになっている場合でも、昇格の直後に同期レプリケーションが無効になっていました。 Alexander Kukushkin
バックアップから復元した後に空の
pg_ident.confファイルが見つからない場合は、作成します Alexander Kukushkinpostgresだけでなくすべてのデータベースへの
pg_hba.confのオープンアクセス Franco Bellagamba
バージョン1.3.2
2017-07-31リリース
Bugfix
patronictl edit-configはZooKeeperで動作しませんでした。Alexander Kukushkin
バージョン1.3.1
2017-07-28リリース
Bugfix
_MemberStatusの変更により、APIを介したフェイルオーバーが中断されました。 Alexander Kukushkin
バージョン1.3
2017-07-27リリース
バージョン1.3は、カスタムブートストラップの可能性を追加し、pg_rewindのサポートを大幅に向上させ、同期モードのサポートを強化し、patronictlに構成編集を追加し、Linuxでウォッチドッグサポートを実装します。さらに、これはPostgreSQL 10で正常に動作する最初のバージョンです。
Upgrade notice
Patroniの新しいバージョンと既知の互換性問題はありません。バージョン1.2からの構成は変更せずに動作するはずです。新しいパッケージをインストールし、Patroniを再起動するPostgreSQLの再起動が発生するか、最初にPatroniを pause mode に入れて、クラスター内のすべてのノードでPatroniを再起動することにより、アップグレードが可能です。一時停止モードのPatroniはstop/ start PostgreSQL)、最後に一時停止モードから再開します。
Custom bootstrap
クラスターのブートストラップのプロセスを構成可能にする Alexander Kukushkin
クラスター内の最初のノードを初期化するときに、
initdbの代わりにカスタムブートストラップスクリプトを許可します。 bootstrapコマンドは、クラスターの名前とデータディレクトリへのパスを受け取ります。生成されるクラスターは、リカバリを実行するように構成できるため、バックアップからブートストラップし、ポイントインタイムリカバリーを可能にします。この機能の詳細な説明については、initdbを参照してください。
Smarter pg_rewind support
現在のマスターとのタイムラインの違いを見て、pg_rewindを実行するかどうかを決定します。Alexander Kukushkin
以前のPatroniには、pg_rewindをトリガーするための固定条件セット、つまり元のマスターを起動したとき、クラスター内の他のすべてのノードで指定されたノードへのスイッチオーバーを行ったとき、またはnofailoverタグを持つレプリカが存在する場合がありました。これらすべての場合に共通して、一部のレプリカが新しいマスターよりも先を行く可能性があります。場合によっては、 pg_rewindは何もしませんでした、他のいくつかの場合、必要に応じて実行されませんでした。この限定されたルールのリストに依存するのではなく、PatroniはマスターとレプリカのWAL位置を比較するストリーミングレプリケーションプロトコルを使用して、レプリカに巻き戻しが必要かどうかを確実に決定します。
Synchronous replication mode strict
strictモードを追加することにより、同期レプリケーションのサポートを強化します。James Sewell、Alexander Kukushkin
通常、
synchronous_modeが有効で、マスターに接続されているレプリカがない場合、Patroniはマスターを書き込みに利用できるようにするために同期レプリケーションを無効にします。synchronous_mode_strictオプションは、設定されている場合、Patroniはレプリカが不足している場合に同期レプリケーションを無効にせず、マスターにデータを書き込むすべてのクライアントを効果的にブロックします。自動フェイルオーバーによるデータ損失を防ぐ同期モードの保証に加えて、strictモードでは、各書き込みが2つのノードに永続的に保存されるか、クラスター内にノードが1つだけの場合は完全に発生しないことが保証されます。
Configuration editing with patronictl
patroniclに構成編集を追加しました。Ants Aasma、Alexander Kukushkin
DCSに保存されている動的クラスター構成の編集を保護する機能を追加します。コマンドラインからのパラメーター/値の指定、$EDITORの呼び出し、またはyamlファイルからの構成の適用のいずれかをサポートします。
Linux watchdog support
Linuxのウォッチドッグサポートを実装する Ants Aasma
パトローニが実行されていないノード、または応答していないノードをリブートするためにLinuxソフトウェアウォッチドッグをサポートたとえば、高負荷のため Linuxソフトウェアウォッチドッグは、非応答ノードを再起動します。 Patroni構成のwatchdogセクションからデフォルトで`/dev/watchdog`とモードon、automatic、offを使用するようにウォッチドッグデバイスを構成することが可能です。 watchdog documentation から詳細情報を取得できます。
Add support for PostgreSQL 10
Patroniは、これまでにリリースされたPostgreSQL 10のすべてのベータバージョンと互換性があり、リリースされるPostgreSQL 10と互換性がある予定です。
PostgreSQL-related minor improvements
Patroni構成ファイルまたはDCSの動的構成を介してpg_hba.confを定義します Alexander Kukushkin
構成の
postgresqlセクションのpg_hbaサブセクションでpg_hba.confの内容を定義できます。これにより、すべてのノードにロギングし、手動で変更して、構成をリロードするのではなく、DCSでのみ定義する必要があるため、マルチプルのノードでのpg_hba.confの管理が簡素化されます。定義されると、このセクションの内容は、現在の
pg_hba.confを完全に置き換えます。hba_filePostgreSQLパラメーターが設定されている場合、Patroniはそれを無視します。UNIXソケットを介したローカルPostgreSQLクラスターへの接続のサポート Alexander Kukushkin
use_unix_socketオプションをPatroni構成のpostgresqlセクションに追加します。 trueに設定され、PostgreSQLunix_socket_directoriesオプションが空でない場合、Patroniはその最初の値を使用してローカルのPostgreSQLクラスターに接続できます。unix_socket_directoriesが定義されていない場合、Patroniはデフォルト値を想定し、PostgreSQL接続文字列のhostパラメーターを完全に省略します。リロード時のスーパーユーザーとレプリケーション資格情報の変更のサポート Alexander Kukushkin
PostgreSQLデータディレクトリの外部への構成ファイルの保存のサポート @jouir
新しい構成
postgresql構成指示子config_dirを追加します。これはデフォルトでデータディレクトリにあり、Patroniによって書き込み可能である必要があります。
Bug fixes and stability improvements
Handle EtcdEventIndexClearedおよびEtcdWatcherCleared例外 Alexander Kukushkin
無駄な再試行を回避することにより、Etcdによって監視オペレーションが終了されたときのリカバリーが速くなります。
Etcd障害時にスピンするエラーを削除し、ログスパムを削減します。Ants Aasma
2回目以降のEtcd接続失敗時の即時再試行とログへのスタックトレースの発行は避けてください。
PostgreSQLプロセスをフォークするときにロケール変数をエクスポートする Oleksii Kliukin
NLSでビルドされたPostgreSQLの英語以外のロケールでの`postmaster become multithreaded whilestartup`の致命的なエラーを回避します。
レプリケーションスロットをドロップする際の追加チェック Alexander Kukushkin
場合によっては、PatroniはWAL送信者によってレプリケーションスロットをドロップできない場合があります。
PostgreSQLの命名ルールに従うように、レプリケーションスロット名を63 (NAMEDATALEN - 1)文字に切り詰めます。Nick Scott
PatroniからPostgreSQLクラスターへの追加の接続が開かれる競合状態を修正しました。Alexander Kukushkin
ノードが空のデータディレクトリで再起動したときにリーダーキーを解放します。Alex Kerney
リーダーなしでブートストラップを実行するときに非同期エグゼキューターをビジーに設定します。Alexander Kukushkin
これを行わないと、パトロニは、クラスターにリーダーが存在することを必要としないブートストラップ方法でブートストラップされている間、通常のビジネスを続行したため、ノードが別のクラスターに属していることを示すエラーが発生する可能性があります。
WAL-Eレプリカ作成方法の改善 Joar Wandborg、Alexander Kukushkin 。
WAL-Eベースバックアップを解析するときにcsv.DictReaderを使用し、スペース区切りの日付と時刻でISO日付を受け入れます。
レプリカから現在のWAL位置を取得して、復元するWALの量を推定することをサポートします。以前は、コードは、マスターノードでのみ使用可能なシステム情報機能を呼び出すために使用されていました。
バージョン1.2
2016-12-13リリース
このバージョンでは、同期レプリケーションの処理を大幅に改善し、起動プロセスとフェールオーバーの信頼性を高め、PostgreSQL 9.6サポートを追加し、多くのバグを修正します。さらに、これらのリリースノートを含むドキュメントは、https://patroni.readthedocs.ioに移動されました。
Synchronous replication
同期レプリケーションのサポートを追加します。 (Ants Aasma)
新しい構成変数
synchronous_modeを追加します。有効にすると、Patroniはsynchronous_standby_namesを管理して、利用可能な正常なスタンバイがあるときは常に同期レプリケーションを有効にします。同期モードが有効になっている場合、Patroniは、マスター障害が発生したときに同期複製していたスタンバイにのみ自動的にフェールオーバーします。これは、このような場合にユーザーに表示されるトランザクションが失われないことを効果的に意味します。詳細な説明と実装の詳細については、synchronous_modeを参照してください。
Reliability improvements
PostgreSQLが100%正常でない場合は、
leader optimeキーに保存されているリーダー位置を更新しないでください。リーダーキーの更新に失敗した場合、すぐに降格します。 (アレクサンダー・ククシュキン)新しいレプリカのクローンを作成するターゲットのリストから異常なノードを除外します。 (アレクサンダー・ククシュキン)
Etcdで行う方法と同様に、Consulの再試行とタイムアウト戦略を実装します。 (アレクサンダー・ククシュキン)
--dcsおよび--config-fileをpatronictlのすべてのオプションに適用します。 (アレクサンダー・ククシュキン)すべてのpostgresパラメーターをpostgresql.confに書き込みます。 (アレクサンダー・ククシュキン)
これにより、パトロニによって構成されたPostgreSQLを
pg_ctlのみで起動できます。構成内にユーザーが存在しない場合、例外を回避します。 (キリル・プーシキン)
異常なクラスターの一時停止を許可します。この修正が行われる前は、
patronictlは、一時停止を実行しようとしたノードに異常がある場合にベイルアウトしていました。 (アレクサンダー・ククシュキン)リーダーウォッチ機能を改善します。 (アレクサンダー・ククシュキン)
以前は、レプリカは常にリーダーキーを監視していましたタイムアウトまたはリーダーキーが変更されるまでスリープしていました。この変更では、レプリカのPostgreSQLが
running状態にある場合のみを監視し、PostgreSQLが停止/開始、または再起動しているときは監視しません。SIGCHILDをPID 1として処理するときに、競合状態に陥ることを回避します。 Alexander Kukushkin
以前は、Patroni内の同じプロセスが新しいプロセスを生成し、それらからSIGCHILDを処理したため、Dockerコンテナ内で実行されているときに競合状態が発生する可能性がありました。この変更では、Patroniのfork/execを使用し、元のPID 1プロセスに子からの信号を処理させます。
WAL-Eの復元を修正します。 (オレクシー・クリウキン)
以前は、WAL-E復元は
no_masterフラグを使用して、マスターとのコンサルテーションを完全に回避し、Patroniは常にpg_basebackupではなくWALからの復元を選択します。この変更は、no_masterの元の意味に戻します。つまり、マスターが実行されていない場合、Patroni WAL-Eリストアはレプリケーション方法として選択できます。後者は、メソッドに渡された接続文字列を調べることにより確認されます。さらに、再試行メカニズムをより堅牢にし、他の細部を処理します。非同期DNSリゾルバーキャッシュを実装します。 (アレクサンダー・ククシュキン)
DNSが一時的に使用できない場合の失敗を回避しますたとえば、ノードが受信した過剰なトラフィックのため。
開始状態とマスター開始タイムアウトを実装します。 (Ants Aasma、Alexander Kukushkin)
以前は
pg_ctlはタイムアウトを待って、PostgreSQLが実行されていると考えて喜んで踏み続けました。これにより、PostgreSQLは実際には実行されていないときに実行されているとしてリストに表示され、フェールオーバー、クラッシュリカバリー、またはフェールオーバーとリワインドの欠落によって中断されたクラッシュリカバリーが発生する競合状態が発生しました。この変更では、master_start_timeoutパラメーターを追加し、メインHAループstartingの新しい状態を導入します。master_start_timeoutが0の場合、マスターがクラッシュしたときに、フェイルオーバー候補が存在するとすぐにフェイルオーバーします。それ以外の場合、PatroniはマスターでPostgreSQLを起動しようとした後、タイムアウトの間待機します。有効期限が切れると、可能であればフェイルオーバーします。手動フェイルオーバー要求は、マスターのクラッシュ中にタイムアウトの有効期限が発生する前でも受け入れられます。timeoutパラメーターをrestartAPIエンドポイントとpatronictlに導入します。設定され、再起動がタイムアウトより長くかかる場合、PostgreSQLは異常であると考えられ、他のノードがリーダーロックを取得できるようになります。一時停止モードでの
pg_rewindの動作を修正しました。 (Ants Aasma)Patroniが巻き戻す必要があると考えているが、巻き戻しが不可能な場合、つまり
pg_rewindが存在しない場合、一時停止モードでの不必要な再起動を避けます。superuser認証がpg_rewind関連のPatroni構成セクションにない場合、superuserデフォルトのOSユーザーのデフォルトのlibpq値にフォールバックします。コールバックの実行をシリアル化します。新しいコールバックが実行されようとしているときに、同じタイプの以前のコールバックを強制終了します。コールバックの実行時にゾンビプロセスが生成される問題を修正します。 (アレクサンダー・ククシュキン)
リーダーキーがDCSで設定されているが、このリーダーキーの更新が失敗する場合、以前のマスターの昇格を避けてください。 (アレクサンダー・ククシュキン)
これにより、現在のマスターが「一貫性のない読み取り」を許可するEtcdおよびその他のDCSの少数のノードとともにパーティション化されている場合、ロールを維持し続けてしまう問題を回避します。
Miscellaneous
ブートストラップに
post_init構成オプションを追加します。 (アレハンドロ・マルティネス)Patroniは、
initdbを実行し、新しいクラスターに対してPostgreSQLを起動した直後に、このオプションのスクリプト引数を呼び出します。スクリプトは、superuserで接続URLを受け取り、パスワードを含む.pgpassファイルをポイントするようにPGPASSFILEを設定します。スクリプトが失敗すると、Patroniの初期化も失敗します。これは、新しいユーザーを追加したり、新しいクラスターに拡張機能を作成したりする場合に役立ちます。PostgreSQL 9.6サポートを実装します。 (アレクサンダー・ククシュキン)
wal_level = replicaをhot_standbyの同義語として使用し、あるものから別のものに変更されるときのpending_restartフラグを回避します。 (アレクサンダー・ククシュキン)
Documentation improvements
Patroni main loop workflow diagram _を追加します。 (アレハンドロ・マルティネス、アレクサンダー・ククシュキン)
READMEを改善し、Helmチャートとリリースノートへのリンクを追加します。 (ラウリ・アップル)
Patroniドキュメントを
Read the Docsに移動します。最新のドキュメントは、https://patroni.readthedocs.ioで入手できます。 (オレクシー・クリウキン)ドキュメントをさまざまなデバイススマートフォンを含むから簡単に表示し、検索可能にします。
パッケージをセマンティックバージョニングに移動します。 (オレクシー・クリウキン)
Patroniは、major.minor.patchバージョンスキーマに従い、小さいが重要なバグ修正で新しいマイナーバージョンのリリースを回避します。すべてのパッチを含むマイナーバージョンのリリースノートのみを公開します。
バージョン1.1
2016-09-07リリース
このリリースでは、一時停止モードを導入することによりPatroniクラスターの管理を向上させ、スケジュールされたおよび条件付き再起動によるメンテナンスを向上させ、EtcdまたはZookeeperとのPatroniの相互作用をより弾力的にし、patroniclを大幅に強化します。
Upgrade notice
1.0より前のリリースからアップグレードする場合、 1.0リリースノートで資格情報と構成フォーマットの変更についてお読みください。
Pause mode
一時停止モードを導入して、PostgreSQLインスタンスの管理からPatroniを一時的に切断しますMurat Kabilov、Alexander Kukushkin、Oleksii Kliukin。
以前は、PostgreSQLを終了せずにPatroniにSIGKILLシグナルを送信して停止する必要がありました。新しい一時停止モードは、Patroniを終了せずに、クラスター全体でPostgreSQLからPatroniを切断します。これは、Pacemakerのメンテナンスモードに似ています。 Patroniは引き続きDCSのメンバーとリーダーキーを更新しますが、プロセス中にPostgreSQLサーバーを起動、停止、または再起動しません。いくつかの例外があります。たとえば、手動フェイルオーバー、再初期化、および再起動は引き続き許可されます。 a detailed description of this feature を読み取ることができます。
さらに、patronictlは、一時停止モードを切り替えるための新しい pause および resume コマンドをサポートしています。
Scheduled and conditional restarts
restart APIコマンドに条件を追加します Oleksii Kliukin
この変更は、再起動を行うために検証できるいくつかの条件を追加することにより、Patroniの再起動を強化します。条件の中には、PostgreSQLロールがマスターまたはレプリカの場合の再起動、PostgreSQLバージョン番号の確認、または構成変更を適用するために再起動が必要な場合にのみ再起動が含まれます。
スケジュールされた再起動を追加します。Oleksii Kliukin
将来の再起動をスケジュールできるようになりました。ノードごとに1つのスケジュールされた再起動のみがサポートされています。スケジュールされた再起動が必要でない場合は、クリアすることが可能です。スケジュールされた再起動と条件付き再起動の組み合わせがサポートされており、たとえば、夜間にマイナーPostgreSQLのアップグレードをスケジュールし、管理スクリプトにpostgres固有のロジックを追加せずに、古いマイナーバージョンを実行しているインスタンスのみを再起動できます。
条件付きおよびスケジュールされたリスタートのサポートをpatronictlに追加します。Murat Kabilov。
patronictl restartは、いくつかの新しいオプションをサポートしています。スケジュールされたアクションをクリーンアップするpatronictllushコマンドもあります。
Robust DCS interaction
LOOP_waitに応じてKazooタイムアウトを設定します Alexander Kukushkin
もともと、 ping_timeoutおよびconnect_timeout値は、ネゴシエートされたセッションタイムアウトから計算されました。 Patroni stop_waitは考慮されませんでした。その結果、1回の再試行でセッションタイムアウトよりも時間がかかる可能性があり、パトローニはロックを解放して降格することを余儀なくされました。
この変更では、 pingと接続タイムアウトをloop_waitの値の半分に設定し、接続問題の検出を高速化し、ロックを失う前に接続試行を再試行するための十分な時間を残します。
元の要求が成功した場合にのみetcdトポロジを更新します Alexander Kukushkin
元の要求の後まで、クライアントに知られているEtcdトポロジの更新を延期します。クラスタートポロジを取得するときは、Etcdクラスター内のノードの既知の数に応じて、再試行タイムアウトを実装します。これにより、クライアントはノードの最新のリストよりも要求の結果を取得することを優先します。
どちらの変更も、ネットワークに問題が発生した場合にDCSへのPatroni接続をより堅牢にします。
Patronictl, monitoring and configuration
APIを介してストリーミングレプリカに関する情報を返しますFeike Steenbergen
以前は、接続の問題などにより、変更のストリーミングに失敗したPostgreSQLインスタンスについてPatroniを照会する信頼できる方法がありませんでした。この変更により、 /patroniエンドポイントを介してpg_stat_replicationの内容が公開されます。
patronictl scaffoldコマンドを追加 Oleksii Kliukin
Etcdでクラスター構造を作成するコマンドを追加します。クラスターはユーザー指定のsysidとリーダーで作成され、リーダーキーとメンバーキーの両方が永続化されます。このコマンドは、レプリカのみで構成されるPatroniクラスターがPatroniを認識しない外部マスターノードからレプリケートする、いわゆるマスターレス構成を作成するのに役立ちます。次に、リーダーキーを削除し、Patroniノードの1つを昇格させ、元のマスターをPatroniベースのHAクラスターに置き換えることができます。
PostgreSQLバイナリを見つけるための構成オプション
bin_dirを追加しますAnts Aasma複数のPostgreSQLバージョンのインストールを同時にサポートするLinuxディストリビューションを使用する場合、PostgreSQLバイナリの場所を明示的に指定できると便利です。
Alejandro Martínezの
custom_confを使用して構成ファイルパスをオーバーライドできるようにしましたカスタム構成ファイルパスを許可します。これは、Patroni details によって管理対象外になります。
Bug fixes and code improvements
PatroniをPostgreSQL 10以降の新しいバージョンスキーマと互換性のあるものにします。Feike Steenbergen
PostgreSQLバージョンに基づいて条件付きリスタートを実行するときは、Patroniが2桁のバージョン番号を理解することを確認します。
pkgutilを使用してDCSモジュールを見つけます。 Alexander Kukushkin
DCSモジュールを見つけるためには、ディレクトリを手動で走査する代わりに、専用のPythonモジュールを使用します。
Patroniを起動するときに常にon_startコールバックを呼び出します。Alexander Kukushkin
以前は、Patroniは、正しいロールで既に実行されているノードに接続する場合、コールバックを呼び出しませんでした。コールバックはクライアントをルーティングするために使用されることが多いため、接続ルーティングスキームで実行中のノードの登録に失敗する可能性があります。この修正により、Patroniは、既に実行中のノードに接続している場合でも、on_startコールバックを呼び出します。
アクティブなレプリケーションスロットをドロップしないでください Murat Kabilov、Oleksii Kliukin
マスターでアクティブな物理レプリケーションスロットをドロップしないようにします。いずれにせよ、PostgreSQLはそのようなスロットをドロップできません。この変更により、マスターで非Patroni管理のレプリカ/コンシューマを実行できるようになります。
PostgreSQLインスタンスの起動中にPatroni接続を閉じます Alexander Kukushkin
PostgreSQLノードが起動されたときに、Patroniに以前のすべての接続を強制的に閉じます。 postmasterがSIGKILLで強制終了された場合、以前の接続を再利用するトラップを回避します。
メンバー名からスロット名を構成するときに無効な文字を置き換えます Ants Aasma
スロット命名ルールに準拠していないスタンバイ名がスロットの作成とスタンバイの起動に失敗しないことを確認します。スロット名のダッシュをアンダースコアに置き換え、スロット名で使用できないその他のすべての文字をUnicodeコードポイントに置き換えます。
バージョン1.0
2016-07-05リリース
このリリースでは、 HAクラスター全体のPostgreSQLおよびPatroni構成パラメーターを動的に変更できるグローバル動的構成を導入します。また、多数のバグ修正も提供します。
Upgrade notice
v0.90以前からアップグレードする場合、マスターの前に常にすべてのレプリカをアップグレードします。 DCSにレプリケーション資格情報を保存しないため、古いレプリカは新しいマスターに接続できません。
Dynamic Configuration
動的グローバル構成の実装 Alexander Kukushkin
新しいREST APIエンドポイント/configを導入して、HAクラスター全体マスターおよびすべてのレプリカに対してグローバルに設定する必要があるPostgreSQLおよびPatroni構成パラメーターを提供します。これらのパラメーターはDCSで設定され、多くの場合、PostgreSQLまたはPatroniを中断せずに適用できます。 Patroniは、一部の値でPostgreSQLの再起動が必要な場合、APIを介して表示される/"pending restart/"と呼ばれる特別なフラグを設定します。その場合、APIを介して再起動を手動で発行する必要があります。
Patroni SIGHUPまたは/reloadへのPOSTにより、構成ファイルが再読み取りされます。
変更できるパラメーターと差分構成ソースの処理順序の詳細については、 Patroni configuration を参照してください。
構成ファイルの形式はv0.90から 変更されました 。 Patroniはまだ古い構成ファイルとの互換性がありますが、ブートストラップパラメーターを利用するには、変更する必要があります。ユーザーは、 dynamic configuration documentation page を参照してそれらを更新することをお勧めします。
More flexible configuration *
postgresql構成とデータベース名を作成するPatroniは構成可能に接続します Misja Hoebe
`database`および`config_base_name`構成パラメーターを導入します。とりわけ、PipelineDBおよびその他のPostgreSQLフォークでPatroniを実行できるようになります。
環境を介して一部のPatroni構成パラメーターを構成する機能を実装します。Alexander Kukushkin
これらには、スコープ、ノード名、名前空間、およびシークレットが含まれ、動的環境、つまりKubernetesでのパトロニの実行が簡単になります。詳細については、 supported environment variables を参照してください。
ビルトインのPatroni Dockerコンテナを更新して、環境ベースの構成Feike Steenbergen を利用します。
Patroni DockerイメージにZookeeperサポートを追加しました Alexander Kukushkin
Zookeeperと Exhibitionr構成オプションの分割 Alexander Kukushkin
PatroniclがPatroniから構成を読み取るためにコードを再利用できるようにしました。Alexander Kukushkin
これにより、patroniclは環境ベースの構成を利用できます。
primary_conninfoでアプリケーション名をノード名に設定します。Alexander Kukushkin
これにより、特定のノードの同期レプリケーションの識別と構成が簡素化されます。
Stability, security and usability improvements
sysidをリセットし、バックアップのリストアが進行中のときにpg_controldataを呼び出さないようにしました Alexander Kukushkin
この変更により、バックアップからこのノードの時間のかかる初期化中にPatroni APIヘルスチェックによって生成されるノイズの量が削減されます。
多数のpg_rewindコーナーケースを修正しました。Alexander Kukushkin
ソースクラスタがマスターでない場合、pg_rewindの実行を避けてください。
さらに、新しいパラメーター remove_data_directory_on_rewind_failure がtrueに設定されていない限り、リワインドが失敗したときにデータディレクトリを削除しないでください。デフォルトではfalseです。
DCSのレプリケーション接続文字列からパスワードを削除します Alexander Kukushkin
以前は、Patroniは常にDCSのPostgres URLからのレプリケーション資格情報を使用していました。これは、パトロニ構成から資格情報を取得するように変更されました。シークレットレプリケーションのユーザー名とパスワードは、DCSで公開されなくなりました。
デモートコール周りの非同期機構を修正しました。Alexander Kukushkin
Demoteは、DCS相互作用をブロックすることなく完全に非同期で実行されるようになりました。
patronictlが設定されている場合、承認ヘッダーを常に送信するようにしました Alexander Kukushkin
これにより、Patroniがこれらに承認を必要とするように構成されている場合、patroniclは/"protected/"要求を発行することができます。つまり、再起動または再初期化。
SystemExit例外を正しく処理します Alexander Kukushkin
SIGTERMを受信したときにPatroniが適切に停止しない問題を回避します
confdのサンプルhaproxyテンプレート Alexander Kukushkin
confideを使用してDCSのパトロニ状態からhaプロキシ構成を生成および動的に変更します
ドキュメントを改善および再構成して、新しいユーザーにとってより親しみやすいものにします。 Lauri Apple
APIはpg_ctl停止中にrole=masterを報告する必要があります Alexander Kukushkin
特にクラスター停止の場合、コールバック呼び出しの信頼性を高めます。さらに、`pg_ctl_timeout`オプションを導入して、`pg_ctl`を介してスタート、停止、およびリスタート呼び出しのタイムアウトを設定します。
etcdの再試行ロジックを修正しました。Alexander Kukushkin
再試行をより予測可能かつ堅牢にします。
Zookeeperコードの短いネットワークの中断に対する回復力を高めます Alexander Kukushkin
接続タイムアウトを減らして、Zookeeperの接続試行の頻度を増やします。
バージョン0.90
2016-04-27リリース
このリリースでは、Consulのサポートを追加し、新しい noloadbalance タグを含み、 clonefrom タグの動作を変更し、 pg_rewind 処理を改善し、 patronictl 制御プログラムを改善します。
Consul support
Consulサポートの実装 Alexander Kukushkin
Patroniは、EtcdとZookeeperに加えて、Consulに対して実行されます。接続パラメーターはYAMLファイルで構成できます。
New and improved tags
noloadbalance タグを実装します。Alexander Kukushkin
このタグにより、Patroniは常にレプリカがロードバランサーで利用できないことを返すようになります。
clonefrom タグの実装を変更します。Alexander Kukushkin
以前は、ノード名を clonefrom に提供する必要があり、タグ付けされたレプリカは特定のノードからクローンを作成する必要がありました。新しい実装では、 clonefrom がブールタグになります。これがtrueに設定されている場合、レプリカは他のレプリカからクローンを作成する候補になります。複数の候補が存在する場合、レプリカはランダムに1つを選択します。
Stability and security improvements
多数の信頼性の向上Alexander Kukushkin
いくつかの偽のエラーメッセージを削除し、フェールオーバーの安定性を向上させ、DCSからのデータの読み取り、元のリーダーのシャットダウン、降格、および再接続に関するいくつかのコーナーケースに対処します。
停止中にパトローニの子供を殺さないようにシステムスクリプトを改善しました。Jan Keirse、Alexander Kukushkin
以前は、Patroniを停止すると、 systemd もPostgreSQLにシグナルを送信していました。 PatroniもPostgreSQLを自分自身で停止しようとしたため、さまざまなシャットダウン要求スマートシャットダウン、それに続く高速シャットダウンに送信されます。その結果、レプリカの切断が早すぎ、元のマスターは降格後に再参加できなくなりました。 Alexanderによる事前調査を使用してJanによって修正されました。
元のマスターがレプリカとして再参加する前にpg_rewindを呼び出すことができなかった一部のケースを排除します。Oleksii Kliukin
以前は、元のマスターがクラッシュした場合にのみ pg_rewind を呼び出していました。システムにpg_rewindが存在する限り、以前のマスターに対して常にpg_rewindを実行するようにこれを変更します。これにより、レプリカが最新の変更を取得する前に、つまり/"スマート/"のシャットダウン中にマスターがシャットダウンされた場合が修正されます。
特に、単体テストおよび受け入れテストの多数の改善により、ZookeeperとConsul Alexander Kukushkinのサポートが有効になりました。
Travis CIを高速化し、ZookeeperエキシビターとConsul Alexander Kukushkinに対する実行テストのサポートを実装します
単体テストと受け入れテストは両方とも、各コミットまたはプル要求でEtcd、Zookeeper、およびConsulに対して自動的に実行されます。
PatroniからPostgreSQLコマンドを呼び出す前に環境変数をクリアします。Feike Steenbergen
これにより、Patroniが管理するPostgreSQLクラスターに接続することにより、システム環境変数を読み取る可能性を防ぎます。
Configuration and control changes
patroniclとPatroni構成の統合Feike Steenbergen
patronictlは、Patroni自分自身と同じ構成ファイルを使用できます。
Patroniが環境変数から構成を読み取れるようにします Oleksii Kliukin
これにより、Patroniの構成を自動的に生成したり、さまざまなソースから単一の構成をマージしたりすることが簡単になります。
APIから返される情報にデータベースシステム識別子を含めます Feike Steenbergen
使用可能なすべてのDCSに delete_cluster を実装します。Alexander Kukushkin
patroniclでのEtcd以外のDCSのサポートを有効にします。
バージョン0.80
2016-03-14リリース
このリリースでは、 カスケードレプリケーション のサポートを追加し、 スケジュールされたフェイルオーバー を提供することによりPatroni管理を簡素化します。新しいリリースに移行するために、Patroniの古いバージョン特に0.78をこれと組み合わせて使用することができます。スケジュールされたフェイルオーバーとカスケードレプリケーション関連の機能は、Patroni 0.80以降でのみ動作することに注意してください。
Cascading replication
パトロニノードOleksii Kliukinの replicatefrom および clonefrom タグのサポートを追加します。
タグ replicatefrom により、レプリカはマスターではなく、ソースとして任意のノードを使用できます。 clonefrom は、初期バックアップに同じことを行います。これらを組み合わせることで、Patroniはカスケードレプリケーションを完全にサポートできます。
実行中のレプリケーション接続Oleksii Kliukinなしでもレプリカを初期化する実行レプリケーションメソッドのサポートを追加します。
これは、S3またはFTPに保存されているスナップショットからレプリカを作成するために役立ちます。 実行中のレプリケーション接続を必要としないレプリケーション方法は、yaml構成で no_master:true を提供する必要があります。レプリケーション接続が存在する場合、これらのスクリプトは引き続き呼び出されます。
Patronictl, API and DCS improvements
スケジュールされたフェイルオーバーを実装しますFeike Steenbergen 。
patroniclまたはAPI呼び出しを使用して、将来の特定の時刻にフェールオーバーが発生するようにスケジュールできます。
patroniclに dbuser および password パラメーターのサポートを追加しましたFeike Steenbergen。
PostgreSQLバージョンをヘルスチェック出力に追加しますFeike Steenbergen
patroniclのZookeeperサポートを向上させました。Oleksandr Shulgin
python-etcd 0.43への移行 Alexander Kukushkin
Configuration
Patroni(Jan Keirse)のサンプルシステム構成スクリプトを追加します。
PatroniがDB接続の構成ファイルで指定されたスーパーユーザー名を無視する問題を修正しました。Alexander Kukushkin
Patroni Alexander Kukushkinによって起動されたポストマスターの別のセッションIDとプロセスグループを作成することにより、CTRL-Cの処理を修正します。
Tests
実行中のPatroni Alexander Kukushkin、Oleksii Kliukinの現実のシナリオを確認するために、 behave を使用して受け入れテストを追加します。
テストは、 behave コマンドを使用して手動で起動できます。また、プル要求の場合およびコミット後にも自動的に起動されます。
一部の古いバージョンのリリースノートは project's github page _で見つけることができます。