リリースノート¶
バージョン3.3.0¶
2024-04-04リリース
警告
古いPartoniバージョンはすべて ydiff>=1.3 と互換性がありません。
問題を/"fix"するために使用できる次のオプションがあります。
Patroniを最新バージョンにアップグレードする
Patroniをインストールした後、
ydiff<1.3をインストールしますcdiffモジュールのインストール
New features
auth_dataをZookeeperクライアントに渡す機能を追加します。ArasMumcuyan接続に使用する認証資格情報を指定できます。
Barman統合のためのcontribスクリプトを追加しました。IsraelBarthRubioBarman操作をリモートで実行でき、カスタムブートストラップ/カスタムレプリカメソッドまたはon_role_changeコールバックとして使用できるアプリケーションpatroni_barmanを提供します。詳細については、patroni_barmanを確認してください。JSONログ形式のサポートalisalemmiplainデフォルトとは別に、Patroniはjsonログ形式もサポートするようになりました。python-json-logger>=2.0.2ライブラリをインストールする必要があります。pending_restart_reason情報の表示PolinaBunginapending_restartフラグが設定される原因となったPostgreSQLパラメーターに関する拡張情報を提供します。patronictl listと/patroniの両方のRESTAPIエンドポイントは、パラメーター名とその/"diff/"をpending_restart_reasonとして表示するようになりました。nostreamタグの実装GrigorySmolkinnostreamタグがtrueに設定されている場合、ノードはレプリケーションプロトコルを使用してWALをストリーミングせず、代わりにアーカイブリカバリに依存しますrestore_commandが構成されている場合。また、ノード自分自身とそのすべてのカスケードレプリカの永久論理レプリケーションスロットのコピーと同期も無効にします。
Improvements
logセクションの検証を実装します。AlexanderKukushkinこれまで、バリデーターは、提供されたロギング構成の正しさをチェックしていませんでした。
PostgreSQLパラメーター変更のロギングを向上させました。PolinaBungina
古い値を人間が判読可能な形式に変換し、
pg_controldataとPatroniグローバル構成の不一致に関する情報をログに記録します。
Bugfixes
許可されない
pg_basebackupオプションを適切にフィルターして除外するIsraelBarthRubioバグのため、Patroniは
- setting: value形式で提供されている場合、basebackupレプリカブートストラップ方法用に構成された許可されていないオプションを適切にフィルタリングしていませんでした。etcd3認証エラー処理を修正しましたAlexanderKukushkin要求を実行する直前に認証が行われなかった場合、
etcd3認証エラーが常に1回リトライします。また、再認証時にウォッチャーを再起動しないでください。バリデーターファイル検出のロジックの改善Waynerv
importlibライブラリを使用して、可能な場合は使用可能な構成パラメーターを含むファイルを検出しますPython3.9以降の場合。この実装はより安定しており、zipアーカイブに基づいたPatroniディストリビューションを中断しません。standby_clusterセクションで複数のホストが指定されている場合にのみtarget_session_attrsを使用します。AlexanderKukushkinstandby_cluster.hostセクションにコンマで区切られた複数のホストが含まれる場合にのみ、target_session_attrs=read-writeがスタンバイリーダーノードのprimary_conninfoに追加されるようになりました。ydiffライブラリバージョン1.3+の互換性コードを追加しましたAlexanderKukushkinPatroniは、Pythonモジュールではなく単なるターミナルツールであると考えられているため、パブリックではない
ydiffのいくつかのAPIに依存しています。残念ながら、1.3のAPIの変更により、古いPatroniバージョンが壊れました。
バージョン3.2.2¶
2024-01-17リリース
Bugfixes
DCSがワイプされたときにレプリカを復元させないでくださいAlexanderKukushkin
これは、パトローニがスタンドアロンのPGクラスターを引き継ぐことになっている方法で発生していました。
Consulから更新されたばかりの同期キーを取得するときに一貫した読み取りを使用するようになりました。AlexanderKukushkin
Consulは、更新したキーの
ModifyIndexをすぐに取得するインターフェイスを提供していないため、明示的な読み取り操作を実行する必要があります。古い読み取りはデフォルトで許可されているため、キーの古いバージョンを取得する場合がありました。再起動が必要なパラメーターが元の値にリセットされた場合、Postgres構成をリロードしますPolinaBungina
以前は、Patroniは構成を更新せず、
pending_restartをリセットするだけでした。同期モードで非同期候補へのフェイルオーバーを実行する際の確認プロンプトメッセージの誤った反転ロジックを修正しました。PolinaBungina
この問題は
patronictlにのみ存在しました。patronictlのフェイルオーバー候補からリーダーを除外するポリナ・ブンギナクラスターが正常な場合、既存のリーダーへのフェールオーバーはno-opです。
Citusデータベースと拡張機能を冪等に作成するAlexanderKukushkin、ZhaoJunwang
Citusデータベースに依存関係を追加する必要がある場合に、
post_bootstrapスクリプトでそれらを作成できます。矛盾する
nofailoverタグをフィルタリングしないでください。PolinaBunginaノードに設定された構成
{nofailover: false, failover_priority: 0}では、レースに参加できませんでしたが、nofailoverタグが優先される必要があるため、レースに参加する必要があります。PyInstallerのフリーズした問題を修正しましたSophiaRuan
freeze_support()はargparseの後に呼び出されたため、PatroniはPostgresを起動できませんでした。patronictlおよびCitus構成の構成ジェネレーターのバグを修正しました。IsraelBarthRubioこれにより、環境変数を介して設定された
patronictlおよびCitus構成パラメーターが生成された構成に書き込まれません。実行中のスタンバイに参加するときに、リカバリGUCと一部のパトローニ管理パラメーターを復元しますAlexanderKukushkin
Patroniは、内部構造の1つで
portが欠落していることに関するエラーが発生し、Postgresv12以降の再起動に失敗していました。pending_restartフラグ周辺の修正PolinaBunginarecovery_target_action = promoteでカスタムブートストラップしている場合、または誰かがたとえばALTER SYSTEMを使用してhot_standbyまたはwal_log_hintsを変更したときは、pending_restartを公開しないでください。
バージョン3.2.1¶
2023-11-30リリース
Bugfixes
patronictlの--format引数の受け入れられる値を制限しますAlexanderKukushkin任意の文字列を受け入れ、値が認識されない場合は出力を生成していませんでした。
リーダーキーを解放する前に、シャットダウン時にレプリカノードがチェックポイントLSNを受信したことを確認します。AlexanderKukushkin
以前は、場合によっては、CHECKPOINTが続くSWITCHレコードのLSNを使用していましたアーカイブモードが有効になっている場合。その結果、以前のプライマリは場合によって
pg_rewindを実行する必要がありましたが、データの損失は関係ありません。ノード名の一意性チェックを実行するときに実際のHTTP要求を実行しますAlexanderKukushkin
コンテナでPatroniを実行している場合、トラフィックがポートでリッスンし、着信接続を受け入れる
docker-proxyを使用してルーティングされる可能性があります。それは偽陽性を引き起こしていました。Etcdv2でのCitusサポートを修正しました。AlexanderKukushkin
Patroniは、Etcdv2を使用した新しいCitusクラスターの展開に失敗していました。
Postgresv16+での
pg_rewindの動作を修正しました。AlexanderKukushkinpg_waldumpのエラーメッセージ形式がv16で変更されたため、必要でない場合でもパトロニによってpg_rewindが呼び出されました。カスタムブートストラップのバグを修正しました。AlexanderKukushkin
Patroniは、ブートストラップコマンド自分自身である
--command引数を誤って適用していました。RESTAPIヘルスチェックエンドポイントに関する問題を修正しましたSophiaRuan
接続が適切にクローズされていないため、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ルールを適用し、最小可能値をハードコードするAlexanderKukushkin最小値
loop_wait=2、retry_timeout=3、ttl=20。値が小さいか、ルールに違反している場合、それらは調整され、警告がPatroniログに書き込まれます。
New features
フェイルオーバーの優先順位MarkPekala
tags.failover_priorityの助けを借りて、リーダーレース中にノードの優先順位を高くできるようになりました。詳細については、ドキュメントrefタグを参照してください。patroni --generate-config [--dsn DSN]およびpatroni --generate-sample-configを実装しましたPolinaBungina実行中のPostgreSQLクラスターの構成ファイル、または新しいPatroniクラスターのサンプル構成ファイルを生成できます。
PatroniRESTAPIのPostgresへの専用接続を使用するAlexanderKukushkin
システムにストレスがかかっている場合、メインハートビートループのブロックを回避するのに役立ちます。
ノードsskserkの
nameでいくつかのエンドポイントを強化するモニタリングエンドポイントの場合、
nameはscopeの横に追加され、メトリックエンドポイントの場合、nameがタグに追加されます。厳密なフェイルオーバー/スイッチオーバーの違いを保証しますPolinaBungina
ログメッセージの精度が向上し、正常な同期クラスターの非同期ノードへのフェールオーバーが可能になります。
永続的な物理レプリケーションスロットを永続的な論理スロットと同様に動作させますAlexanderKukushkin
リーダーになることができるすべてのノードで永続的な物理レプリケーションスロットを作成し、
pg_replication_slot_advance()ファンクションを使用してスタンバイノード上のスロットのrestart_lsnを進めます。patronictlの--dcs引数を介して名前空間を指定する機能を追加しました。IsraelBarthRubio構成ファイルなしで
patronictlを使用すると便利です。カスタムブートストラップ構成での追加パラメーターのサポートを追加します。IsraelBarthRubio
以前は、カスタム引数を
commandに追加することのみが可能でしたが、それらをマッピングとしてリストできるようになりました。
Improvements
citus.local_hostnameGUCを、パトロニがPostgresに接続するために使用する値と同じ値に設定します。AlexanderKukushkinCitusがローカルPostgresに接続したい場合があります。デフォルトでは、
localhostを使用しますが、常に使用できるわけではありません。
Bugfixes
スタンバイクラスターの
synchronous_mode設定を無視するPolinaBunginaPostgresはカスケード同期レプリケーションをサポートしておらず、
synchronous_modeがスタンバイクラスターでのスイッチオーバーを中断していたことは無視されません。on_reloadコールバックのSIGCHLDを処理しますAlexanderKukushkinこれを行わないと、ゾンビプロセスが発生し、次の
on_reloadが実行された場合にのみ刈り取られます。Etcdv3で作業する際の
AuthOldRevisionエラーを処理します。AlexanderKukushkin、KennyDoこのエラーは、EtcdがJWTを使用するように構成されている場合、Etcdのユーザデータベースが更新されたときに発生します。
バージョン3.1.2¶
2023-09-26リリース
Bugfixes
wal_keep_sizeチェックのバグを修正しました。AlexanderKukushkinwal_keep_sizeは、通常ユニットがあるGUCであり、パトロニはその値をintにキャストできませんでした。その結果、bootstrap.dcsの値はその後/configキーに書き込まれませんでした。/syncキーとsynchronous_standby_names間の不一致を検出および解決するようになりました。AlexanderKukushkin通常、Patroniは非常に特定の順序で
/syncおよびsynchronous_standby_namesを更新しますが、バグの場合、または誰かが手動でリセットした場合synchronous_standby_names、Patroniは一貫性のない状態になってしまいました。その結果、フェールオーバーが非同期ノードで発生する可能性がありました。実行中のPostgresに参加するときにGUCの値を読み取りますAlexanderKukushkin
pauseで再起動すると、Patroniはpostgresql.confからsynchronous_standby_namesGUCを破棄していました。それを解決し、同様の問題を回避するために、Patroniは、既に実行中のPostgresに参加する場合、GUCの値を読み取ります。ノードの一意性をチェックする際の迷惑な警告を沈黙させましたAlexanderKukushkin
Patroniがすぐに再起動された場合、
WARNINGメッセージはurllib3によって生成されます。
バージョン3.1.1¶
2023-09-20リリース
Bugfixes
プロモート時にフェイルセーフ状態をリセットするChenChangAo
フェールセーフモードがアクティブになった直後にスイッチオーバー/フェールオーバーが発生した場合、フェールセーフが非アクティブになった後、新しく昇格したプライマリは自分自身を降格していました。
patronictlの無駄な警告を沈黙させます。AlexanderKukushkinpatronictlがPatroniと同じpatroni.yamlファイルを使用し、PGDATAディレクトリにアクセスできる場合、グローバル構成の不正な値に関する迷惑な警告が表示されていた可能性があります。コーナーケースの同期モードを明示的に有効にするAlexanderKukushkin
プライマリからストリーミングするレプリカがない場合、同期モードは事実上アクティブ化されません。
0整数値検証のバグを修正しました。IsraelBarthRubioほとんどの場合、それは問題を発生させず、警告だけでした。
スタンバイクラスターの論理スロットを返さないでくださいAlexanderKukushkin
Patroniはスタンバイクラスターに論理レプリケーションスロットを作成できないため、グローバル構成で定義されている場合は無視する必要があります。
patronictl --help出力でのdocstringの表示を回避します。IsraelBarthRubioclickモジュールは、そのための特別なヒントを取得する必要があります。kubernetes.standby_leader_label_valueのバグを修正しました。AlexanderKukushkinこの機能は事実上動作しませんでした。
クラスターシステム識別子が
patronictl list出力に返されましたPolinaBunginaこの問題は、Citusのサポートを実装しているときに発生しました。コーディネーターとすべてのワーカーで異なるため、識別子を非表示にする必要があります。
Kubernetes実装の
write_leader_optimeメソッドをオーバーライドするAlexanderKukushkinこのメソッドは、新しいプライマリになることができる正常なレプリカがない場合に、シャットダウンLSNをリーダーエンドポイント/構成マップに書き込むことになっています。
一時停止中に停止したpostgresを開始しないでくださいAlexanderKukushkin
競合状態のため、パトロニは、一部のリカバリパラメーター
primary_conninfoまたは同様のものが変更されたため、スタンバイを再起動する必要があると誤って仮定していました。patronictl queryコマンドのバグを修正しました。IsraelBarthRubio-m引数のみが指定された場合、または-rまたは-mのいずれも提供されない場合、機能しませんでした。コマンドラインで使用される整数パラメーターを適切に処理してpostgresを起動するようにしました。PolinaBungina
値が文字列として提供され、整数にキャストされない場合、Citusクラスターの
max_connectionsに基づいてmax_prepared_transactionsの誤った計算が発生しました。pg_rewindを決定するときはpg_stat_wal_receiverに依存しないでください。AlexanderKukushkinpg_stat_wal_recevierによって報告されたreceived_tliは、実際の再生タイムラインより進んでいる場合がありますが、レプリケーション接続を介してDENTIFY_SYSTEMによって報告されるタイムラインは常に正しいです。
バージョン3.1.0¶
2023-08-03リリース
Breaking changes
restapi.keyfileおよびrestapi.certfileのセマンティックが変更されました。AlexanderKukushkin以前、Patroniは、
ctlセクションに各構成パラメーターが存在しない場合、フォールバックとしてrestapi.keyfileおよびrestapi.certfileをクライアント証明書として使用していました。
警告
クライアント証明書の検証を有効にしている場合 restapi.verify_client が required に設定されている場合、 restapi.verify_client は ctl.certfile 、 ctl.keyfile 、 ctl.keyfile_password に restapi.verify_client を提供します。提供されない場合、Patroniは正しく動作しません。
New features
ポッドのロールラベルを構成可能にするWaynerv
kubernetes.leader_label_value、kubernetes.follower_label_valueおよびkubernetes.standby_leader_label_valueパラメーターを使用して値をカスタマイズできます。この機能は、masterロールをprimaryに変更する場合に非常に役立ちます。機能と移行手順の詳細kubernetes.leader_label_valueを読むことができます。
Improvements
patroni --validate-configのさまざまな改善。AlexanderKukushkinさまざまなDCS、
bootstrap.dcs、ctl、restapi、およびwatchdogセクションのパラメーター検証が向上しました。パトローニの実行中にリカバリー中にクラッシュした場合、リカバリーしていないスタートPostgres。AlexanderKukushkin
これにより、リカバリ時間が短縮され、不必要なタイムラインのインクリメントを防ぐことができます。
/statusキーの不要な更新を回避します。AlexanderKukushkin永続的な論理スロットがない場合、Patroniは、プライマリのLSNが前進しない場合でも、ハートビートループごとに
/statusを更新していました。失効した予備選にリーダー争いを勝たせてはいけないアレクサンダー・ククシュキン
リソースの不足がために重要な時間パトローニがハングしていた場合、リーダーロックを取得する前に他のノードがPostgresを昇格させていないことをさらにチェックします。
特定のPostgreSQLパラメーター検証の可視性を実装しましたAlexanderKukushkin、FeikeSteenbergen
max_connections、max_wal_senders、max_prepared_transactions、max_locks_per_transaction、max_replication_slots、またはmax_worker_processesの検証が失敗した場合、Patroniは正常なデフォルト値を使用していました。これに加えて、警告も表示されます。PGDATAで作成されたファイルとディレクトリのアクセス許可を設定します。AlexanderKukushkinPatroniによって作成されたすべてのファイルは、所有者の読み取り/書き込み権限のみを持っていました。この動作は、別のユーザーで実行され、グループの読み取り権限に依存しているバックアップツールを破壊していました。今、Patroniは
PGDATAの権限を尊重し、PGDATA内に作成するすべてのディレクトリとファイルの権限を正しく設定します。
Bugfixes
シェルWaynervを介して
archive_commandを実行するPatroniは、シングルユーザーモードでクラッシュリカバリーを実行する前、または
pg_rewindの前に、一部のWALセグメントをアーカイブする場合があります。archive_commandに&&のようなシェル演算子が含まれている場合、Patroniでは動作しませんでした。/"onswitchover"のシャットダウンチェックを修正しました。PolinaBungina
指定された候補はまだストリーミング中であり、シャットダウンチェックを受信していない可能性がありますが、他の一部のノードが正常だったため、リーダーキーが削除されました。
/"isprimary"チェックを修正しましたAlexanderKukushkin
リーダーレース中に、レプリカは、古いリーダーのPostgresがまだプライマリとして実行されていることを認識できませんでした。
patronictl listを修正しました。AlexanderKukushkinクラスター名前フィールドは、
tsv、json、およびyaml出力フォーマットにありませんでした。一時停止後の
pg_rewindの動作を修正しましたAlexanderKukushkin特定の条件下では、Patroniは、メンテナンスモードから復帰した後、
pg_rewindを使用して偽のプライマリをクラスターに参加させることができませんでした。Etcdv3実装のバグを修正しました。AlexanderKukushkin
リビジョンの不一致のため、
create_revision/mod_revisionフィールドを使用してキー更新が実行された場合、内部KVキャッシュを無効にします。一時停止中のスタンバイクラスターのレプリカの動作を修正しましたAlexanderKukushkin
リーダーキーの有効期限が切れると、スタンバイクラスターのレプリカはリモートノードをフォローせず、
primary_conninfoをそのまま維持します。
バージョン3.0.4¶
2023-07-13リリース
New features
スタンバイノードのレプリケーションステータスを可視化しますAlexanderKukushkin
PostgreSQL9.6+の場合、Patroniは、スタンバイが他のノードからストリーミングされている場合は
streamingとして、またはレプリケーション接続がなく、restore_commandが設定されている場合はin archive recoveryとしてレプリケーション状態を報告します。状態は、DCSのmemberキー、RESTAPI、およびpatronictl list出力に表示されます。
Improvements
Etcdv3のエラーメッセージの向上AlexanderKukushkin
Etcdv3クラスターにアクセスできない場合Patroniは、
/v2エンドポイントにアクセスできないと報告していました。可能であれば
patronictlのクォーラム読み取りを使用しますAlexanderKukushkinEtcdまたはConsulクラスターは読み取り専用に低下する可能性がありますが、
patronictlビューからはすべて問題ありませんでした。今では、エラーで失敗します。構成内の重複した名前からのスプリットブレインを防止します。MarkPekala
Patroniは、起動時に、同じ名前のノードがDCSに登録されているかどうかを確認し、そのRESTAPIを照会しようとします。RESTAPIがアクセス可能な場合、Patroniはエラーで終了します。人的エラーからの保護に役立ちます。
パトローニの実行中にクラッシュした場合、スタートPostgresがリカバリーしていません。AlexanderKukushkin
リカバリー時間を短縮することができ、不必要なタイムラインのインクリメントから役立ちます。
Bugfixes
RESTAPISSL証明書は、SIGHUPの受信時にリロードされませんでした。IsraelBarthRubio
リグレッションは3.0.3で導入されました。
max_connectionsのようなパラメーターの整数GUC検証を修正しました。FeikeSteenbergenパトローニは引用符で囲まれた数値を好みませんでした。リグレッションは3.0.3で導入されました。
synchronous_modeの問題を修正しました。AlexanderKukushkinsynchronous_mode_strictが有効になっているときに不在の同期スタンバイを誤って待機しないように、synchronous_commit=offとともにtxid_current()を実行します。
バージョン3.0.3¶
2023-06-22リリース
New features
PostgreSQL16beta1との互換性AlexanderKukushkin
拡張されたGUCのバリデータールール。
PostgreSQLGUCのバリデーターを拡張可能にするIsraelBarthRubio
バリデータールールは、
patroni/postgresql/available_parameters/ディレクトリにあるYAMLファイルからロードされます。ファイルはアルファベット順に並べられ、次々に適用されます。非標準のPostgresディストリビューションのカスタムバリデーターを使用できるようになります。restapi.request_queue_sizeオプションを追加しました。AndreyZidenkov、AlekseiSukhovPatroniRESTAPIが使用するTCPソケットの要求キューサイズを設定します。キューがいっぱいになると、それ以降の要求は/"Connectiondenied/"エラーを取得します。デフォルト値は5です。
新しいクラスターを初期化するときに
initdbを直接呼び出します。MattBaker以前は
pg_ctlを介して呼び出され、initdbに渡されるパラメーターの特別な引用符が必要でした。停止フックの前に追加LeDuane
フックは
postgresql.before_stopを介して構成でき、pg_ctl stopの直前に実行されます。終了コードはシャットダウンプロセスに影響を与えません。カスタムPostgresバイナリ名のサポートを追加しましたIsraelBarthRubio、PolinaBungina
カスタムPostgresディストリビューションを使用する場合、PostgresバイナリがコミュニティPostgresディストリビューションで使用されるものとは異なる名前でコンパイルされる場合があります。カスタムバイナリ名は、
postgresql.bin_name. *および ``PATRONI_POSTGRESQL_BIN_* `` 環境変数を使用して構成できます。
Improvements
patroni --validate-configのさまざまな改善PolinaBunginabootstrap.initdbをオプショナルにします。これは新しいクラスターにのみ必要ですが、構成に欠落している場合、patroni --validate-configは不平を訴えていました。postgresql.bin_dirが空であるか、設定されていない場合にエラーを出さないようにします。代わりに、最初にデフォルトのPATHでPostgresバイナリを見つけてみてください。postgresql.authentication.rewindセクションをオプショナルにします。それが見つからない場合、Patroniはスーパーユーザーを使用しています。
patronictlのエラーレポートの向上IsraelBarthRubio/nシンボルは、実際の改行シンボルの代わりに、そのままレンダリングされました。
Bugfixes
Citusサポートの問題を修正しました。AlexanderKukushkin
スイッチオーバー中に昇格したワーカーからコーディネーターへのRESTAPI呼び出しが失敗した場合、特定のCitusグループが無期限にブロックされたままになっていました。
patronictl`の--dcs-url`オプションで`etcd3`URLを許可します。IsraelBarthRubio
ユーザが`patronictl`の`--dcs-url`オプションを介して`etcd3`URLを渡そうとすると、例外が発生します。
バージョン3.0.2¶
2023-03-24リリース
警告
バージョン3.0.2は、3.6より古いPythonのサポートを終了しました。
New features
同期スタンバイレプリカステータスを
/metricsエンドポイントに追加しました。ThomasvonDein、AlexanderKukushkin以前は、
primary/standby_leader/replicaのみをレポートしていました。patronictlでのPAGERの使いやすい処理IsraelBarthRubioPAGER環境変数を介してページャーを構成可能になります。これは、デフォルトのlessおよびmoreをオーバーライドします。K8sを再試行可能なHTTPステータスコードを構成可能にしますAlexanderKukushkin
一部の管理対象プラットフォームでは、ステータスコード
401 Unauthorizedを取得することができますが、これは数回の再試行後に解決される場合があります。
Improvements
recovery_target_actionがpromoteに設定されている場合にのみ、カスタムブートストラップ中にhot_standbyをoffに設定します。AlexanderKukushkinrecovery_target_action=pauseを正しく動作させる必要がありました。on_reloadコールバックが他のコールバックをkillすることを許可しないでくださいAlexanderKukushkinon_start/on_stop/on_role_changeは、通常、仮想IPを追加/削除するために使用され、on_reloadはそれらに干渉しないはずです。awsコールバックサンプルスクリプトで
IMDSFetcherに切り替えましたPolinaBunginaIMDSv2は使用するトークンを必要とし、IMDSFetcherはそれを透過的に処理します。
Bugfixes
Kubernetesで実行されているCitusクラスターの
patronictl switchoverを修正しました。LukášLalinskýdefaultとは異なる名前空間では機能しませんでした。メジャーバージョンが不明な場合は
PGDATAに書き込まないでくださいAlexanderKukushkinstart直後に
PGDATAが空であった場合まだマウントされていない場合、PatroniはPostgreSQLバージョンについて誤った仮定を立て、実際のメジャーバージョンがv10+であってもrecovery.confファイルを誤って作成していました。コーディネーターフェイルオーバー後のCitusメタデータのバグを修正しました。AlexanderKukushkin
citus_set_coordinator_host()呼び出しはメタデータの同期を発生させず、変更はワーカーノードでは不可視でした。この問題は、citus_update_node()に切り替えることにより解決されます。すべてのetcdノードが/"failed"した場合、構成ファイルにリストされているetcdホストをフォールバックとして使用しますAlexanderKukushkin
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は、Python2.7をサポートする最後のリリースです。次のリリースでは、3.7より古いPythonバージョンのサポートを終了します。
RAFTサポートは非推奨です。メンテナンスには最善を尽くしますが、発生する可能性のある問題については保証も責任も負いません。
このバージョンは、/"primary/"を優先して、/"master/"を削除する最初のステップです。次のメジャーリリースへのアップグレードは、少なくとも3.0.0を実行している場合にのみ確実に機能します。
New features
DCSフェイルセーフモードAlexanderKukushkin、PolinaBungina
この機能が有効になっている場合、Patroniクラスターは一時的なDCSの停止を生き延びることができます。詳細については、 documentation をご覧ください。
CitusのサポートAlexanderKukushkin、PolinaBungina、JelteFenema
Patroni enables easy deployment and management of Citus clusters with HA. Please check here page for more information.
Improvements
不明ながアクティブなレプリケーションスロットをドロップする際の再発エラーの抑制MichaelBankk
Patroniはこれらのログを書き込みますが、デバッグでのみです。
HAループごとに1つのモニタリングクエリーのみを実行します。AlexanderKukushkin
同期レプリケーションが有効になっている場合は、そうではありません。
最新の障害データディレクトリのみを保持します。WilliamAlbertusDembo
ブートストラップが失敗した場合、Patroniはタイムスタンプサフィックスを使用して$PGDATAフォルダーの名前を変更していました。今後、サフィックスは
.failedになり、そのようなフォルダーが存在する場合、名前を変更する前に削除されます。同期レプリケーション接続のチェックの向上AlexanderKukushkin
新しいホストが
synchronous_standby_namesに追加されると、pg_stat_replication.sync_state = 'sync'に加えてプライマリに追いついた場合にのみDCSで同期として設定されます。
Removed functionality
patronictl scaffoldの削除AlexanderKukushkinこれを使用する唯一の理由は、スタンバイクラスターを実行するハッキングな方法でした。
バージョン2.1.7¶
2023-01-04リリース
Bugfixes
古いPythonモジュールとの小さな非互換性を修正しました。AlexanderKukushkin
彼らは、Debianバスター/UbuntubionicでPatroniをビルド/実行できませんでした。
バージョン2.1.6¶
2022-12-30リリース
Improvements
sslソケットのシャットダウン時の迷惑な例外を修正しましたAlexanderKukushkin
HAProxyは、HTTPステータスコードを取得するとすぐに接続を閉じているため、PatroniがSSL接続を適切にシャットダウンする時間がありません。
arm64のDockerfileの例を調整する(PolinaBungina)
明示的な
amd64およびx86_64を削除します。libnss_files.so.*は削除しないでください。
Security improvements
非レプリケーション接続に
search_path=pg_catalogを適用するAlexanderKukushkinPatroniはスーパーユーザー接続に大きく依存しているため、
pg_catalogの対応するオブジェクトと同じ名前とシグネチャを持つpublicスキーマのユーザー定義ファンクションおよび/または演算子を使用して実行される可能性のある攻撃から保護したいと思います。そのため、search_path=pg_catalogは、Patroniによって作成されたすべての接続レプリケーション接続を除くに適用されます。パスワードが
pg_stat_statementsに記録されないようにしますFeikeSteenbergenこれは、ユーザーを作成するときに
pg_stat_statements.track_utility=offを設定することにより実現されます。
Bugfixes
proxy_addressをオプショナルとして宣言しますDenisLaxaldeこれは事実上不要なオプションであるため。
安全でないオプションの動作を改善しましたAlexanderKukushkin
RESTAPI要求にクライアント証明書が使用される場合、Ctlの
insecureオプションは適切に動作しませんでした。新しいクラスターがブートストラップされるときに
bootstrap.dcsからウォッチドッグ構成を取得します。MattBakerPatroniは、DCSのブートストラップに使用される構成を取得するのではなく、新しいクラスターをブートストラップするときに、デフォルトでウォッチドッグを最初に構成していました。
WIN32で実行可能ファイルを検索するときにファイル拡張子が処理される方法を修正しました。MartínMarqués
拡張子がまだない場合、ファイル名にのみ
.exeを追加します。ConsulTTLセットアップを修正しました。AlexanderKukushkin
HTTPクライアントで値を設定するときに
ttl/2.0を使用しましたが、クラスのプロパティで現在の値を2で乗算するのを忘れました。その結果、ConsulTTLが2倍オフになりました。
Removed functionality
patronictl configureの削除PolinaBungina別個の
patronictl構成を作成する必要はありません。
バージョン2.1.5¶
2022-11-28リリース
このバージョンは、PostgreSQL15との互換性を強化し、Etcdv3サポートを実稼働対応として宣言します。Raftのパトローニはベータ版のままです。
New features
patroni --validate-configの改善DenisLaxalde構成が無効な場合はコード1で終了し、標準エラー出力にエラーを出力します。
一時停止中にレプリケーションスロットをドロップしないでくださいAlexanderKukushkin
Patroniは、メンバーがクラスターに参加/離脱するときに、物理レプリケーションスロットを自動的に作成/削除します。一時停止中のスロットは削除されなくなります。
モニタリングエンドポイントの
HEAD要求メソッドのサポートRobertCutajarGETの代わりに使用される場合、PatroniはHTTPステータスコードのみを返します。Windowsでの動作テストのサポートAlexanderKukushkin
新しいRESTAPIエンドポイント
POST /sigtermを導入することにより、Windowsで正常なPatroniシャットダウンSIGTERMをエミュレートします。postgresql.proxy_addressの紹介AlexanderKukushkinこれは
proxy_urlとしてDCSのメンバーキーに書き込まれ、サービスディスカバリに使用/役立つ可能性があります。
Stability improvements
スレッドから
pg_replication_slot_advance()を呼び出します。AlexanderKukushkin多くの論理レプリケーションスロットを持つビジーなクラスターでは、
pg_replication_slot_advance()呼び出しがメインHAループに影響を与え、メンバーキーの有効期限が発生する可能性がありました。古いプライマリで
pg_rewindを呼び出す前に、欠落している可能性のあるWALをアーカイブしますPolinaBunginaプライマリがクラッシュして、かなりの時間ダウンしている場合、一部のWALファイルがアーカイブと新しいプライマリから失われる可能性があります。
pg_rewindは、古いプライマリからこれらのWALファイルを削除し、スタンバイとして起動できなくする可能性があります。readyWALファイルをアーカイブすることにより、この問題を軽減するだけでなく、一般的に継続的なアーカイブエクスペリエンスが向上します。Kubernetesサービスを作成しようとするときは
403エラーを無視します。NickHudson、PolinaBunginaPatroniは、サービスを作成しようとして失敗したことによりログをスパム送信していましたが、実際には既に存在する可能性があります。
livenessプローブの向上AlexanderKukushkin
ライブネス問題は、ハートビートループがプライマリの`ttl`またはレプリカの`2*ttl`より長く実行されている場合に失敗し始めます。これにより、Kubernetesで watchdog の代替として使用できます。
スイッチオーバー時に同期ノードのみがロックを取得しようとするようにしましたAlexanderKukushkin、PolinaBungina
以前は、ターゲットを指定せずに手動スイッチオーバーが実行された場合、最新の非同期メンバーがリーダーになる可能性はほとんどありませんでした。
ブートストラップの実行中のクローン作成を回避するAntsAasma
クラスターブートストラップの実行中は、リーダーをトリガーする必要のないレプリカ作成メソッドを許可しないでください。
kazoo-2.9.0との互換性AlexanderKukushkin
Pythonバージョンによっては、閉じたソケットで
select()が呼び出される場合、SequentialThreadingHandler.select()メソッドはTypeErrorおよびIOError例外を発生させる場合があります。ソケットをシャットダウンする前にSSL接続を明示的にシャットダウンしますAlexanderKukushkin
これを行わないと、OpenSSL3.0で
unexpected eof while readingエラーが発生しました。`prettytable>=2.2.0`との互換性AlexanderKukushkin
内部APIの変更が原因で、クラスター名前ヘッダーが誤った行に表示されました。
Bugfixes
Etcdresume_grantの有効期限が切れたトークンを処理するmonsterxx03
エラーが発生した場合は、新しいトークンを取得して、要求を再試行します。
GET /read-only-syncエンドポイントのバグを修正しました。AlexanderKukushkinこれは、以前のリリースで導入されたもので、事実上動作しませんでした。
データディレクトリストレージが消失した場合の処理AlexanderKukushkin
Patroniは、PGDATAが存在し空ではないことを定期的にチェックしていますが、ストレージに問題が発生した場合、
os.listdir()はOSError例外を発生させ、ハートビートループを中断しています。ユーザーのバックエンドが閉じるのを待機するときに
master_stop_timeoutを適用するAlexanderKukushkinユーザーのバックエンドのように見えるものは、実際には停止に失敗しているバックグラウンドワーカーCitusメンテナンスデーモンなどである可能性があります。
postgresql.listenの*:<port>を受け入れますDenisLaxaldepatroni --validate-configは、無効であることについて苦情を述べていました。Raftのタイムアウトの修正AlexanderKukushkin
Patroniまたはpatronictlが起動すると、既知のメンバーからRaftクラスタートポロジを取得しようとします。これらの呼び出しは、適切なタイムアウトなしで行われました。
トークンが変更された場合にConsulサービスを強制的に更新します。JohnA.Lotoski
そうしないと、エラー/"rpcerrorMakingcall:rpcerrorMakingcall:ACLnotfound/"が発生します。
バージョン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-MichelScheiwilerまた、一部の非x86プラットフォームでのウォッチドッグのサポートを修正しました。
aws.pyコールバックを
botoからboto3に切り替えました。AlexanderKukushkin
.xは2018年から放棄され、python3.9で失敗します。
K8sのサービスアカウントトークンを定期的に更新します。HaitaoLi
Kubernetesv1.21以降、サービスアカウントトークンは1時間で有効期限が切れます。
/read-only-syncモニタリングエンドポイントDennis4bを追加しました/read-onlyに似ていますが、同期レプリカのみが含まれます。
Stability improvements
プライマリとの論理デコードセットアップに構成の不一致がある場合、論理レプリケーションスロットをレプリカにコピーしないでください。AlexanderKukushkin
スロットが
pluginまたはdatabase構成オプションと一致しない場合、レプリカはプライマリから論理レプリケーションスロットをコピーしません。以前は、スロットがこれらの構成オプションと一致するかどうかのチェックは、レプリカがスロットをコピーして起動するまで実行されず、不要な再起動が繰り返されていました。PostgreSQLv12+のリカバリ構成パラメーターの特別な処理AlexanderKukushkin
レプリカとしてスタートしている間、パトロニは、
pg_settingsから照会する代わりに現在のパラメーター値をキャッシュすることにより、リーダーアドレスが変更された場合、postgresql.confを更新し、リスタート/リロードできる必要があります。postgresql.listenパラメーターでのIPv6アドレスの処理の向上AlexanderKukushkinlistenパラメーターにはポートがあるため、IPv6アドレスを角かっこ内に入力しようとしますが、リストに複数のIPがある場合、これは正しく削除されませんでした。PostgreSQLv10以前でのみ発散チェックを実行する場合に
replication資格情報を使用するAlexanderKukushkinrewindが有効になっている場合、Patroniは新しいPostgresバージョンでsuperuserまたはrewind資格情報を再度使用します。
Bugfixes
dateutil.parserのインポートの欠落を修正しました。WesleyMendes他のモジュールからインポートされたという理由だけで、テストは失敗していませんでした。
optimeアノテーションが文字列であることを確認しましたSebastianHasler特定の場合、パトローニはそれを数値として渡そうとしていました。
失敗した
pg_rewind試行の処理の向上AlexanderKukushkinpg_rewind中にプライマリが利用できなくなると、$PGDATAは破損した状態のままになります。その後、Patroniは、構成で許可されていない場合でもデータディレクトリを削除します。PostgreSQLの準備ができていない場合は、リーダー
ConfigMap/Endpointからslotsアノテーションを削除しないでください。AlexanderKukushkinslots値が渡されない場合、アノテーションは現在の値を保持します。K8sAPIウォッチャーによる同時実行問題の処理AlexanderKukushkin
特定の不明な条件下では、ウォッチャーが古くなる場合があります。その結果、
attempt_to_acquire_leader()メソッドはHTTPステータスコード409により失敗する可能性があります。その場合、ウォッチャー接続をリセットし、最初からリスタートします。
バージョン2.1.3¶
2022-02-18リリース
New features
patronictlの暗号化されたTLSキーのサポートを追加しましたAlexanderKukushkinctl.keyfile_passwordまたはPATRONI_CTL_KEYFILE_PASSWORD環境変数を介して構成できます。/metricsエンドポイントにメトリックを追加しました。AlexandrePereira
具体的には、
patroni_pending_restartおよびpatroni_is_paused。スタンバイクラスタ構成で複数のホストを指定できるようにしますマイケル・バンク
スタンバイクラスターがPatroniクラスターからレプリケートしている場合、PostgreSQLv10以降の
libpqで利用可能なクライアントサイドのフェールオーバーに依存するのが良いかもしれません。つまり、スタンバイリーダーのprimary_conninfoとpg_rewind接続文字列のtarget_session_attrs=read-writeを設定します。pgpassファイルは複数行ホストごとに1行で生成され、プライマリクラスターノードでCHECKPOINTを呼び出す代わりに、スタンバイクラスターはpg_controlが更新されるのを待機します。
Stability improvements
古い
psycopg2との互換性。AlexanderKukushkinたとえば、Ubuntu18.04パッケージからインストールされた
psycopg2には、UndefinedFile例外がまだありません。すべてのEtcdノードが応答しない場合は、
etcd3ウォッチャーを再起動します。AlexanderKukushkinウォッチャーが生きている場合、すべてのEtcdノードに障害が発生している場合でも、
get_cluster()メソッドは古い情報を返し続けます。一時停止中にスタンバイクラスターのリーダーロックを削除しないでくださいAlexanderKukushkin
以前は、ロックは、スタンバイリーダーではなく、プライマリとして実行されているノードによってのみ維持されていました。
Bugfixes
スタンバイリーダーブートストラップのバグを修正しました。AlexanderKukushkin
Patroniは、Postgresが60秒後に接続の受け入れを開始しない場合、ブートストラップが失敗したと考えていました。このバグは2.1.2リリースで導入されました。
カスケードスタンバイへのフェイルオーバーのバグを修正しました。AlexanderKukushkin
カスケードスタンバイでどのスロットを作成するかを判断するとき、リーダーが存在しない可能性があることを考慮するのを忘れていました。
Postgres構成バリデータの小さな問題を修正しました。AlexanderKukushkin
validator.pyで最小値と最大値が引用符で囲まれていたため、PostgreSQLv14で導入された整数パラメーターは検証に失敗していました
リーダーのステータスを確認するときにレプリケーション資格情報を使用するAlexanderKukushkin
remove_data_directory_on_diverged_timelinesは設定されている可能性がありますが、rewind_credentialsは定義されておらず、ノード間のスーパーユーザーアクセスは許可されていません。RESTAPI証明書の置換時の/"portinuse/"エラーを修正しましたAntsAasma
証明書を切り替えるときに、同時API要求との競合状態が発生しました。置換期間中にアクティブなものがある場合、置換はポート使用中エラーでエラーになり、PatroniはアクティブなAPIサーバーがない状態でスタックします。
パスワードに
%文字が含まれる場合、クラスターブートストラップのバグを修正しました。BastienWirtzブートストラップメソッドは、すべてのパラメーターを適切に引用して
DOブロックを実行しますが、cursor.execute()メソッドは渡されたパラメーターを含む空のリストを好みませんでした。/"AttributeError:noproperty'leader'/"例外を修正しました。HrvojeMilković
これは、同期モードが有効になっており、DCSコンテンツがワイプアウトされた場合に発生する可能性があります。
ダイバージェンスタイムラインチェックのバグを修正しました。AlexanderKukushkin
パトローニは、タイムラインが分岐したと誤って仮定していました。pg_rewindの場合、問題は発生しませんでしたが、pg_rewindが許可されず、
remove_data_directory_on_diverged_timelinesが設定されている場合、以前のリーダーが再初期化される結果になりました。
バージョン2.1.2¶
2021-12-03リリース
New features
psycopg>=3.0との互換性。AlexanderKukushkinデフォルトでは、
psycopg2が優先されます。psycopg>=3.0`は、 ``psycopg2` が利用できない場合、またはそのバージョンが古すぎる場合にのみ使用されます。dcs_last_seenフィールドをRESTAPIに追加しますMichaelBankこのフィールドは、クラスターメンバーがDCSと正常に通信した最後にUNIXエポックとしてノートします。これは、ネットワークパーティションを特定および分析するのに役立ちます。
pg_controldataが/"shutdown/"を報告したときにリーダーロックを解放しますAlexanderKukushkinarchive_commandが遅い/障害がある場合の遅いスイッチオーバー/シャットダウンの問題を解決するために、pg_controldataがshut downとしてPGDATAをきれいに報告し始め、すべての変更を受け取った少なくとも1つのレプリカが存在することを確認した直後に、パトロニはリーダーキーを削除します。この条件を満たすレプリカがない場合、リーダーキーは削除されず、古い動作が保持されます。つまり、パトローニはロックを更新し続けます。sslcrldir接続パラメーターのサポートを追加しましたKostiantynNemchenko新しい接続パラメーターはPostgreSQLv14で導入されました。
ZookeeperでZNodesのACL設定を許可します。AlwynDavis
新しい構成オプション
zookeeper.set_aclsを導入して、Kazooが作成する各ZノードにデフォルトのACLを適用するようにします。
Stability improvements
次のHAループまで、次のリカバリーの試行を遅らせます。AlexanderKukushkin
ディスク領域たとえば、Postgresがクラッシュし、そのために起動に失敗した場合、Patroniはそれを回復しようとすることにあまりにも熱心にログを氾濫させています。
降格する前にログを追加します。これには時間がかかる場合があります。MichaelBank
降格が完了するまでに時間がかかる場合があり、ログを見ても、正確に何が起こっているのかが明らかでない場合があります。
/"Iam/"ステータスメッセージを改善しましたMichaelBank
no action. I am a secondary ({0})vsno action. I am ({0}), a secondarywal_keep_sizeに変換するときにintwal_keep_segmentsにキャストするようになりました。JorgeSolórzanoグローバル
wal_keep_segmentsの文字列としてwal_keep_segmentsを指定することが可能であり、Pythonは動的型付け言語であるため、文字列は単に乗算されました。例wal_keep_segments: /"100/"は100100100100100100100100100100100100100100100100MBに変換されました。同期レプリケーションが有効になっている場合、同期ノードへのスイッチオーバーのみを許可しますAlexanderKukushkin
それに加えて、リーダーは既知の同期ノードに対してのみレースを行います。
Postgresが遅い場合に、キャッシュされたロールをフォールバックとして使用するAlexanderKukushkin
一部の極端なケースでは、Postgresが非常に遅いため、通常の監視クエリが数秒で終了しない場合があります。
statement_timeout例外が適切に処理されない場合、リーダーキーの有効期限が切れた場合、または更新が失敗したときにPostgresが時間通りに降格されない状況が発生する可能性があります。このような例外が発生した場合、Patroniはキャッシュされたroleを使用して、Postgresがプライマリとして実行されているかどうかを判断します。メンバーZNodeの不必要な更新を回避します。AlexanderKukushkin
メンバーデータの値が変更されていない場合、更新は発生しないはずです。
プロモート後のチェックポイントの最適化AlexanderKukushkin
最新のタイムラインが既に
pg_controlに保存されている場合は、CHECKPOINTの実行を避けてください。initdbで新しいクラスターを初期化した直後に、不必要なCHECKPOINTを回避するのに役立ちます。同期ノードを選択するときに
nofailoverのないメンバーを優先するAlexanderKukushkin以前の同期ノードはレプリケーションラグにのみ基づいて選択されていたため、
nofailoverタグが付いているノードは他のノードと同じ同期になる機会がありました。プライマリに障害が発生した場合、フェールオーバーは自動的に発生しないため、この動作は混乱を招くと同時に危険でした。etcdマシンキャッシュから重複ホストを削除しますMichaelBank
etcdクラスター内のアドバタイズされたクライアントURLは、誤って構成されている可能性があります。この場合、Patroniで重複を削除するのは簡単な成果です。
Bugfixes
スロット管理中に一時的なレプリケーションスロットをスキップするAlexanderKukushkin
v10から
pg_basebackupは、WALストリーミング用の一時的なレプリケーションスロットを作成します。パトローニは、スロット名が不明に見えるため、それをドロップしようとしていました。それを修正するために、pg_stat_replication_slotsビューを照会するときにすべての一時スロットをスキップします。pg_replication_slot_advance()がタイムアウトしないことを確認しますAlexanderKukushkinこの場合、パトロニはデフォルトの
statement_timeoutを使用していましたが、呼び出しが失敗すると、回復しない可能性が非常に高いため、pg_walおよびpg_catalogのサイズが増加します。/statusは、降格時に更新されませんでしたAlexanderKukushkinPostgreSQLを降格した後、古いリーダーはDCSの最後のLSNを更新します。
2.1.0から、新しい/statusキーが導入されましたが、optimeは引き続き/optime/leaderに書き込まれます。降格時のハンドルDCS例外AlexanderKukushkin
リーダーロックの更新に失敗したためにマスターを降格しているときに、DCSが完全にダウンし、
get_cluster()呼び出しが例外を発生する場合があります。適切に処理されない場合、DCSが回復するまでPostgresは停止したままになります。use_unix_socket_replは場合によっては機能しませんでしたAlexanderKukushkin具体的には、
postgresql.unix_socket_directoriesが設定されていない場合。この場合、Patroniはlibpqのデフォルト値を使用することになっています。PatroniRESTAPIのいくつかの問題を修正しましたAlexanderKukushkin
clusters_unlockedは定義できない場合があり、GET /metricsエンドポイントで例外が発生しました。それに加えて、エラー処理方法は、connect_addressタプルに常に2つの要素があることを前提としていましたが、実際には、IPv6の場合にはもっと多くの要素がある可能性があります。巻き戻しを決定する前に、新しく昇格したノードの復旧が完了するのを待ってくださいAlexanderKukushkin
実際のプロモートが発生し、新しいタイムラインが作成されるまでに時間がかかる場合があります。待機せずに、レプリカは巻き戻しが必要ではないという結論に達する可能性があります。
巻き戻しを決定するときに履歴ファイルの欠落したタイムラインを処理するAlexanderKukushkin
現在のレプリカのタイムラインがプライマリの履歴ファイルにない場合、レプリカはリワインドが必要でないという誤った想定をしていました。
バージョン2.1.1¶
2021-08-19リリース
New features
ETCDSRV名前サフィックスのサポートDavidPavlicek
Etcdを使用すると、同じドメインの下の複数のEtcdクラスターを区別できます。今後、Patroniもそれをサポートします。
新しいリーダーhuiyalin525で歴史を豊かにします
新しい列を
patronictl history出力に追加します。クラスター内のKubernetes構成用にCAバンドルを構成可能にしますAronParsons
デフォルトでは、Patroniは
/var/run/secrets/kubernetes.io/serviceaccount/ca.crtを使用しており、この新機能によりカスタムkubernetes.cacertを指定できます。Consulサービスとしての動的な登録/登録解除とタグの変更をサポートTommyLi
以前は、Patroniの再起動が必要でした。
Bugfixes
RESTAPIの不必要なリロードを回避します。AlexanderKukushkin
以前のリリースでは、ディスクで変更された場合にRESTAPI証明書をリロードする機能を追加しました。残念ながら、リロードは開始直後に無条件で発生していました。
etcd.use_proxiesが設定されているときにクラスターメンバーを解決しないでくださいAlexanderKukushkinPatroniは、起動時に、メンバーのリストを照会することにより、Etcdクラスターの正常性をチェックします。それに加えて、ホスト名を解決しようとしましたが、これはプロキシを介してEtcdで作業する場合に必要ではなく、不要な警告を発生させていました。
pg_stat_replicationのNULL値を含む行をスキップするAlexanderKukushkinpg_stat_replicationビューは、state = 'streaming'の場合でも、replay_lsn、flush_lsn、またはwrite_lsnフィールドにNULL値を含めることができるようです。
バージョン2.1.0¶
2021-07-06リリース
このバージョンでは、PostgreSQLv14との互換性を追加し、フェールオーバー/スイッチオーバーを生き抜くための論理レプリケーションスロットを作成し、RESTAPIのホワイトリストのサポートを実装し、ログ数をハートビートごとに1行に削減します。
New features
PostgreSQLv14との互換性AlexanderKukushkin
Patroniが/"pause/"モード自分自身にない場合、WAL再生の一時停止を解除します。プライマリの
max_connectionsなどの特定のパラメーターの変更により、/"paused/"になる可能性があります。フェールオーバー論理スロットAlexanderKukushkin
PostgreSQLv11以降で論理レプリケーションスロットがフェールオーバー/スイッチオーバーを生き残るようにします。レプリケーションスロットは、リスタートでプライマリからレプリカにコピーされた場合、後で pg_replication_slot_advance() _ファンクションを使用して前方に移動します。その結果、スロットはフェイルオーバー前に既に存在し、イベントが失われることはありませんが、一部のイベントは複数回配信される可能性があります。
PatroniRESTAPIの許可リストを実装しましたAlexanderKukushkin
構成されている場合、ルールと一致するIPのみが安全でないエンドポイントを呼び出すことができます。それに加えて、クラスターのメンバーのIPをリストに自動的に含めることができます。
Unixソケットを介したレプリケーション接続のサポートを追加しました。MohamedEl-Rifai
以前、Patroniはレプリケーション接続に常にTCPを使用していましたが、SSL検証で問題が発生する可能性がありました。UNIXソケットを使用すると、レプリケーションユーザーをSSL検証から免除できます。
ユーザー定義タグのヘルスチェックArmanJafariTehrani
predefined tags: と合わせて、
patronictl list出力およびRESTAPIで表示されるカスタムタグを指定できます。今後、ヘルスチェックでカスタムタグを使用できるようになります。Prometheus
/metricsエンドポイントを追加しました。MarkMercado、MichaelBank/patroniと同じメトリックを公開するエンドポイント。Patroniログのおしゃべり性の低下AlexanderKukushkin
すべてが正常な場合、HAループの実行ごとに1行のみが書き込まれます。
Breaking changes
古い
permanent logical replication slots機能は、PostgreSQLv10以前では動作しなくなりました。AlexanderKukushkinプロモーションを実行した後に論理スロットを作成する戦略では、論理イベントが失われないこと、したがって無効になることを保証できません。
ノードがロックを保持している場合、
/leaderエンドポイントは常に200を結果ます。AlexanderKukushkinスタンバイクラスターを昇格させるには、ロードバランサーのヘルスチェックを更新する必要がありますが、これはあまり便利ではなく、忘れがちです。それを解決するには、
/leaderヘルスチェックエンドポイントの動作を変更します。クラスターが通常のクラスターであるかstandby_clusterであるかを考慮せずに、200を返します。
Improvements in Raft support
Raftトラフィック暗号化の信頼できるサポートAlexanderKukushkin
PySyncObjのさまざまな問題のため、暗号化のサポートは非常に不安定でしたRaft実装でのDNSの問題の処理AlexanderKukushkin
self_addrおよび/またはpartner_addrsがIPの代わりにDNS名を使用して構成されている場合、PySyncObjはオブジェクトの作成時に1回のみ効果的に解決を行っていました。同じノードが別のIPでオンラインに戻ったときに問題が発生していました。
Stability improvements
psycopg2-2.9+との互換性。AlexanderKukushkinpsycopg2では、autocommit = Trueはwith connectionブロックで無視され、レプリケーションプロトコル接続が切断されます。Zookeeperでの過剰なHAループの実行を修正しました。AlexanderKukushkin
メンバーZノードの更新は連鎖反応を引き起こし、その結果、HAループが連続して複数回実行されました。
ディスク上のRESTAPI証明書が変更された場合はリロードしますMichaelTodorovic
RESTAPI証明書ファイルがインプレースで更新された場合、Patroniはリロードを実行しませんでした。
kerberos認証が使用される場合、pgpassディレクトリを作成しないでくださいKostiantynNemchenko
Kerberosとパスワード認証は相互に排他的です。
カスタムブートストラップの小さな問題を修正しました。AlexanderKukushkin
PITRを実行する場合にのみ
hot_standby=offでPostgresを起動し、PITRが完了したら再起動します。
Bugfixes
kazoo-2.7+との互換性。AlexanderKukushkinPatroniは自分自身で再試行を処理しているため、使用可能な接続がない場合にZookeeperクラスターへの要求がすぐに破棄される
kazooの古い動作に依存しています。プロキシを介して接続していることが知られている場合、Etcdv3クラスターのバージョンを明示的に要求しますAlexanderKukushkin
PatroniはgPRCゲートウェイを介してEtcdv3クラスターと連携しており、クラスターバージョンに応じて、異なるエンドポイント
/v3、/v3beta、または/v3alphaを使用する必要があります。バージョンはクラスタートポロジとともにのみ解決されましたが、プロキシを介して接続するときに後者は決して実行されないため。
バージョン2.0.2¶
2021-02-22リリース
New features
外部管理対象レプリケーションスロットを無視する機能JamesColeman
Patroniは、不明なレプリケーションスロットを削除しようとしていますが、レプリケーションスロットを外部で管理する必要がある場合が確かにあります。これから、削除しないスロットを構成できるようになります。
RESTAPIの暗号スイート制限のサポートを追加しましたGunnar/"Nick/"Bluth
restapi.ciphersまたはPATRONI_RESTAPI_CIPHERS環境変数を介して構成できます。RESTAPIの暗号化されたTLSキーのサポートを追加しました。JonathanS.Katz
restapi.keyfile_passwordまたはPATRONI_RESTAPI_KEYFILE_PASSWORD環境変数を介して構成できます。RESTAPI認証資格情報の定数時間比較AlexBrasetvik
==の代わりにhmac.compare_digest()を使用します。これは、タイミング攻撃に対して脆弱です。レプリケーションラグに基づいて同期ノードを選択するKrishnaSarabu
同期ノードのレプリケーションラグが構成されたしきい値を超え始めると、非同期に降格および/または他のノードに置き換えられる可能性があります。動作は
maximum_lag_on_syncnodeで制御されます。
Stability improvements
カスタムブートストラップを行うときに
hot_standby = offでpostgresを開始するIgorYanchenkoカスタムブートストラップ中に、Patroniはベースバックアップを復元し、Postgresを起動し、復旧が完了するまで待機しています。スタンバイの一部のPostgreSQLパラメーターは、プライマリより小さくすることはできません。新しい値WALから復元され、構成された値より大きい場合、Postgresはパニックして停止します。このような動作を回避するために、
hot_standbyモードを使用せずにカスタムブートストラップを実行します。必要なウォッチドッグが正常でない場合にユーザーに警告しますNicolasThauvin
ウォッチドッグデバイスが書き込み可能でない場合、または必須モードで欠落している場合、メンバーは昇格できません。この誤った構成を検索する場所をユーザーに示す警告を追加しました。
シングルユーザーモードのリカバリーの詳細度の向上AlexanderKukushkin
PostgreSQLが明確にシャットダウンされていないことにPatroniが気づいた場合、特定の場合、シングルユーザーモードでPostgresを起動することによりクラッシュリカバリーが実行されます。ディスク上の領域の不足などにより、復旧に失敗した場合がありますが、エラーは飲み込まれました。
python-consul2モジュールとの互換性を追加しました。AlexanderKukushkin、WilfriedRoset古き良き
python-consulは数年以来メンテナンスされていないため、誰かが新機能とバグ修正を備えたフォークを作成しました。patronictlを実行するときにbypass_api_serviceを使用しないでくださいAlexanderKukushkinK8sポッドが非
default名前空間で実行されている場合、kubernetesエンドポイントを照会するための十分な権限があるとは限りません。この場合、Patroniは警告を表示し、bypass_api_service設定を無視します。patronictlの場合、警告は少し迷惑でした。raft.data_dirが存在しない場合は作成するか、書き込み可能であることを確認します。MarkMercado使いやすさと使いやすさが向上します。
Bugfixes
一時停止中にリーダーロックを失った場合、再起動またはプロモーションを中断しないでくださいAlexanderKukushkin
一時停止中に、ロックなしでプライマリとしてpostgresを実行できます。
RESTAPIの
shutdown_request()に関する問題を修正しましたNicolasLimageSSL接続の処理を改善し、スレッドが開始されるまでハンドシェイクを遅延するために、Patroniは
HTTPServerのいくつかのメソッドをオーバーライドします。shutdown_request()メソッドは忘れられました。Zookeeper使用時のスリープ時間の問題を修正しました。AlexanderKukushkin
HAコードの実行の間に、パトローニが最大2倍長く眠っていた可能性がありました。
ブートストラップが失敗した後にデータディレクトリを移動するときの無効な
os.symlink()呼び出しを修正しました。AndrewL'Ecuyerブートストラップが失敗した場合、Patroniはデータディレクトリ、pg_wal、およびすべてのテーブルスペースの名前を変更しています。その後、シンボリックリンクを更新して、ファイルシステムの一貫性を保ちます。
srcおよびdst引数がスワップされたため、シンボリックリンクの作成は失敗していました。post_bootstrap()メソッドのバグを修正しました。AlexanderKukushkin
スーパーユーザーパスワードが構成されていない場合、Patroniは
post_initスクリプトの呼び出しに失敗し、したがって、ブートストラップ全体が失敗していました。スタンバイクラスターのpg_rewindに関する問題を修正しました。AlexanderKukushkin
スーパーユーザー名がPostgresと異なる場合、接続文字列にデータベース名が含まれていないため、スタンバイクラスターの
pg_rewindは障害が発生していました。Etcdv3での認証が明示的に失敗した場合にのみ終了しますAlexanderKukushkin
起動時に、PatroniはEtcdクラスタートポロジの検出を実行し、必要に応じて認証します。etcdサーバーの1つがアクセスできない場合があり、パトロニはこのサーバーで認証を実行しようとしましたが、次のノードで再試行する代わりに失敗しました。
空のリストを返すpsutilcmdline()でケースを処理します。AlexanderKukushkin
ゾンビプロセスはまだポストマスターの子ですが、cmdline()がありません。
PATRONI_KUBERNETES_USE_ENDPOINTS環境変数をブール値として扱いますAlexanderKukushkinそうしないと、環境を介して
kubernetes.use_endpointsを無効にすることが不可能でした。同時エンドポイント更新エラーの処理を改善しましたAlexanderKukushkin
Patroniは、現在のエンドポイントオブジェクトを明示的に照会し、現在のポッドがリーダーロックをまだ保持していることを確認して、更新を繰り返します。
バージョン2.0.1¶
リリース2020-10-01
New features
lessが利用できない場合は、patronictl edit-configのページャーとしてmoreを使用します。PavelGolubWindows、
more.comになります。それに加えて、requirements.txtではcdiffがydiffに変更されましたが、patronictlは互換性のために両方をサポートしています。raftbind_addrおよびpasswordのサポートを追加しましたAlexanderKukushkinraft.bind_addrは、NATの背後で実行されている場合に役立つ場合があります。raft.passwordは、トラフィック暗号化を有効にしますcryptographyモジュールが必要です。sslpassword接続パラメーターのサポートを追加しましたKostiantynNemchenkoConnectionパラメーターはPostgreSQL13で導入されました。
Stability improvements
一時停止中の動作を変更しましたAlexanderKukushkin
PGDATAディレクトリが見つからない/空の場合、Patroniはbootstrapメソッドを呼び出しません。Patroniは一時停止中にsysid不一致でも終了せず、警告のみをログに記録します。
Postgresがリカバリーでなく書き込みを受け入れて実行されていないが、sysidが初期化キーと一致しない場合、ノードは一時停止モードでリーダーキーを取得しようとしません。
クラッシュリカバリーを実行するときに
master_start_timeoutを適用するAlexanderKukushkinPostgresがリーダーノードでクラッシュした場合、PatroniはシングルユーザーモードでPostgresを起動することによりクラッシュリカバリーを実行します。クラッシュリカバリー中に、リーダーロックが更新されます。クラッシュリカバリーが
master_start_timeout秒以内に終了しなかった場合、Patroniは強制的に停止し、リーダーロックを解放します。urllib3要件からsecureエクストラを削除しましたAlexanderKukushkinそこに追加する唯一の理由は、Python2.7の
ipaddress依存関係でした。
Bugfixes
Kubernetes.update_leader()のバグを修正しました。AlexanderKukushkinリーダーオブジェクトの更新が失敗した場合、未処理の例外がプライマリの降格を妨げていました。
RAFTが使用されているときにハングする
patronictlを修正しました。AlexanderKukushkinPatroni構成で
patronictlを使用する場合、self_addrをpartner_addrsに追加する必要があります。get_guc_value()のバグを修正しました。AlexanderKukushkinPatroniはPostgreSQL12で
restore_commandの値の取得に失敗していたため、pg_rewindの欠落しているWALの取得は機能しませんでした。
バージョン2.0.0¶
2020-09-02リリース
このバージョンは、PostgreSQL13との互換性を強化し、複数の同期スタンバイのサポートを追加し、 pg_rewind の処理が大幅に向上し、純粋なRAFTEtcd、Consul、またはZookeeperなしでEtcdv3およびPatroniのサポートを追加し、オプションで呼び出しが可能です pre_promote フェンシングスクリプト。
PostgreSQL 13 support
PostgreSQL13+で
standby_leaderに昇格するときにon_reloadを起動しないでくださいAlexanderKukushkinstandby_leaderに昇格するときに、primary_conninfoを変更し、ロールを更新し、Postgresをリロードします。on_role_changeおよびon_reloadは実質的に互いに重複するため、Patroniはon_role_changeのみを呼び出します。gssencmodeおよびchannel_binding接続パラメーターのサポートを追加しましたAlexanderKukushkinPostgreSQL12では、
gssencmodeおよび13channel_binding接続パラメーターを導入し、postgresql.authenticationセクションで定義された場合に使用できるようになりました。wal_keep_segmentsからwal_keep_sizeへのハンドル名前変更AlexanderKukushkin構成に誤りがある場合13では
wal_keep_segments、古いバージョンではwal_keep_size、Patroniは自動的に構成を調整します。可能であれば、13で
--restore-target-walとともにpg_rewindを使用しますAlexanderKukushkinPostgreSQL13では、Patroniは
restore_commandが構成されているかどうかを確認し、pg_rewindにそれを使用するように指示します。
New features
[ベータ]純粋なRAFTでのパトローニのサポートを実装しましたAlexanderKukushkin
これにより、Etcd、Consul、Zookeeperなどのサードパーティに依存せずにPatroniを実行できます。HAの場合、3つのPatroniノード、またはPatroniで2つのノードと1つのノードで
patroni_raft_controllerを実行する必要があります。詳細については、patroni_raft_controllerを確認してください。[ベータ]gPRCゲートウェイを介したEtcdv3プロトコルのサポートを実装しました。AlexanderKukushkin
Etcd3.0は4年以上前にリリースされ、Etcd3.4ではデフォルトでv2が無効になっています。また、v2がEtcdから完全に削除される可能性があるため、PatroniにEtcdv3のサポートを実装しました。それを使用し始めるには、Patroni構成ファイルである
etcd3セクションを明示的に作成する必要があります。複数の同期スタンバイのサポートKrishnaSarabu
これにより、複数の同期レプリカでクラスターを実行できます。同期レプリカの最大数は、新しいパラメーター
synchronous_node_countによって制御されます。デフォルトで1に設定され、synchronous_modeがoffに設定されている場合、効果はありません。pre_promoteスクリプトを呼び出す可能性を追加しました。SergeyDudoladovコールバックとは異なり、
pre_promoteスクリプトは、リーダーロックを取得した後、Postgresを昇格する前に同期的に呼び出されます。スクリプトが失敗するか、ゼロ以外の終了コードで終了すると、現在のノードはリーダーロックを解放します。構成ディレクトリのサポートを追加しましたFlorisvanNee
ディレクトリ内のYAMLファイルは、アルファベット順にロードおよび適用されます。
PostgreSQLパラメーターの高度な検証AlexanderKukushkin
特定のパラメーターが現在のPostgreSQLバージョンでサポートされていない場合、またはその値が正しくない場合、Patroniはパラメーターを完全に削除するか、値を修正しようとします。
プロモート後の強制チェックポイントが完了したときにメインスレッドを起動しますAlexanderKukushkin
レプリカは、DCSのリーダーのメンバーキーを介してチェックポイントの指示を待機しています。キーは通常、HAループごとに1回のみ更新されます。メインスレッドをウェイクアップしないと、レプリカは必要よりも長く
loop_wait秒まで待機する必要があります。9.6+での
pg_stat_wal_recevierビューの使用AlexanderKukushkinビューには、
primary_conninfoおよびprimary_slot_nameの最新の値が含まれていますが、recovery.confの内容は古い可能性があります。Patroni構成ファイルでのIPv6アドレスの処理の改善MateuszKowalski
IPv6アドレスは角かっこで囲まれることになっていますが、パトローニはそれをプレーンに取得することを期待していました。両方の形式がサポートされるようになりました。
Consul
service_tags設定パラメーターを追加しました。RobertEdströmこれらは、ロードバランサーなどによる動的なサービス検出に役立ちます。
ZookeeperのSSLサポートを実装しましたKostiantynNemchenko
kazoo>=2.6.0が必要です。カスタムブートストラップ方法の
no_paramsオプションを実装しました。KostiantynNemchenkoこれにより、シェルスクリプトにラップせずに
wal-g、pgBackRestおよびその他のバックアップツールを呼び出すことができます。initに失敗した後にWALとテーブルスペースを移動するFeikeSteenbergen
reinitを実行したときに、PatroniはPGDATAだけでなく、シンボリックリンクされたWALディレクトリとテーブルスペースも既に削除していました。move_data_directory()メソッドは、同様のジョブ、つまりWALディレクトリとテーブルスペースの名前を変更し、PGDATAのシンボリックリンクを更新します。
Improved in pg_rewind support
タイムライン発散チェックの改善AlexanderKukushkin
レプリカ上の再生された場所がスイッチポイントの前にない場合、または元のプライマリのチェックポイントレコードの最後がスイッチポイントと同じである場合、巻き戻す必要はありません。チェックポイントレコードの最後を取得するために、
pg_waldumpを使用し、その出力を解析します。pg_rewindがそれについて文句を言っている場合は、不足しているWALを取得してみますAlexanderKukushkinpg_rewindに必要なWALセグメントがpg_walディレクトリに存在しないため、pg_rewindは分岐ポイントの前にチェックポイントの場所を見つけることができません。PostgreSQL13以降、pg_rewindは、不足しているWALを取得するためにrestore_commandを使用できます。古いPostgreSQLバージョンの場合、Patroniは失敗した巻き戻し試行のエラーを解析し、自分自身でrestore_commandを呼び出すことにより欠落しているWALを取得しようとします。スタンバイクラスターで新しいタイムラインを検出し、必要に応じて巻き戻し/再初期化をトリガーします。AlexanderKukushkin
standby_clusterは、プライマリクラスターから分離されているため、リーダー選挙とタイムラインのスイッチについてすぐには認識しません。ファクトを検出するために、standby_leaderは、pg_walの新しい履歴ファイルを定期的にチェックします。履歴ログ出力を短縮および美化しますAlexanderKukushkin
Patroniが
pg_rewindの必要性を判断しようとしている場合、プライマリから履歴ファイルの内容をログに書き込む可能性があります。履歴ファイルは、フェイルオーバー/スイッチオーバーのたびに成長し、最終的にはあまりにも多くの行を占有し始めますが、そのほとんどはあまり役に立ちません。生データを表示する代わりに、Patroniは、現在のレプリカタイムラインの前に3行と後に2行のみを表示します。
Improvements on K8s
kubernetespythonモジュールを削除します。AlexanderKukushkin公式のPythonkubernetesクライアントには、大量の自動生成コードが含まれているため、非常に重くなっています。PatroniはK8sAPIエンドポイントのごく一部のみを使用し、それらのサポートの実装は難しくありませんでした。
kubernetesサービスをバイパスできるようにしました。AlexanderKukushkinK8sで実行されている場合、Patroniは通常、
kubernetesサービスを介してK8sAPIと通信します。そのアドレスはKUBERNETES_SERVICE_HOST環境変数で公開されます。他のサービスと同様に、kubernetesサービスはkube-proxyによって処理され、これは、構成に応じて、トラフィックルーティングにユーザー空間プログラムまたはiptablesに依存します。中間コンポーネントをスキップし、K8sマスターノードに直接接続することにより、より良い再試行戦略を実装し、K8sマスターノードがアップグレードされたときにPostgresを降格するリスクを軽減できます。PatroniクラスターのすべてのポッドのHAループを同期しますAlexanderKukushkin
そうしないと、障害検出時間が
ttlからttl + loop_waitに増加しました。K8のサブセットアドレスに
referencesおよびnodenameを設定します。AlexanderKukushkin一部のロードバランサーはこの情報に依存しています。
update_leader()で考えられる競合状態を修正しました。AlexanderKukushkinパトロニの外部で発生するリーダー構成マップまたはエンドポイントの同時更新により、
update_leader()呼び出しが失敗する可能性があります。この場合、Patroniは、現在のノードがまだリーダーロックを所有していることを再確認し、更新を繰り返します。存在しない構成のパッチの適用を明示的に禁止しますAlexanderKukushkin
kubernetes以外のDCSでは、cluster.configがNoneであるため、PATCH呼び出しは例外で失敗していますが、Kubernetesでは、喜んで構成アノテーションを作成し、ブートストラップが完了した後にブートストラップ構成の書き込みを防止していました。pauseのバグを修正しました。AlexanderKukushkinリーダーキーが存在しない場合、レプリカは
primary_conninfoを削除し、Postgresを再起動していましたが、何もしないはずです。
Improvements in REST API
ワーカースレッドが開始されるまでTLSハンドシェイクを遅延します。AlexanderKukushkin、BenHarris
TLSハンドシェイクがAPIスレッドで実行され、クライアントサイドがデータを送信しなかった場合、APIスレッドはブロックされましたDoSの危険があります。
RESTAPIのクライアント証明書とは別に
basic-authをチェックしますAlexanderKukushkin以前は、クライアント証明書のみが検証されていました。2つのチェックを独立して実行することは、完全に有効なユースケースです。
OPTIONS要求のHTTPヘッダーの後にダブルCRLFを書き込みます。SergeyBurladyanHAProxyは単一の
CRLFで満足していましたが、Consulのヘルスチェックは、切断された接続と予期しないEOFについて不平を言いました。GET /clusterは、ZookeeperAlexanderKukushkinの古いメンバー情報を表示していましたエンドポイントは、Patroni内部クラスタービューを使用していました。Patroni自分自身の場合、それは問題を引き起こしませんでしたが、外部に公開される場合、最新の情報、特にレプリケーションラグを表示する必要があります。
スタンバイクラスターのヘルスチェックを修正しました。AlexanderKukushkin
マスターの
GET /standby-leaderとstandby_leaderのGET /masterは、誤って200で応答していました。DELETE /switchoverを実装しましたAlexanderKukushkinRESTAPI呼び出しは、スケジュールされたスイッチオーバーを削除します。
/readinessおよび/livenessエンドポイントを作成しましたAlexanderKukushkinこれらは、K8sサービスがラベルセレクターで使用される場合、サブセットアドレスから/"unhealthy"ポッドを削除するのに役立つ可能性があります。
GET /replicaおよびGET /asyncRESTAPIヘルスチェックの強化KrishnaSarabu、AlexanderKukushkinチェックはオプショナルキーワード
?lag=<max-lag>をサポートするようになり、遅延が指定された値より小さい場合にのみ200で応答します。この機能に依存する場合、リーダーのWAL位置に関する情報はloop_wait秒ごとにのみ更新されることに注意してください。RESTAPI応答でのユーザー定義のHTTPヘッダーのサポートを追加しましたYogeshSharma
この機能は、ブラウザから要求が行われた場合に役立つ場合があります。
Improvements in patronictl
patronictl pauseに存在しないリーダーを呼び出そうとしないでください。AlexanderKukushkinK8sでリーダーのないクラスターを一時停止しているときに、
patronictlは、メンバー/"None/"にアクセスできないという警告を表示していました。メンバー
conn_urlが見つからない場合の処理AlexanderKukushkinK8sでは、Patroniがまだ実行されていないため、ポッドに必要なアノテーションがない可能性があります。
patronictlが失敗していました。ASCIIクラスタートポロジを印刷する機能を追加しました。MaximFedotov、AlexanderKukushkin
カスケードレプリケーションを使用してクラスターの概要を取得するのに非常に役立ちます。
patronictl flush switchoverの実装AlexanderKukushkinそれまでは
patronictl flushは、スケジュールされた再起動のキャンセルのみをサポートしていました。
Bugfixes
既存のPGDATAを使用したクラスターのブートストラップ中の属性エラーKrishnaSarabu
/historyキーを作成/更新しようとしたとき、PatroniはDCSでまだ作成されていないClusterConfigオブジェクトにアクセスしていました。Consulの例外処理の向上AlexanderKukushkin
touch_member()メソッドの未処理の例外により、Patroniプロセス全体がクラッシュしました。post_initスクリプトにsynchronous_commit=localを適用するAlexanderKukushkinPatroniはユーザー
replication、rewindを作成するときに既にそれを行っていましたが、post_initの場合にそれを欠いていたのは見落としでした。その結果、スクリプトが自分自身で内部的に実行していない場合、synchronous_modeのブートストラップは完了できませんでした。Consulプールマネージャーponvenkatesの
maxsizeの増加デフォルトの
size=1では、いくつかの警告が生成されました。パトローニはPostgresが実行されていると誤って報告していましたAlexanderKukushkin
たとえば、Postgresがディスク不足エラーのためにクラッシュした場合、状態は更新されませんでした。
欠損値または空の値の代わりに
*をpgpassに入れますAlexanderKukushkinたとえば
standby_cluster.portが指定されていない場合、pgpassファイルは誤って生成されました。特殊文字を使用してリーダーノードでの物理レプリケーションスロットの作成をスキップするKrishnaSarabu
Patroniは、名前に'-'などの特殊文字が含まれている場合、リーダーノードの休止スロット
slots定義時を作成しているようですたとえば、/"abc-us-1/"の場合。カスタムブートストラップで存在しない
pg_hba.confの削除を回避しますKrishnaSarabuカスタムブートストラップ後に
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は効果がありません。プライマリの名前で永続的な物理スロットを作成しないでください。AlexanderKukushkin
レプリカがダウンしているときにプライマリがWALセグメントをリサイクルするのは一般的な問題です。これで、固定数のノードと名前が変更されない静的クラスターに適したソリューションができました。
slotsのすべてのノードの名前をリストする必要があるため、ノードがダウンしているDCSに登録されていないときにプライマリがスロットを削除しないようにします。ConfigValidatorの最初のドラフトIgorYanchenko
Patroni構成を検証するためには、
patroni --validate-config patroni.yamlを使用します。タイムライン履歴の最大長を構成する機能KrishnaSarabu
Patroniは、フェイルオーバー/スイッチオーバーの履歴をDCSの
/historyキーに書き込みます。時間の経過とともにこのキーのサイズは大きくなりますが、ほとんどの場合、最後の数行のみが関心があります。max_timelines_historyパラメーターを使用すると、DCSに保持するタイムライン履歴項目の最大数を指定できます。Kazoo2.7.0互換性DanyalProut
Kazooの一部の非パブリックメソッドはシグネチャを変更しましたが、パトローニはそれらに依存していました。
Improvements in patronictl
メンバータグを表示するコスティアンティン・ネムチェンコ、アレクサンダー・ククシュキン
タグはノードごとに個別に構成され、それらの概要を取得する簡単な方法はありませんでした
メンバーの成果の向上AlexanderKukushkin
冗長クラスター名はすべての行に表示され、テーブルヘッダーにのみ表示されます。
$ patronictl list
+ Cluster: batman (6813309862653668387) +---------+----+-----------+---------------------+
| Member | Host | Role | State | TL | Lag in MB | Tags |
+-------------+----------------+--------+---------+----+-----------+---------------------+
| postgresql0 | 127.0.0.1:5432 | Leader | running | 3 | | clonefrom: true |
| | | | | | | noloadbalance: true |
| | | | | | | nosync: true |
+-------------+----------------+--------+---------+----+-----------+---------------------+
| postgresql1 | 127.0.0.1:5433 | | running | 3 | 0.0 | |
+-------------+----------------+--------+---------+----+-----------+---------------------+
構成ファイルが明示的に指定されているが見つからない場合に失敗するKaarelMoppel
以前は
patronictlはDEBUGメッセージのみを報告していました。初期化されていないK8sポッドが保護者を破壊する問題を解決しました。AlexanderKukushkin
Patroniは、K8の特定のポッドアノテーションに依存しています。Patroniポッドのいずれかが停止または起動している場合、有効なアノテーションはまだなく、
patronictlは例外で失敗していました。
Stability improvements
K8sAPIサーバーへのLIST呼び出しが失敗した場合に1秒のバックオフを適用するAlexanderKukushkin
これは主に、ログの氾濫を回避するために必要ですが、メインスレッドのスタベーションを防ぐことにも役立ちます。
retry-afterHTTPヘッダーがK8sAPIから返された場合に再試行します。AlexanderKukushkinK8sAPIサーバーが要求で圧倒されている場合、再試行を求める場合があります。
ポストマスターから
KUBERNETES_環境をスクラブするFeikeSteenbergenKUBERNETES_環境変数はPostgreSQLには必要ありませんが、ポストマスターに公開すると、バックエンドおよび通常のデータベースユーザーたとえばpl/perlを使用して公開されます。再初期化時にテーブルスペースをクリーンアップするKrishnaSarabu
再初期化中に、Patroniは
PGDATAのみを削除し、ユーザー定義のテーブルスペースディレクトリを残していました。これにより、Patroniが再初期化でループする原因となります。この問題の以前の回避策は、PGDATAスクリプトを実装することでした。プロモートが発生した後に
CHECKPOINTを明示的に実行するようにしましたAlexanderKukushkin新しいプライマリが
pg_rewindで使用できるようになるまでの時間を短縮するのに役立ちます。etcdメンバーのスマートリフレッシュAlexanderKukushkin
PatroniがEtcdクラスターのすべてのメンバーで要求の実行に失敗した場合、Patroniは、次回再試行する前にIP/ホストの変更が
AまたはSRVレコードを再チェックします。pg_controldataの欠損値をスキップする(FeikeSteenbergen)PGDATAと一致しないバージョンのバイナリを使用しようとすると、値が欠落します。PatroniはとにかくPostgresを起動しようとします、そしてPostgresはメジャーバージョンが一致しないと不平を言い、エラーで中断します。
Bugfixes
必要に応じてConsulのSSL検証を無効にします。JulienRiou
urllib3の特定のバージョンから、SSL検証を効果的に無効にするには、cert_reqsを明示的にssl.CERT_NONEに設定する必要があります。HAループのすべてのサイクルでレプリケーション接続を開くことを避けます。AlexanderKukushkin
回帰は1.6.4で導入されました。
障害が発生したプライマリで
on_role_changeコールバックを呼び出しますAlexanderKukushkin特定の場合では、仮想IPが古いプライマリに接続されたままになる場合があります。回帰は1.4.5で導入されました。
pg_rewindが成功した後にpostgresが開始された場合、リワインド状態をリセットするAlexanderKukushkin
このバグの結果、Patroniは一時停止モードでpostgresを手動でシャットダウンして起動していました。
recovery.confをチェックするときにrecovery_min_apply_delayをmsに変換します12より前のPostgreSQLで
recovery_min_apply_delayが構成されている場合、Patroniはレプリカを無期限に再起動していました。PyInstallerの互換性AlexanderKukushkin
PyInstallerは、Pythonアプリケーションをスタンドアロンの実行可能ファイルにフリーズ(パッケージ)します。
multiprocessingのforkではなくspawnメソッドに切り替えたときに、互換性が壊れました。
バージョン1.6.4¶
2020-01-27リリース
New features
patronictl reinitの--waitオプションを実装しましたIgorYanchenko--waitオプションが使用される場合、Patronictlはreinitが完了するまで待機します。Windowsサポートのさらなる改善IgorYanchenko、AlexanderKukushkin
統合テストに使用されるすべてのシェルスクリプトはPythonで書き換えられます
pg_ctl killは、非posixシステムでpostgresを停止するために使用されますUnixドメインソケットを使用しないでください
Stability improvements
unix_socket_directoriesおよびstats_temp_directoryが存在することを確認しますIgorYanchenkoPatroniとPostgresの起動時に、
unix_socket_directoriesおよびstats_temp_directoryが存在することを確認するか、それらを作成してみてください。Patroniは、作成に失敗すると終了します。postgresql.pgpassがパトローニが書き込みアクセスがある場所にあることを確認します。IgorYanchenko書き込みアクセスがない場合、Patroniは例外で終了します。
デフォルトでConsul
serfHealthチェックを無効にしますKostiantynNemchenkoネットワークに小さな問題が発生した場合でも、
serfHealthの障害は、ノードに関連付けられているすべてのセッションの無効化につながります。したがって、リーダーキーはttlよりもはるかに早く失われ、レプリカの不要な再起動と、場合によってはプライマリの降格が発生します。K8sAPIへの接続のTCPキープアライブを構成するAlexanderKukushkin
TTL秒後にソケットから何も取得しない場合、デッドであると考えられます。
ユーザー作成時にパスワードのロギングを回避するAlexanderKukushkin
パスワードが拒否されるか、ロギングが冗長に構成されているか、まったく構成されていない場合、パスワードがpostgresログに書き込まれる可能性があります。それを回避するために、Patroniはユーザーを作成/更新しようとする前に、
log_statement、log_min_duration_statement、およびlog_min_error_statementをいくつかの安全な値に変更します。
Bugfixes
カスケードレプリカで
standby_cluster構成のrestore_commandを使用するAlexanderKukushkinstandby_leaderは、機能が存在する最初から既にそれを行っていました。レプリカで同じことをしないと、スタンバイリーダーに追いつけない可能性があります。スタンバイクラスターによって報告された更新タイムラインAlexanderKukushkin
タイムラインスイッチの場合、スタンバイクラスターはプライマリから正しく複製していましたが、
patronictlは古いタイムラインを報告していました。custom_confで特定のリカバリパラメーターを定義できるようにしました。AlexanderKukushkin
レプリカでリカバリパラメーターの検証を行うとき、パトロニは、パトロニ構成で定義されていないが、
postgresql.auto.confまたはpostgresql.conf以外のファイルで定義されている場合、archive_cleanup_command、promote_trigger_file、recovery_end_command、recovery_min_apply_delay、およびrestore_commandをスキップします。名前にピリオドを含むpostgresqlパラメーターの処理を改善しましたAlexanderKukushkin
このようなパラメーターは、ユニットが必ずしも文字列ではない拡張機能によって定義できます。値の変更には、再起動が必要になる場合がありますたとえば
pg_stat_statements.max。シャットダウン中の例外処理を改善しました。AlexanderKukushkin
シャットダウン中に、PatroniはDCSのステータスを更新しようとします。DCSにアクセスできない場合、例外が発生する場合があります。例外処理の欠如が、ロガースレッドの停止を妨げていました。
バージョン1.6.3¶
2019-12-05リリース
Bugfixes
pg_rewindの実行時にパスワードを公開しないでくださいAlexanderKukushkin#1301 _にバグが導入されました
postgresql.authentication〜pg_basebackupおよびカスタムレプリカ作成方法で指定された接続パラメーターを適用します。AlexanderKukushkin彼らはURLのような接続文字列に依存しているため、パラメーターは適用されません。
バージョン1.6.2¶
2019-12-05リリース
New features
patroni --versionを実装しましたイゴール・ヤンチェンコPatroniの現在のバージョンを出力して終了します。
すべてのhttp要求の
user-agenthttpヘッダーを設定しますAlexanderKukushkinPatroniは、httpプロトコルを介してConsul、Etcd、およびKubernetesAPIと通信しています。特別に作られた
user-agent例Patroni/1.6.2 Python/3.6.8 Linuxがあると、デバッグとモニタリングに役立つ場合があります。例外トレースバックのログレベルを構成できるようにしますIgorYanchenko
log.traceback_level=DEBUGを設定すると、トレースバックはlog.level=DEBUGの場合にのみ可視されます。デフォルトの動作は同じままです。
Stability improvements
構成ファイルに必要なモジュールを検索するときに、すべてのDCSモジュールのインポートを回避します。AlexanderKukushkin
たとえば、ファイルだけが必要な場合、Etcd、Consul、およびKubernetesのモジュールをインポートする必要はありません。zookeeper。メモリ使用量を削減し、INFOメッセージ
Failed to import smthの問題を解決します。明示的な要件からpython
requestsモジュールを削除しましたAlexanderKukushkinこれは重要な目的には使用されませんでしたが、
urllib3の新しいバージョンがリリースされると多くの問題を発生させました。YAML配列の代わりにコンマ区切りの文字列として書き込まれた
etcd.hostsの処理を改善しました。IgorYanchenko以前は、
host1:port1, host2:port2フォーマットで書き込まれると失敗していましたコンマの後のスペース文字。
Usability improvements
patronictlの空のリストからメンバーを選択することをユーザーに強制しないでくださいIgorYanchenkoユーザーが間違ったクラスター名を指定した場合、空のリストからメンバーを選択するように求めるのではなく、例外を発生させます。
RESTAPIがバインドできない場合にエラーメッセージをもっと役立つようにしましたIgorYanchenko
経験の浅いユーザーにとって、Pythonスタックトレースから何が悪いのかを理解するのは難しい場合があります。
Bugfixes
wal_buffersの計算を修正しました。AlexanderKukushkinPostgreSQL11では、基本単位が8kBブロックからバイトに変更されました。
PostgreSQL10+でのみ
primary_conninfoでpassfileを使用するAlexanderKukushkin古いバージョンでは、最新バージョンの
libpqがインストールされていない限り、passfileが動作する保証はありません。
バージョン1.6.1¶
2019-11-15リリース
New features
PATRONICTL_CONFIG_FILE環境変数msvechlaを追加しました環境から
patronictlの--config-file引数を構成できます。patronictl historyの実装AlexanderKukushkinフェイルオーバー/スイッチオーバーの履歴を表示します。
pg_rewindを実行するときにPGOPTIONSで-c statement_timeout=0を渡すようにしました。AlexanderKukushkinサーバー上の
statement_timeoutが小さな値に設定され、pg_rewindによって実行されたステートメントのいずれかがキャンセルされた場合から保護します。PostgreSQL構成のより低い値を許可しますSoulou
Patroniは、一部のPostgreSQL構成パラメーターを一部のハードコードされた値より小さく設定することを許可していませんでした。最小許可値が小さくなりました、デフォルト値は変更されていません。
証明書ベースの認証を許可しますJonathanS.Katz
この機能は、スーパーユーザー、レプリケーション、リワインドアカウントの証明書ベースの認証を有効にし、ユーザーは接続する
sslmodeを指定できます。パスワードの代わりに
primary_conninfoでpassfileを使用します。AlexanderKukushkinpostgresql.confでの
600権限の設定を回避できます構成の変更に関係なく
pg_ctl reloadを実行しますAlexanderKukushkin一部の構成ファイルはPatroniによって制御されていない可能性があります。誰かがRESTAPIを介してまたはPatroniプロセスにSIGHUPを送信してリロードを実行している場合、通常はPostgresもリロードされると予想されます。以前は、Patroni構成の
postgresqlセクションに変更がない場合、これは発生しませんでした。primary_conninfoだけでなくすべての復旧パラメーターを比較しますAlexanderKukushkin以前は、
check_recovery_conf()メソッドはprimary_conninfoが変更されたかどうかをチェックするだけで、他のすべてのリカバリパラメーターは考慮されませんでした。再起動せずにいくつかの回復パラメーターを適用できるようにします。AlexanderKukushkin
PostgreSQL12から、次のリカバリパラメーターは、再起動せずに変更できます。
archive_cleanup_command、promote_trigger_file、recovery_end_command、およびrecovery_min_apply_delay。将来のPostgresリリースでは、このリストは拡張され、Patroniはそれを自動的にサポートします。use_slotsをオンラインで変更できるようにしましたAlexanderKukushkin以前は、Patroniを再起動し、スロットを手動で削除する必要がありました。
Postgresの起動時に
PATRONI_接頭辞の環境変数のみを削除するCodyCoonsさまざまな外部データラッパーの実行に関する多くの問題を解決します。
Stability improvements
K8sAPIを使用する場合はLIST+WATCHを使用します。AlexanderKukushkin
これにより、オブジェクトの変更ポッド、エンドポイント/構成マップを効率的に受信でき、K8sマスターノードのストレスが軽減されます。
ブートストラップ中にPGDATAが空でない場合のワークフローを改善しました。AlexanderKukushkin
initdbソースコードによると、lost+foundおよび.dotfilesのみが存在する場合、PGDATAが空であると見なす場合があります。今、パトローニも同じことをしています。PGDATAがたまたま空でなく、同時にpg_controldataの観点から有効でない場合、Patroniは文句を言って終了します。すべてのHAループで高価な
os.listdir()の呼び出しを回避しますAlexanderKukushkinシステムがIOストレス下にある場合、
os.listdir()の実行に数秒または数分かかる場合があり、パトロニのHAループに悪影響を与える可能性があります。これにより、更新がないためにリーダーキーがDCSから消失する可能性もあります。PGDATAが空ではないことを確認するための、より適切で安価な方法があります。次に、PGDATAにglobal/pg_controlファイルの存在を確認します。ログインフラストラクチャの一部の改善AlexanderKukushkin
以前は、ロギングスレッドが
daemonスレッドであったため、シャットダウン時に最後の数行のログ行が失われる可能性がありました。Python3.4+で
spawnマルチプロセッシングスタートメソッドを使用するMaciejKowalczykPythonでは、スレッドとマルチプロセッシングがうまく混合しないことが知られています issue _。デフォルトの方法
forkからspawnへの切り替えが推奨される回避策です。そうしないと、Postgresが実際に起動して実行されているにもかかわらず、Postmaster開始プロセスがハングし、Patroniが無期限にINFO: restarting after failure in progressを報告する可能性があります。
Improvements in REST API
RESTAPIでクライアント証明書を確認できるようにしますAlexanderKukushkin
verify_clientがrequiredに設定されている場合、PatroniはすべてのRESTAPI呼び出しのクライアント証明書をチェックします。optionalに設定されている場合、クライアント証明書は、安全でないすべてのRESTAPIエンドポイントがチェックされます。Postgresが実行されていない場合、
GET /replicaヘルスチェック要求の応答コード503を返します。AlexanderAnikinPostgresは、クライアント接続の受け入れを開始する前の復旧にかなりの時間を費やす場合があります。
/historyおよび/clusterエンドポイントを実装しますAlexanderKukushkin/historyエンドポイントは、DCSのhistoryキーのコンテンツを表示します。/clusterエンドポイントは、すべてのクラスターメンバーと、保留中およびスケジュールされた再起動またはスイッチオーバーなどのサービス情報を表示します。
Improvements in Etcd support
EtcdRAFT内部エラーでの再試行AlexanderKukushkin
Etcdノードはシャットダウンされるときに、
response code=300, data='etcdserver: server stopped'を送信します。これが、Patroniがプライマリを降格する原因となっていました。Etcd要求の再試行を早めにあきらめないでくださいAlexanderKukushkin
いくつかのネットワーク問題が発生すると、パトロニはすぐにEtcdノードのリストを使い果たし、
retry_timeout全体を使用せずに断念しました。その結果、プライマリが降格する可能性がありました。
Bugfixes
pg_rewindユーザーに実行権限を付与するときにsynchronous_commitを無効にするkremiussynchronous_mode_strict: trueでブートストラップが行われる場合、`GRANTEXECUTE`ステートメントは、使用可能な非同期ノードのため無期限に待機していました。Python3.7のメモリリークを修正しました。AlexanderKukushkin
Patroniは
ThreadingMixInを使用してRESTAPI要求を処理し、Python3.7はデフォルトで非デーモン以外のすべての要求に対してスレッドを生成します。非同期アクションの競合状態を修正しました。AlexanderKukushkin
停止したPostgresを復旧しようとすることにより、
patronictl reinit --forceが上書きされる可能性がありました。これは、ベースバックアップの実行中にパトローニがPostgresを起動しようとした場合に発生しました。postmaster_start_time()メソッドの競合状態を修正しました。AlexanderKukushkinメソッドがRESTAPIスレッドから実行される場合、別のカーソルオブジェクトを作成する必要があります。
大文字を含む名前を持つ同期スタンバイを昇格させない問題を修正しました。AlexanderKukushkin
Postgresは、
application_nameとsynchronous_standby_namesの値を比較するときに同じことをしていたため、名前を小文字に変換しました。新しいものを開始する前に、コールバックプロセスとともにすべての子をkillしますAlexanderKukushkin
そうしないと、bashでコールバックを実装することが困難になり、最終的に2つのコールバックが同時に実行される状況が発生する可能性があります。
'startfailed'問題を修正しましたAlexanderKukushkin
特定の条件下では、Postgresが起動して実行されているにもかかわらず、Postgresの状態が「startfailed」に設定される場合があります。
バージョン1.6.0¶
2019-08-05リリース
このバージョンでは、PostgreSQL12との互換性を追加し、PostgreSQL11以降でスーパーユーザーなしでpg_rewindを実行できるようにし、IPv6サポートを有効にします。
New features
Psycopg2は要件から削除されたため、個別にインストールする必要があります。AlexanderKukushkin
2.8.0から
psycopg2は、ファイルシステム上の同じ場所に同時にインストールできる2つの異なるパッケージpsycopg2、およびpsycopg2-binaryに分割されました。依存関係地獄の問題を減らすために、ユーザーがインストール方法を選択できるようにしました。使用可能なオプションがいくつかあります。psycopg2を参照してください。PostgreSQL12との互換性AlexanderKukushkin
PostgreSQL12からは
recovery.confはなくなり、以前のすべてのリカバリパラメーターはrecovery.confに変換されます。ALTER SYSTEM SET primary_conninfoまたは同様のものから保護するために、Patroniはpostgresql.auto.confを解析し、そこからすべてのスタンバイおよびリカバリーパラメーターを削除します。Patroni構成は下位互換性を維持します。たとえば、restore_commandはGUCであるにもかかわらず、postgresql.recovery_conf.restore_commandセクションで指定でき、PatroniはPostgreSQL12のpostgresql.confにそれを書き込みます。PostgreSQL11以降でスーパーユーザーなしで
pg_rewindを使用できるようにしましたAlexanderKukushkinこの機能を使用する場合は、Patroni構成ファイルの
postgresql.authentication.rewindセクションでusernameおよびpasswordを定義してください。既存のクラスターの場合、ユーザーを手動で作成し、いくつかの機能でGRANT EXECUTE権限を作成する必要があります。詳細については、PostgreSQLusername_をご覧ください。レプリカで実際の
primary_conninfo値と目的のprimary_conninfo値をスマートに比較しますAlexanderKukushkin既存のプライマリスタンバイクラスターをパトロニによって管理されているクラスターに変換する場合、レプリカのリスタートを回避するのに役立つ場合があります
IPv6のサポートAlexanderKukushkin
2つの大きな問題がありました。PatroniRESTAPIサービスは
0.0.0.0でのみリッスンしており、api_urlおよびconn_urlで使用されるIPv6IPアドレスは適切に引用されませんでした。KerberosのサポートAjithVilas、AlexanderKukushkin
Patroni構成ファイルでパスワードを定義する代わりに、Postgresノード間でKerberos認証を使用することが可能になります
Manage
pg_ident.confAlexanderKukushkinこの機能は
pg_hba.confと同様に動作します。postgresql.pg_identが構成ファイルまたはDCSで定義されている場合、Patroniはその値をpg_ident.confに書き込みますが、postgresql.parameters.ident_fileが定義されている場合、Patroniはpg_identが外部から管理されていると想定し、ファイルを更新しません。
Improvements in REST API
/healthエンドポイントを追加しましたWilfredRosetPostgreSQLが実行されている場合にのみHTTPステータスコードを結果ます
/read-onlyおよび/read-writeエンドポイントを追加しました。JulienRiou/read-onlyエンドポイントは、レプリカとプライマリ全体で読み取りバランスのとれた読み取りを有効にします。/read-writeエンドポイントは、/primary、/leader、および/masterのエイリアスです。SSLContextを使用してRESTAPIソケットをラップしました。JulienRioussl.wrap_socket()の使用は非推奨であり、TLS1.1のような間もなく非推奨になるプロトコルはまだ許可されていました。
Logging improvements
2段階ロギングAlexanderKukushkin
すべてのログメッセージは、最初にメモリ内のキューに書き込まれ、後で別のスレッドからstderrまたはファイルに非同期にフラッシュされます。最大キューサイズは制限されています構成可能。制限に到達すると、Patroniはログを失い始めますが、これはHAループをブロックするよりはまだ良いです。
レイテンシーとともにGET/OPTIONSAPI呼び出しのデバッグログを有効にします。JanTomsa
HAProxy、Consul、またはどのノードがプライマリ/レプリカであるかを決定するその他のツールによって実行されるヘルスチェックのデバッグに役立ちます。
再試行でキャッチされた例外をログに記録しますDanielKucera
試行回数またはタイムアウトに到達したときの最後の例外をログに記録します。DCSへの通信が失敗した場合に、いくつかの問題のデバッグに役立つことを願っています。
Improvements in patronictl
スケジュールされたスイッチオーバーと再起動のためのダイアログの強化RafiaSabih
以前のダイアログはスケジュールされたアクションを考慮していないため、誤解を招くものでした。
構成ファイルが存在するかどうかを確認しますWilfredRoset
指定されたファイル名が存在しない場合、サイレントに無視する代わりに、構成ファイルについて詳しく説明します誤解を招く可能性があります。
EDITORのフォールバック値を追加しましたウィルフリード・ロゼットEDITOR環境変数が定義されていない場合、patronictl edit-configは`PatroniCtlException`で失敗していました。新しい戦略は、editorおよびviを試すことです。これは、ほとんどのシステムで利用できるはずです。
Improvements in Consul support
Consul一貫性モードを指定できるようにしました。JanTomsa
一貫性モード here _の詳細については、こちらをご覧ください。
SIGHUPでConsul構成をリロードキャメロンダニエルクセラ、アレクサンダーククシュキン
これは、誰かが
tokenの値を変更する場合に特に役立ちます。
Bugfixes
スイッチオーバー/フェイルオーバーのコーナーケースを修正しました。SharoonThomas
RESTAPIにアクセスできず、フォールバックとしてDCSを使用している場合、変数
scheduled_atは未定義になる場合があります。カスタムブートストラップ中に
pg_hba.confのローカルホストへのオープントラストAlexanderKukushkin以前はunix_socketのみにオープンされていたため、多くのエラーが発生していました
FATAL: no pg_hba.conf entry for replication connection from host /"127.0.0.1/", user /"replicator/"元のリーダーがリードしている場合でも、同期ノードを正常であると考えますAlexanderKukushkin
プライマリがDCSへのアクセスを失うと、Postgresを読み取り専用で再起動しますが、他のノードがRESTAPIを介して古いプライマリにアクセスできる場合があります。古いプライマリが同期スタンバイより先にWAL位置を報告していたため、このような状況により、同期スタンバイが昇格しませんでした。
スタンバイクラスターのバグ修正AlexanderKukushkin
standby_leaderがアクセスできない場合に、スタンバイクラスターでレプリカをブートストラップできるようにし、その他のいくつかのマイナー修正。
バージョン1.5.6¶
2019-08-03リリース
New features
プロキシのセットを介したetcdクラスターでの作業のサポートAlexanderKukushkin
etcdクラスターに直接アクセスできず、プロキシのセットを介してアクセスできない場合があります。この場合、Patroniはetcdトポロジ検出を実行せず、プロキシホストを介したラウンドロビンだけを実行します。動作は`etcd.use_proxies`によって制御されます。
ノードのロールが変更されたときのコールバック動作が変更されましたAlexanderKukushkin
ロールが`master`または`standby_leader`から`replica`に、または`replica`から`standby_leader`に変更された場合、`on_restart`コールバックは、`on_role_change`コールバックを優先して呼び出されません。
postgresの起動方法を変更しますAlexanderKukushkin
自分自身と`multiprocessing.Pipe`を実行する代わりに`multiprocessing.Process`を使用して、ポストマスターpidをPatroniプロセスに送信します。その前はパイプを使用していましたが、標準入力がクローズされた状態でポストマスタープロセスを残していました。
Bug fixes
スタンバイリーダーのRESTAPIから返されたロールを修正しましたAlexanderKukushkin
`standby_leader`の代わりに`replica`を誤って返していました
Killできなかった場合はコールバック終了を待機しますJulienTachoires
Patroniには、新しいコールバックをキャンセルしたもの`sudo`の下で実行されているコールバックスクリプトを終了するための十分な特権がありません。実行中のスクリプトを強制終了できなかった場合、Patroniは完了するまで待機して、次のコールバックを実行します。
dcs.get_clusterメソッドにかかるロック時間を削減します。AlexanderKukushkin
ロックが保持されているため、DCSの遅延がRESTAPIヘルスチェックに影響を与え、誤検出を発生させていました。
pg_wal/`pg_xlog`がシンボリックリンクの場合、PGDATAのクリーニングを改善しました。JulienTachoires
この場合、Patroniはターゲットディレクトリからファイルを明示的に削除します。
os.path.relpathの不要な使用を削除します。AntsAasma
それは作業ディレクトリを解決できるか、後でファイルシステムからリンクが解除されるディレクトリでPatroniが起動された場合に何が失敗するかによって異なります。
Etcdとの通信時にsslバージョンを強制しないでくださいAlexanderKukushkin
何らかの不明な理由で、debianおよびubuntuのpython3-etcdはパッケージの最新バージョンに基づいていないため、Etcdv3でサポートされていないTLSv1を適用します。Patroni側でこの問題を解決しました。
バージョン1.5.5¶
2019-02-15リリース
このバージョンでは、以前のマスターの自動再初期化の可能性を導入し、patroniclリスト出力を改善し、多くのバグを修正します。
New features
PATRONI_ETCD_PROTOCOL、PATRONI_ETCD_USERNAME、および`PATRONI_ETCD_PASSWORD`環境変数のサポートを追加します。ÉtienneM
以前は、構成ファイルまたは`PATRONI_ETCD_URL`の一部としてのみそれらを構成することが可能でしたが、これは必ずしも便利ではありません。
元マスターを自動的に再初期化できるようにしました。AlexanderKukushkin
pg_rewindが無効になっているか、使用できない場合、タイムラインが分岐しているため、元のマスターは新しいレプリカとして起動できない場合があります。この場合、それを修正する唯一の方法は、データディレクトリをワイプし、再初期化することです。この動作は、`postgresql.remove_data_directory_on_diverged_timelines`を設定することにより変更できます。設定されると、Patroniはデータディレクトリをワイプし、元のマスターを自動的に再初期化します。
patroniclリストのタイムラインに関する情報を表示するAlexanderKukushkin
古いレプリカの検出に役立ちます。それに加えて、ポート値がデフォルトでない場合、または同じホストで実行されている複数のメンバーが存在する場合、Host`は:{port}'をインクルードします。
$SCOPE-configエンドポイントに関連付けられたヘッドレスサービスを作成しますAlexanderKukushkin
/"config/"エンドポイントは、クラスター全体のPatroniおよびPostgresの構成、履歴ファイル、そして最後に最も重要な`initialize`キーを保持します。Kubernetesマスターノードが再起動またはアップグレードされると、サービスなしでエンドポイントが削除されます。headlessサービスは削除されません。
Bug fixes
リーダーウォッチブロッキングクエリの読み取りタイムアウトを調整しますAlexanderKukushkin
Consulのドキュメントによると、実際の応答タイムアウトは、指定された最大待機時間に追加される少量のランダムな追加待機時間だけ増加して、同時要求のウェイクアップ時間を分散します。`wait/16`の追加時間を最大期間に加算します。私たちの場合、どちらが大きいかに応じて、`wait/15`または1秒を追加します。
レプリケーションプロトコルを介してpostgresに接続するときは、常にreplication=1を使用します。AlexanderKukushkin
Postgres10以降、pg_hba.confのdatabase=replicationを含む行は、パラメーターreplication=databaseを使用した接続を受け入れません。
wal専用スタンバイクラスターのrecovery.confにprimary_conninfoを書き込まないでくださいAlexanderKukushkin
`standby_cluster`構成で`host`も`port`も定義されていないにもかかわらず、Patroniは`primary_conninfo`を`recovery.conf`に配置していましたが、これは役に立たず、多くのエラーを生成していました。
バージョン1.5.4¶
リリース2019-01-15
このバージョンは、柔軟なロギングを実装し、多くのバグを修正します。
New features
伐採インフラの改善アレクサンダー・ククシュキン、ルーカス・キャピストラント、アレクサンダー・アニキン
ロギング構成は、環境変数からだけでなく、Patroni構成ファイルから構成できます。構成を更新してリロードを実行するか、PatroniプロセスにSIGHUPを送信することにより、ランタイムにロギング構成を変更できます。デフォルトでは、Patroniはログをstderrに書き込みますが、ログをファイルに直接書き込み、特定のサイズに達したときにローテーションすることが可能になりました。それに加えて、カスタム日付形式のサポートと、各Pythonモジュールのログレベルを微調整する可能性が追加されました。
リーダー選挙中に現在のタイムラインを考慮できるようにしますアレクサンダー・ククシュキン
ノードは、現在最新の既知のタイムラインにないにもかかわらず、自分自身を最も正常なノードと考えている場合があります。場合によっては、このようなノードのプロモーションを回避したい場合があります。これは、`check_timeline`パラメータを`true`に設定することにより実現できますデフォルトの動作は変更されません。
スーパーユーザーの資格情報の要件の緩和
Libpqでは、ユーザー名もパスワードも明示的に指定せずに接続を開くことができます。状況に応じて、pgpassファイルまたはpg_hba.confの信頼できる認証方法に依存します。pg_rewindもlibpqを使用しているため、同じように動作します。
環境変数を介してConsulServiceの登録とチェック間隔を構成する機能を実装しましたAlexanderKukushkin
Consulでのサービスの登録は1.5.0で追加されましたが、これまではpatroni.yamlを介してのみ有効にすることができました。
Stability Improvements
カスタムブートストラップ中にarchive_modeをoffに設定しますAlexanderKukushkin
クラスターが完全に機能するまで、walsと履歴ファイルのアーカイブは避けたいです。カスタムブートストラップにpg_upgradeが関係する場合、これは非常に役立ちます。
起動時にグローバル構成をロードするときに5秒のバックオフを適用しますAlexanderKukushkin
Patroniが起動したばかりのときにDCSのハンマリングを回避するのに役立ちます。
シャットダウン時に生成されるエラーメッセージの量を削減します。AlexanderKukushkin
それらは無害ですが、かなり迷惑で、時には怖かったです。
作成時にrecovery.confのrwパーマを明示的に保護しますLucasCapistrant
このファイルには、レプリケーションユーザーとパスワードが含まれているため、patroni/postgresユーザー以外の者にこのファイルを読んでほしくない。
HTTPServer例外をロガーにリダイレクトします。JulienRiou
デフォルトでは、このような例外は通常のログを台無しにして標準出力にログに記録されました。
Bug fixes
pg_ctlプロセスのstdoutへのstderrパイプを削除しましたCodyCoons
メインPatroniプロセスからstderrを継承すると、すべてのPostgresログがすべてのpatroniログとともに表示されます。PatroniおよびPostgresログは、標準のツールdockerログ、kubectlなどを使用して使用できるため、これはコンテナ環境で非常に役立ちます。それに加えて、この変更は、postgresがいくつかの警告をstderrに書き込むときに、Patroniがポストマスターpidをキャッチできないバグを修正します。
Consulサービスチェックの登録解除タイムアウトをGo時間形式で設定しますPavelKirillov
明示的に記載されていない限り、タイムユニットの登録は失敗していました。
standby_clusterクラスター構成のチェックを緩和します。DmitryDolgov、AlexanderKukushkin
有効な値として文字列のみを受け入れていたため、ポートを整数として指定し、create_replica_methodsをリストとして指定することはできません。
バージョン1.5.3¶
2018-12-03リリース
互換性とバグ修正リリース。
zookeeperに対してpython3で実行する際の安定性が向上しました。AlexanderKukushkin
`loop_wait`の変更により、パトローニはzookeeperから切断され、再接続されませんでした。
postgres9.3との壊れた互換性を修正しました。AlexanderKukushkin
9.3はreplication='database'を理解しないため、レプリケーション接続を開くときはreplication=1を指定する必要があります。
HAループごとに少なくとも1回はConsulセッションをリフレッシュし、Consulセッション例外の処理を改善するようにしました。AlexanderKukushkin
ローカルコンスルエージェントを再起動すると、ノードに関連するすべてのセッションが無効になります。セッションリフレッシュを時間通りに呼び出さず、セッションエラーの適切な処理を実行しないことが、プライマリの降格を発生させていました。
バージョン1.5.2¶
2018-11-26リリース
互換性とバグ修正リリース。
kazoo-2.6.0との互換性AlexanderKukushkin
要求が適切なタイムアウトで実行されることを確認するために、Patroniはpython-kazooモジュールからcreate_connectionメソッドを再定義します。kazooの最後のリリースでは、create_connectionメソッドを呼び出す方法が少し変更されました。
Consulクラスターがリーダーを失ったときのPatroniクラッシュを修正しました。AlexanderKukushkin
クラッシュは、touch_memberメソッドの誤った実装が原因で発生していました。ブール値を返し、例外を発生させないはずです。
バージョン1.5.1¶
2018-11-01リリース
このバージョンは、永続的なレプリケーションスロットのサポートを実装し、pgBackRestのサポートを追加し、多くのバグを修正します。
New features
永久レプリケーションスロットAlexanderKukushkin
永続的なレプリケーションスロットは、フェールオーバー/スイッチオーバーで保持されます。つまり、新しいプライマリのPatroniは、プロモートの直後に構成済みのレプリケーションスロットを作成します。patronictledit-config`の助けを借りてスロットは設定できます。初期構成は :ref:`bootstrap.dcs <yaml_configuration> で行うこともできます。
pgbackrestのサポートを追加しましたYogeshSharma
pgBackrestは、既存の$PGDATAフォルダーに復元できます。これにより、最後のバックアップから変更されていないファイルがスキップされるため、迅速な復元が可能になります。この機能をサポートするために、新しいパラメーター`keep_data`が導入されました。追加の例については、 replica creation method セクションを参照してください。
Bug fixes
/"スタンバイクラスター/"ワークフローのいくつかのバグ修正AlexanderKukushkin
詳細については、https://github.com/zalando/patroni/pull/823を参照してください。
クラスター管理が一時停止され、DCSがアクセスできない場合のRESTAPIヘルスチェックを修正しましたAlexanderKukushkin
回帰は以下で紹介されましたhttps://github.com/zalando/patroni/commit/90cf930036a9d5249265af15d2b787ec7517cf57
バージョン1.5.0¶
2018-09-20リリース
このバージョンでは、PatroniHAクラスターがスタンバイモードで動作できるようにし、Windowsでの実行の実験的なサポートを導入し、ConsulにPostgreSQLサービスを登録するための新しい構成パラメーターを提供します。
New features
スタンバイクラスターDmitryDolgov
1つ以上のPatroniノードは、プライマリクラスタと並行してつまり別のデータセンターで実行され、プライマリクラスタのマスターから複製するスタンバイノードで構成されるスタンバイクラスターを形成できます。スタンバイクラスター内のすべてのPostgreSQLノードはレプリカです。これらのレプリカの1つはリモートマスターから直接複製するように自分自身を選択し、他のレプリカはカスケード方法でそこから複製します。この機能のより詳細な説明といくつかの構成例については、 here を参照してください。
Consul館の登録サービスPavelKirillov、AlexanderKukushkin
consul configuration の`register_service`パラメータが有効になっている場合、ノードは名前`scope`とタグ`master`、`replica`または`standby-leader`でサービスを登録します。
実験的なWindowsサポートPavelGolub
今後、PatroniをWindowsで実行できるようになりますが、Windowsのサポートは新しいもので、Linux対応するものほど多くの現実世界でのテストは受けていません。皆様のフィードバックをお待ちしております。
Improvements in patronictl
patronictl-k/--insecureフラグとrestapi証明書のサポートを追加しました。WilfriedRoset
以前は、RESTAPIが自己署名証明書で保護されていた場合、patronictl`はそれらの検証に失敗しました。その検証を無効にする方法はありませんでした。証明書検証を完全にスキップするように、または構成の :ref:`ctl: <patronictl_settings> セクションでCAおよびクライアント証明書を提供するように`patronictl`を構成できるようになりました。
patroniclスイッチオーバー/フェールオーバー出力からnofailoverタグを持つメンバーを除外するAlexanderAnikin
以前は、patronictlを介して対話型スイッチオーバーまたはフェイルオーバーを実行するときに、これらのメンバーが候補として誤って提案されていました。
Stability improvements
pg_controldataの非キーと値の出力行の解析を回避するAlexanderAnikin
特定の状況では、pg_controldataはコロン文字のない行を出力します。これにより、pg_controldata出力を解析するPatroniコードのエラーがトリガーされ、実際の問題が隠蔽されます。多くの場合、このような行は、通常の出力前、つまりバイナリメジャーバージョンがPostgreSQLデータディレクトリのバージョンと一致しない場合、pg_controldataによって表示される警告で出力されます。
リーダー選挙中のエラーメッセージにメンバー名を追加します。JanMussler
リーダー選挙中に、パトローニはクラスターのすべての既知のメンバーに接続し、それらのステータスを要求します。このようなステータスはPatroniログに書き込まれ、メンバーの名前が含まれます。以前は、メンバーにアクセスできない場合、エラーメッセージにはその名前は示されず、URLのみが含まれていました。
レプリケーションスロットの作成時に、WALポジションをすぐに予約します。AlexanderKukushkin
9.6以降、`pg_create_physical_replication_slot`ファンクションは、追加のブールパラメータ`immediately_reserve`を提供します。`false`に設定されている場合、デフォルトでもありますが、スロットは、最初のクライアント接続を受信するまでWALポジションを予約せず、スロットの作成と間の時間ウィンドウでクライアントが必要とする一部のセグメントを失う可能性があります。初期クライアント接続。
厳密な同期レプリケーションのバグを修正しました。AlexanderKukushkin
`synchronous_mode_strict:true`で実行している場合、場合によっては、Patroniは`*`を`synchronous_standby_names`に配置し、ほとんどのレプリケーション接続の同期状態を`potential`に変更します。以前、Patroniは、`async`状態を持つもののみを考慮するため、このような状況では同期候補を選択できませんでした。
バージョン1.4.6¶
リリース2018-08-14
Bug fixes and stability improvements
このリリースでは、非マスターノードの200を返すPatroniAPI/マスターエンドポイントに関する重大な問題を修正します。これは報告の問題であり、実際のスプリットブレインではありませんが、特定の状況では、クライアントが読み取り専用ノードにリダイレクトされる場合があります。
降格時にis_leaderステータスをリセットAlexanderKukushkin、OleksiiKliukin
降格されたクラスターメンバーが/masterAPI呼び出しでコード200で応答を停止することを確認します。
新しい/"cluster_unlocked/"フィールドをAPI出力に追加しますDmitryDolgov
このフィールドは、クラスターでマスターが実行されているかどうかを示します。これは、レプリカの1つを除き、他のノードを照会できない場合に使用できます。
バージョン1.4.5¶
2018-08-03リリース
New features
新しいpostgres構成を適用する際のロギングを改善しました。DonSeiler
Patroniは、変更されたパラメーターの名前と値をログに記録します。
Python3.7互換性ChristophBerg
asyncはpython3.7の予約キーワードです
メンバーがシャットダウンされたときにDCSで状態を/"stopped/"に設定します。TonySorrentino
これは、メンバーの状態を/"patronictllist/"コマンドの/"stopped/"として表示します。
古いpostmaster.pidが実行中のプロセスと一致する場合にログに記録されるメッセージを改善しますAntsAasma
以前のものは混乱を超えていました。
patroniclリロード機能の実装DonSeiler
それまでは、RESTAPIを呼び出すか、パトロニプロセスにSIGHUP信号を送信することによってのみ構成をリロードすることができました。
レプリカとして起動するときに、制御データからいくつかのパラメーターを取得して適用します。AlexanderKukushkin
`max_connections`の値とグローバル構成で設定されるその他のパラメーターは、プライマリが実際に使用するものよりも低い場合があります。これが発生すると、レプリカは起動できないため、手動で修正する必要があります。Patroniは、`pg_controldata`から値を読んで適用し、postgresを起動し、`pending_restart`フラグを設定することにより、それを処理します。
設定されている場合、postgresの起動時にLD_LIBRARY_PATHを使用します。ChrisFraser
Postgresを起動すると、PatroniはPATH、LC_ALL、およびLANG環境変数が設定されている場合は、それらを渡していました。次に、LD_LIBRARY_PATHで同じことを行っています。誰かがPostgreSQLを標準以外の場所にインストールすると役立つはずです。
create_replica_methodの名前をcreate_replica_methodsに変更しますDmitryDolgov
それが実際に配列であることを明確にするため。古い名前は、下位互換性のために引き続きサポートされています。
Bug fixes and stability improvements
一時停止状態のpg_rewindによるレプリカ起動の条件を修正しましたOleksiiKliukin
以前にpg_rewindを既に実行したレプリカを起動しないようにします。
update_lockが成功した場合にのみマスターヘルスチェックに200応答するAlexanderKukushkin
DCSがパーティション化されている場合、Patroniが以前の降格マスターのマスターを報告しないようにします。
新しいコンスルモジュールとの互換性を修正しました。AlexanderKukushkin
v1.1.0からpython-consulは内部APIを変更し、`dict`の代わりに`list`を使用してクエリパラメーターを渡すようになりました。
シャットダウン中にPatroniRESTAPIスレッドから例外をキャッチするAlexanderKukushkin
これらのキャッチされない例外により、シャットダウン時にPostgreSQLが実行され続けました。
Postgresがマスターとして実行されている場合にのみクラッシュリカバリーを実行します。AlexanderKukushkin
`pg_controldata`が'inProduction'または'shuttingdown'または'incrashrecovery'をレポートする必要があります。その他のすべての場合、クラッシュリカバリーは必要ありません。
構成エラーの処理を向上させました。HenningJacobs、AlexanderKukushkin
Patroni構成ファイルを更新し、SIGHUPをPatroniプロセスに送信することにより、ランタイム`restapi.listen`を含む多くのパラメーターを変更できます。この修正では、一部のパラメーターが無効な値を受け取ったときに、'restapi'スレッドからあいまいな例外を削除します。
バージョン1.4.4¶
2018-05-22リリース
Stability improvements
poll_failover_resultの競合状態を修正しました。AlexanderKukushkin
フェイルオーバーもスイッチオーバーにも直接影響しませんでしたが、まれに、元のリーダーがロックを解放したときに成功を報告するのが早すぎ、「Failedoverto/」の代わりに「Failedoverto/"None/"」が生成されました。"desired-node/"'メッセージ。
Postgresパラメーター名を大文字と小文字を区別しないように扱うAlexanderKukushkin
Postgresパラメーターのほとんどはsnake_case名前を持っていますが、このルールには3つの例外がありますDateStyle、IntervalStyle、TimeZone。Postgresは、別のケースたとえばtimezone='some/tzn'で書かれた場合、これらのパラメーターを受け入れます。ただし、Patroniはpg_settingsでこれらのパラメーター名の大文字と小文字を区別しない一致を見つけることができず、結果としてこのようなパラメーターを無視しました。
実行中のpostgresにアタッチし、クラスターが初期化されていない場合、スタートを中止します。AlexanderKukushkin
Patroniは、既に実行されているPostgresインスタンスに自分自身をアタッチできます。レプリカに到達する前に、マスターノードでPatroniの実行を開始することが不可欠です。
patronictlscaffoldの動作を修正しましたAlexanderKukushkin
jsonエンコードされた文字列の代わりにdictオブジェクトをtouch_memberに渡すと、DCS実装がそれのエンコードを担当します。
一時停止中にリーダーキーの更新に失敗した場合、マスターを降格しないでくださいAlexanderKukushkin
メンテナンス中に、DCSは読み取り要求に応答し続けながら、書き込み要求の失敗を開始する場合があります。その場合、PatroniはDCSのリーダーロックの更新に失敗した後、Postgresマスターノードを読み取り専用モードにしていました。
Patroniが新しいポストマスタープロセスに気づいたときにレプリケーションスロットを同期しますAlexanderKukushkin
Postgresが再起動された場合、Patroniはレプリケーションスロットのリストが予想と一致することを確認する必要があります。
一時停止から復帰した後のsysidと同期レプリケーションスロットを検証するAlexanderKukushkin
`maintenance`モード中に、データディレクトリが完全に書き換えられる場合があるため、`Databasesystemidentifier`がまだクラスターに属し、レプリケーションスロットがパトローニの期待と同期していることを確認する必要があります。
ポストマスターロックファイルが存在するデータディレクトリでPostgresを実行せずに開始すると失敗する可能性を修正しました。AlexanderKukushkin
ポストマスターロックファイルからPIDの再利用を検出します。DockerコンテナでPatroniとPostgresを実行している場合、このような問題が発生する可能性が高くなります。
誤ってワイプされたDCSの保護を向上させましたAlexanderKukushkin
Patroniには、このような場合にフェイルオーバーを防ぐための多くのロジックが用意されています。すべてのキーを復元することもできます。ただし、この変更が発生するまでは、/configキーを誤って削除すると、HAループの1サイクルの一時停止モードがオフになっていました。
無効なシステムIDが発生しても終了しないOleksiiKliukin
クラスターシステムIDが空の場合、または検証チェックに合格しない場合は終了しないでください。その場合、クラスターは再初期化が必要になる可能性が高くなります。結果メッセージにそれを記載します。そうしないと、再初期化が発生しないため、Patroniを終了しないでください。
Compatibility with Kubernetes 1.10+
空のサブセットのチェックを追加しましたCodyCoons
Kubernetes1.10.0+は、`[]`の代わりに`None`に設定された`Endpoints.subsets`を返し始めました。
Bootstrap improvements
recovery.confの削除をオプショナルにします。BradNicholson
bootstrap.<custom_bootstrap_method_name>.keep_existing_recovery_conf`が定義され、 ``True` に設定されている場合、Patroniは既存の
recovery.confファイルを削除しません。これは、適切な`recovery.conf`を生成するpgBackRestのようなツールを使用してバックアップからブートストラップする場合に役立ちます。basebackupビルトインメソッドのオプションを許可しますOleksiiKliukin
カスタムレプリカ作成方法で定義される方法と同様に、構成で`basebackup`セクションを定義することにより、ビルトインbasebackupメソッドにオプションを提供できるようになりました。違いは、basebackup`セクションで受け入れられるフォーマットにあります。pg_basebackupは--key=value`と`--key`オプションの両方を受け入れるため、セクションのコンテンツはキーと値のペアの辞書、または1要素辞書またはキーのみのリスト値を受け入れないオプションの場合。追加の例については、 replica creation method セクションを参照してください。
バージョン1.4.3¶
2018-03-05リリース
Improvements in logging
環境変数からログレベルを設定できるようにします。AndyNewton、KeyvanHedayati
PATRONI_LOGLEVEL-一般的なログレベルを設定します`PATRONI_REQUESTS_LOGLEVEL`-すべてのHTTP要求のログレベルを設定します。KubernetesAPI呼び出し考えられるログレベルの名前を取得するには、`thedocsforPythonlogging<https://docs.python.org/3.6/library/logging.html#levels>`を参照してください。
Stability improvements and bug fixes
監視がタイムアウトしたときにetcdクラスタートポロジを再検出しないでくださいAlexanderKukushkin
etcd構成にホストが1つだけあり、正確にこのホストにアクセスできない場合、Patroniはクラスタートポロジの検出を開始していましたが、成功しませんでした。代わりに、次の利用可能なノードに切り替える必要があります。
カスタムブートストラップの後に、bootstrap.pg_hbaのコンテンツをpg_hba.confに書き込みます。AlexanderKukushkin
`initdb`を使用した通常のブートストラップと同様に動作するようになりました
シングルユーザーモードはユーザー入力を待機していて、終了しませんでした。AlexanderKukushkin
回帰は以下で紹介されましたhttps://github.com/zalando/patroni/pull/576
バージョン1.4.2¶
2018-01-30リリース
Improvements in patronictl
スケジュールされたフェイルオーバーの名前をスケジュールされたスイッチオーバーに変更しますAlexanderKukushkin
フェールオーバーとスイッチオーバー機能はバージョン1.4で分離されましたが、`patronictllist`は引き続き`Scheduledswitchover`の代わりに`Scheduledailover`を報告していました。
保留中の再起動に関する情報を表示するAlexanderKukushkin
一部の構成の変更を適用するには、postgresを再起動する必要がある場合があります。Patroniは、RESTAPIで、およびノードのステータスをDCSに書き込むときに、既にそれに関するヒントを提供していましたが、それを表示する簡単な方法はありませんでした。
構成ファイルのcluster_nameを操作するようにshow-configを作成しました。AlexanderKukushkin
`patronictledit-config`と同様に動作します
Stability improvements
ブートストラップ中にpg_controldataの呼び出しを回避するAlexanderKukushkin
initdbまたはカスタムブートストラップ中に、pgdataは空ではないが、pg_controldataがまだ書き込まれていない時間枠があります。このような場合、pg_controldata呼び出しはエラーメッセージで失敗していました。
psutilから発生した例外を処理します。AlexanderKukushkin
cmdlineは、`cmdline()`メソッドが呼び出されるたびに読み込まれ、解析されます。調べられるプロセスが既に消失している場合もあります。その場合、`NoSuchProcess`が発生します。
Kubernetes support improvements
k8sAPIからのエラーを飲み込まないでください。AlexanderKukushkin
KubernetesAPIの呼び出しは、さまざまな理由で失敗する場合があります。場合によっては、このような呼び出しを再試行する必要があります、他の場合には、エラーメッセージと例外スタックトレースをログに記録する必要があります。ここでの変更は、Kubernetesの権限の問題をデバッグするのに役立ちます。
Kubernetesの例のDockerファイルを更新してマスターブランチからPatroniをインストールしますMaciejSzulik
その前は`feature/k8s`を使用していましたが、時代遅れになりました。
k8sでパトロニを実行するための適切なRBACを追加します。MaciejSzulik
クラスターのポッドに割り当てられるサービスアカウント、必要な権限のみを保持するロール、サービスアカウントとロールを接続するロールバインディングを追加します。
バージョン1.4.1¶
2018-01-17リリース
Fixes in patronictl
フェイルオーバー先のメンバーの提案リストに現在のリーダーを表示しません。(アレクサンダー・ククシュキン)
patronictlフェールオーバーは、クラスター内にリーダーが存在する場合でも機能する可能性があるため、フェールオーバーが可能なメンバーのリストから除外する必要があります。
patroniclスイッチオーバーを古いPatroniAPIと互換性のあるものにしましたAlexanderKukushkin
POST/switchoverRESTAPI呼び出しがステータスコード501で失敗した場合、再度実行されますが、/failoverエンドポイントに対して。
バージョン1.4¶
2018-01-10リリース
このバージョンでは、KubernetesをDCSとして使用するサポートを追加し、Etcd、Zookeeper、またはConsulを追加展開せずに、KubernetesでクラウドネイティブエージェントとしてPatroniを実行できます。
Upgrade notice
pipを介してPatroniをインストールすると、Etcd、Zookeper、Consul、またはKubernetesのライブラリ、またはAWSのサポートなどの依存関係は導入されません。それらを有効にするには、`pipinstallpatroni[etcd,kubernetes]`などのpipinstallコマンドで明示的にリストする必要があります。
Kubernetes support
KubernetesベースのDCSを実装します。エンドポイントのメタデータは、構成とリーダーキーを保存するために使用されます。ポッド定義内のメタデータフィールドは、メンバー関連のデータを保存するために使用されます。エンドポイントの使用に加えて、PatroniはConfigMapsをサポートしています。この機能の詳細については、 Kubernetes chapter of the documentation をご覧ください。
Stability improvements
ポストマスタープロセスを別のオブジェクトに分解するAntsAasma
このオブジェクトは、pidと開始時刻を介して実行中のポストマスタープロセスを識別し、ポストマスターが背後で再起動されたとき、またはpostgresディレクトリがファイルシステムから消えたときの状況の検出および解決を簡素化します。
HAサイクルのすべてのループでPatroniによって発行されるSELECTの量を最小限に抑えます。AlexanderKukushkin
HAループの反復ごとに、パトローニは、リカバリステータスと絶対的なwal位置を知る必要があります。今後、Patroniは、レプリカで2つ、マスターで3つの代わりに、1つのSELECTのみを実行してこの情報を取得します。
ロックがある場合にのみシャットダウン時にリーダーキーを削除します。AntsAasma
無条件削除は、不要で誤解を招く例外を生成していました。
Improvements in patronictl
versionコマンドをpatronictlに追加します。AntsAasma
インストールされているPatroniのバージョンと実行中のPatroniインスタンスのバージョンクラスター名が指定されている場合が表示されます。
一部のpatronictlコマンドのcluster_name引数をオプショナルに指定するようにします。AlexanderKukushkin、AntsAasma
patroniclが
scopeが定義された通常のPatroni構成ファイルを使用している場合に動作します。スケジュールされたスイッチオーバーとメンテナンスモードに関する情報を表示しますAlexanderKukushkin
それまでは、PatroniログからまたはDCSから直接この情報を取得することができました。
patronictl reinitの改善AlexanderKukushkinPatroniが他のアクション、つまりpostgresを起動しようとしていたときに、
patronictl reinitが続行を拒否する場合がありました。`patronictl`は、このような長時間実行アクションをキャンセルするコマンドを提供せず、唯一の危険な回避策はデータディレクトリを手動で削除することでした。`reinit`の新しい実装は、reinitを続行する前に他の長時間実行アクションを強制的にキャンセルします。patronictl pauseおよびpatronictl resumeに--waitフラグを実装します。AlexanderKukushkin要求されたアクションがクラスター内のすべてのノードによって確認されるまで、
patronictlは待機します。このような動作は、DCSおよびRESTAPIを介してすべてのノードのpauseフラグを公開することにより実現されます。patronictl failoverの名前をpatronictl switchoverに変更します。AlexanderKukushkin以前の
failoverは、実際にはスイッチオーバーのみが可能でした。リーダーなしでクラスターで進むことを拒否しました。patronictl failoverの動作を変更します。AlexanderKukushkinリーダーがない場合でも機能しますが、その場合、新しいリーダーになるノードを明示的に指定する必要があります。
Expose information about timeline and history
DCSおよびAPI経由で現在のタイムラインを公開するAlexanderKukushkin
クラスターのメンバーごとに、現在のタイムラインに関する情報を保存します。この情報はAPIを介してアクセスでき、DCSに保存されます
DCSの/historyキーにプロモーション履歴を保存するAlexanderKukushkin
さらに、対応するプロモーションのタイムスタンプで強化されたタイムライン履歴をDCSの/historyキーに保存し、各プロモートで更新します。
Add endpoints for getting synchronous and asynchronous replicas
新しい/syncおよび/asyncエンドポイントを追加しますAlexanderKukushkin、OleksiiKliukin
これらのエンドポイント/synchronousおよび/asynchronousとしてもアクセスできますは、対応する同期および非同期レプリカの場合のみ200を返します`noloadbalance`としてマークされたものを除きます。
Allow multiple hosts for Etcd
新しい`hosts`パラメータをEtcd構成に追加しますAlexanderKukushkin
このパラメーターには、実行中のetcdクラスターメンバーのリストを検出および設定するために使用されるホストの初期リストが含まれています。作業中に何らかの理由で、検出されたホストのこのリストが使い果たされると、そのリストに使用可能なホストがない場合、Patroniは`hosts`パラメータから初期リストに戻ります。
バージョン1.3.6¶
2017-11-10リリース
Stability improvements
postgresが実行されているかどうかを確認するときに、プロセスの開始時間を検証します。(AntsAasma)
postmaster.pidをクリーンアップしないクラッシュの後、同じpidを持つ新しいプロセスが存在する可能性があり、is_running()の誤検出が発生し、あらゆる種類の不正な動作につながります。
データディレクトリainlolcatを失ったときにブートストラップする前にpostgresqlをシャットダウンする
マスター上のデータディレクトリが強制的に削除されると、postgresプロセスはしばらく生きたままで、その元のマスターの代わりに作成されるレプリカの起動またはレプリケートを防ぐことができます。この修正により、Patroniはポストマスターpidとその開始時刻をキャッシュし、対応するデータディレクトリが削除された後も実行されている場合に古いポストマスターを終了させます。
postgresマスターが死亡した場合に、シングルユーザーモードでクラッシュリカバリーを実行しますAlexanderKukushkin
スタンバイとしてすぐに起動するのは安全でなく、postgresが完全にシャットダウンしていない場合は
pg_rewindを実行できません。シングルユーザーのクラッシュリカバリーは、pg_rewindが有効になっている場合、または現在マスターが存在しない場合にのみキックインされます。
Consul improvements
Consulのデータセンター構成を提供できるようにしましたViliusOkockis、AlexanderKukushkin
その前に、Patroniは常にそれが実行されているホストのデータセンターと通信していました。
常にX-Consul-Tokenhttpヘッダーでトークンを送信しますAlexanderKukushkin
Patroni構成で
consul.tokenが定義されている場合、常に'X-Consul-Token'httpヘッダーで送信します。python-consulモジュールは、consul.token_のクエリパラメータとしてトークンを受け入れないConsulRESTAPIと/"一貫性"を持とうとしますが、'X-Consul-Token'ヘッダーで動作します。指定された値が可能な最小値より小さい場合、セッションTTLを調整します。StasFomin、AlexanderKukushkin
Patroni構成で提供されるTTLがConsulでサポートされている最小TTLよりも小さい場合があります。その場合、Consulエージェントは新しいセッションの作成に失敗します。セッションがないと、PatroniはConsulKVストアにメンバーキーとリーダーキーを作成できません。その結果、異常なクラスターが発生します。
Other improvements
環境変数
PATRONI_LOGFORMATを介してカスタムログ形式を定義するスタスフォミンシステムロガーによって既に追加されている場合、Patroniログのタイムスタンプおよびその他の同様のフィールドを無効にすることを許可します通常はPatroniがサービスとして実行されている場合。
バージョン1.3.5¶
2017-10-12リリース
Bugfix
データディレクトリが削除された場合、ロールを'未初期化'に設定しますAlexanderKukushkin
ノードがマスターとして実行されている場合、フェールオーバーを妨げていました。
Stability improvement
postgresを起動しようとして失敗した場合は、シングルユーザーモードでpostmasterを実行してみます。AlexanderKukushkin
通常、このような問題は、マスターとして実行されているノードが終了され、タイムラインが分岐されたときに発生します。
recovery.confにrestore_commandが定義されている場合、postgresが起動を中止し、制御データを変更しないままにする可能性が非常に高いです。クリーンなシャットダウンが必要なpg_rewindを使用できなくなります。
Consul improvements
セッションを作成するときにヘルスチェックを指定できるようにしましたAlexanderKukushkin
指定しない場合、Consulは/"serfHealth/"を使用します。一方では、分離されたマスターの迅速な検出が可能になりますが、別の側面では、パトローニが短いネットワーク遅延を許容することが不可能になります。
Bugfix
Python3のウォッチドッグを修正するAntsAasma
ioctl()呼び出しインタフェースの誤解。mutable=Falseの場合、fcntl.ioctl()は実際にargバッファを返します。intとstrの比較がエラーを返さなかったため、これは誤ってPython2で動作しました。エラー報告は、実際には、Python2でIOErrorを発生させ、Python3でOSErrorを発生させることにより実行されます。
バージョン1.3.4¶
2017-09-08リリース
Different Consul improvements
Consulトークンをヘッダーとして渡します。AndrewColinKissa
ヘッダーは、トークンをConsul館 API _に渡すための優先的な方法になりました。
Consulの詳細な構成AlexanderKukushkin
scheme、token、クライアントおよびca証明書schemeを指定する可能性。python-consul-0.7.1以降との互換性AlexanderKukushkin
新しいpython-consulモジュールは、一部のメソッドのシグネチャを変更しました
/"TTLロックを取り出すことができませんでした"メッセージはログに記録されませんでした。AlexanderKukushkin
重大なバグではありませんが、適切なログの欠如により、問題が発生した場合の調査が複雑になります。
Quote synchronous_standby_names using quote_ident
synchronous_standby_namesをpostgresql.confに書き込む場合、その値は引用符で囲む必要があります。AlexanderKukushkin適切に引用されていない場合、PostgreSQLは同期レプリケーションを効果的に無効にして、動作を継続します。
Different bugfixes around pause state, mostly related to watchdog アレクサンダー・ククシュキン
ウォッチドッグがアクティブでない場合はキープアライブを送信しない
一時停止モードでウォッチドッグをアクティブにしない
一時停止モードで正しいpostgres状態を設定する
postgresが停止している場合は、APIからクエリを実行しないでください
バージョン1.3.3¶
2017-08-04リリース
Bugfixes
synchronous_mode_strictがオンになっている場合でも、昇格の直後に同期レプリケーションが無効になっていました。AlexanderKukushkin
バックアップから復元した後に空の
pg_ident.confファイルが見つからない場合は、作成しますAlexanderKukushkinpostgresだけでなくすべてのデータベースへの
pg_hba.confのオープンアクセスFrancoBellagamba
バージョン1.3.2¶
2017-07-31リリース
Bugfix
patronictledit-configはZooKeeperで動作しませんでした。AlexanderKukushkin
バージョン1.3.1¶
2017-07-28リリース
Bugfix
_MemberStatusの変更により、APIを介したフェイルオーバーが中断されました。AlexanderKukushkin
バージョン1.3¶
2017-07-27リリース
バージョン1.3は、カスタムブートストラップの可能性を追加し、pg_rewindのサポートを大幅に向上させ、同期モードのサポートを強化し、patronictlに構成編集を追加し、Linuxでウォッチドッグサポートを実装します。さらに、これはPostgreSQL10で正常に動作する最初のバージョンです。
Upgrade notice
Patroniの新しいバージョンと既知の互換性問題はありません。バージョン1.2からの構成は変更せずに動作するはずです。新しいパッケージをインストールし、Patroniを再起動するPostgreSQLの再起動が発生するか、最初にPatroniを pause mode に入れて、クラスター内のすべてのノードでPatroniを再起動することにより、アップグレードが可能です。一時停止モードのPatroniはstop/startPostgreSQL)、最後に一時停止モードから再開します。
Custom bootstrap
クラスターのブートストラップのプロセスを構成可能にするAlexanderKukushkin
クラスター内の最初のノードを初期化するときに、
initdbの代わりにカスタムブートストラップスクリプトを許可します。bootstrapコマンドは、クラスターの名前とデータディレクトリへのパスを受け取ります。生成されるクラスターは、リカバリを実行するように構成できるため、バックアップからブートストラップし、ポイントインタイムリカバリーを可能にします。この機能の詳細な説明については、initdbを参照してください。
Smarter pg_rewind support
現在のマスターとのタイムラインの違いを見て、pg_rewindを実行するかどうかを決定します。AlexanderKukushkin
以前のPatroniには、pg_rewindをトリガーするための固定条件セット、つまり元のマスターを起動したとき、クラスター内の他のすべてのノードで指定されたノードへのスイッチオーバーを行ったとき、またはnofailoverタグを持つレプリカが存在する場合がありました。これらすべての場合に共通して、一部のレプリカが新しいマスターよりも先を行く可能性があります。場合によっては、pg_rewindは何もしませんでした、他のいくつかの場合、必要に応じて実行されませんでした。この限定されたルールのリストに依存するのではなく、PatroniはマスターとレプリカのWAL位置を比較するストリーミングレプリケーションプロトコルを使用して、レプリカに巻き戻しが必要かどうかを確実に決定します。
Synchronous replication mode strict
strictモードを追加することにより、同期レプリケーションのサポートを強化します。JamesSewell、AlexanderKukushkin
通常、
synchronous_modeが有効で、マスターに接続されているレプリカがない場合、Patroniはマスターを書き込みに利用できるようにするために同期レプリケーションを無効にします。synchronous_mode_strictオプションは、設定されている場合、Patroniはレプリカが不足している場合に同期レプリケーションを無効にせず、マスターにデータを書き込むすべてのクライアントを効果的にブロックします。自動フェイルオーバーによるデータ損失を防ぐ同期モードの保証に加えて、strictモードでは、各書き込みが2つのノードに永続的に保存されるか、クラスター内にノードが1つだけの場合は完全に発生しないことが保証されます。
Configuration editing with patronictl
patroniclに構成編集を追加しました。AntsAasma、AlexanderKukushkin
DCSに保存されている動的クラスター構成の編集を保護する機能を追加します。コマンドラインからのパラメーター/値の指定、$EDITORの呼び出し、またはyamlファイルからの構成の適用のいずれかをサポートします。
Linux watchdog support
Linuxのウォッチドッグサポートを実装するAntsAasma
パトローニが実行されていないノード、または応答していないノードをリブートするためにLinuxソフトウェアウォッチドッグをサポートたとえば、高負荷のためLinuxソフトウェアウォッチドッグは、非応答ノードを再起動します。Patroni構成のwatchdogセクションからデフォルトで`/dev/watchdog`とモードon、automatic、offを使用するようにウォッチドッグデバイスを構成することが可能です。 watchdog documentation から詳細情報を取得できます。
Add support for PostgreSQL 10
Patroniは、これまでにリリースされたPostgreSQL10のすべてのベータバージョンと互換性があり、リリースされるPostgreSQL10と互換性がある予定です。
PostgreSQL-related minor improvements
Patroni構成ファイルまたはDCSの動的構成を介してpg_hba.confを定義しますAlexanderKukushkin
構成の
postgresqlセクションのpg_hbaサブセクションでpg_hba.confの内容を定義できます。これにより、すべてのノードにロギングし、手動で変更して、構成をリロードするのではなく、DCSでのみ定義する必要があるため、マルチプルのノードでのpg_hba.confの管理が簡素化されます。定義されると、このセクションの内容は、現在の
pg_hba.confを完全に置き換えます。hba_filePostgreSQLパラメーターが設定されている場合、Patroniはそれを無視します。UNIXソケットを介したローカルPostgreSQLクラスターへの接続のサポートAlexanderKukushkin
use_unix_socketオプションをPatroni構成のpostgresqlセクションに追加します。trueに設定され、PostgreSQLunix_socket_directoriesオプションが空でない場合、Patroniはその最初の値を使用してローカルのPostgreSQLクラスターに接続できます。unix_socket_directoriesが定義されていない場合、Patroniはデフォルト値を想定し、PostgreSQL接続文字列のhostパラメーターを完全に省略します。リロード時のスーパーユーザーとレプリケーション資格情報の変更のサポートAlexanderKukushkin
PostgreSQLデータディレクトリの外部への構成ファイルの保存のサポート@jouir
新しい構成
postgresql構成指示子config_dirを追加します。これはデフォルトでデータディレクトリにあり、Patroniによって書き込み可能である必要があります。
Bug fixes and stability improvements
HandleEtcdEventIndexClearedおよびEtcdWatcherCleared例外AlexanderKukushkin
無駄な再試行を回避することにより、Etcdによって監視オペレーションが終了されたときのリカバリーが速くなります。
Etcd障害時にスピンするエラーを削除し、ログスパムを削減します。AntsAasma
2回目以降のEtcd接続失敗時の即時再試行とログへのスタックトレースの発行は避けてください。
PostgreSQLプロセスをフォークするときにロケール変数をエクスポートするOleksiiKliukin
NLSでビルドされたPostgreSQLの英語以外のロケールでの`postmasterbecomemultithreadedwhilestartup`の致命的なエラーを回避します。
レプリケーションスロットをドロップする際の追加チェックAlexanderKukushkin
場合によっては、PatroniはWAL送信者によってレプリケーションスロットをドロップできない場合があります。
PostgreSQLの命名ルールに従うように、レプリケーションスロット名を63(NAMEDATALEN-1)文字に切り詰めます。NickScott
PatroniからPostgreSQLクラスターへの追加の接続が開かれる競合状態を修正しました。AlexanderKukushkin
ノードが空のデータディレクトリで再起動したときにリーダーキーを解放します。AlexKerney
リーダーなしでブートストラップを実行するときに非同期エグゼキューターをビジーに設定します。AlexanderKukushkin
これを行わないと、パトロニは、クラスターにリーダーが存在することを必要としないブートストラップ方法でブートストラップされている間、通常のビジネスを続行したため、ノードが別のクラスターに属していることを示すエラーが発生する可能性があります。
WAL-Eレプリカ作成方法の改善JoarWandborg、AlexanderKukushkin。
WAL-Eベースバックアップを解析するときにcsv.DictReaderを使用し、スペース区切りの日付と時刻でISO日付を受け入れます。
レプリカから現在のWAL位置を取得して、復元するWALの量を推定することをサポートします。以前は、コードは、マスターノードでのみ使用可能なシステム情報機能を呼び出すために使用されていました。
バージョン1.2¶
2016-12-13リリース
このバージョンでは、同期レプリケーションの処理を大幅に改善し、起動プロセスとフェールオーバーの信頼性を高め、PostgreSQL9.6サポートを追加し、多くのバグを修正します。さらに、これらのリリースノートを含むドキュメントは、https://patroni.readthedocs.ioに移動されました。
Synchronous replication
同期レプリケーションのサポートを追加します。(AntsAasma)
新しい構成変数
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をPID1として処理するときに、競合状態に陥ることを回避します。AlexanderKukushkin
以前は、Patroni内の同じプロセスが新しいプロセスを生成し、それらからSIGCHILDを処理したため、Dockerコンテナ内で実行されているときに競合状態が発生する可能性がありました。この変更では、Patroniのfork/execを使用し、元のPID1プロセスに子からの信号を処理させます。
WAL-Eの復元を修正します。(オレクシー・クリウキン)
以前は、WAL-E復元は
no_masterフラグを使用して、マスターとのコンサルテーションを完全に回避し、Patroniは常にpg_basebackupではなくWALからの復元を選択します。この変更は、no_masterの元の意味に戻します。つまり、マスターが実行されていない場合、PatroniWAL-Eリストアはレプリケーション方法として選択できます。後者は、メソッドに渡された接続文字列を調べることにより確認されます。さらに、再試行メカニズムをより堅牢にし、他の細部を処理します。非同期DNSリゾルバーキャッシュを実装します。(アレクサンダー・ククシュキン)
DNSが一時的に使用できない場合の失敗を回避しますたとえば、ノードが受信した過剰なトラフィックのため。
開始状態とマスター開始タイムアウトを実装します。(AntsAasma、AlexanderKukushkin)
以前は
pg_ctlはタイムアウトを待って、PostgreSQLが実行されていると考えて喜んで踏み続けました。これにより、PostgreSQLは実際には実行されていないときに実行されているとしてリストに表示され、フェールオーバー、クラッシュリカバリー、またはフェールオーバーとリワインドの欠落によって中断されたクラッシュリカバリーが発生する競合状態が発生しました。この変更では、master_start_timeoutパラメーターを追加し、メインHAループstartingの新しい状態を導入します。master_start_timeoutが0の場合、マスターがクラッシュしたときに、フェイルオーバー候補が存在するとすぐにフェイルオーバーします。それ以外の場合、PatroniはマスターでPostgreSQLを起動しようとした後、タイムアウトの間待機します。有効期限が切れると、可能であればフェイルオーバーします。手動フェイルオーバー要求は、マスターのクラッシュ中にタイムアウトの有効期限が発生する前でも受け入れられます。timeoutパラメーターをrestartAPIエンドポイントとpatronictlに導入します。設定され、再起動がタイムアウトより長くかかる場合、PostgreSQLは異常であると考えられ、他のノードがリーダーロックを取得できるようになります。一時停止モードでの
pg_rewindの動作を修正しました。(AntsAasma)Patroniが巻き戻す必要があると考えているが、巻き戻しが不可能な場合、つまり
pg_rewindが存在しない場合、一時停止モードでの不必要な再起動を避けます。superuser認証がpg_rewind関連のPatroni構成セクションにない場合、superuserデフォルトのOSユーザーのデフォルトのlibpq値にフォールバックします。コールバックの実行をシリアル化します。新しいコールバックが実行されようとしているときに、同じタイプの以前のコールバックを強制終了します。コールバックの実行時にゾンビプロセスが生成される問題を修正します。(アレクサンダー・ククシュキン)
リーダーキーがDCSで設定されているが、このリーダーキーの更新が失敗する場合、以前のマスターの昇格を避けてください。(アレクサンダー・ククシュキン)
これにより、現在のマスターが「一貫性のない読み取り」を許可するEtcdおよびその他のDCSの少数のノードとともにパーティション化されている場合、ロールを維持し続けてしまう問題を回避します。
Miscellaneous
ブートストラップに
post_init構成オプションを追加します。(アレハンドロ・マルティネス)Patroniは、
initdbを実行し、新しいクラスターに対してPostgreSQLを起動した直後に、このオプションのスクリプト引数を呼び出します。スクリプトは、superuserで接続URLを受け取り、パスワードを含む.pgpassファイルをポイントするようにPGPASSFILEを設定します。スクリプトが失敗すると、Patroniの初期化も失敗します。これは、新しいユーザーを追加したり、新しいクラスターに拡張機能を作成したりする場合に役立ちます。PostgreSQL9.6サポートを実装します。(アレクサンダー・ククシュキン)
wal_level = replicaをhot_standbyの同義語として使用し、あるものから別のものに変更されるときのpending_restartフラグを回避します。(アレクサンダー・ククシュキン)
Documentation improvements
Patronimain 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を一時的に切断しますMuratKabilov、AlexanderKukushkin、OleksiiKliukin。
以前は、PostgreSQLを終了せずにPatroniにSIGKILLシグナルを送信して停止する必要がありました。新しい一時停止モードは、Patroniを終了せずに、クラスター全体でPostgreSQLからPatroniを切断します。これは、Pacemakerのメンテナンスモードに似ています。Patroniは引き続きDCSのメンバーとリーダーキーを更新しますが、プロセス中にPostgreSQLサーバーを起動、停止、または再起動しません。いくつかの例外があります。たとえば、手動フェイルオーバー、再初期化、および再起動は引き続き許可されます。 a detailed description of this feature を読み取ることができます。
さらに、patronictlは、一時停止モードを切り替えるための新しい pause および resume コマンドをサポートしています。
Scheduled and conditional restarts
restartAPIコマンドに条件を追加しますOleksiiKliukin
この変更は、再起動を行うために検証できるいくつかの条件を追加することにより、Patroniの再起動を強化します。条件の中には、PostgreSQLロールがマスターまたはレプリカの場合の再起動、PostgreSQLバージョン番号の確認、または構成変更を適用するために再起動が必要な場合にのみ再起動が含まれます。
スケジュールされた再起動を追加します。OleksiiKliukin
将来の再起動をスケジュールできるようになりました。ノードごとに1つのスケジュールされた再起動のみがサポートされています。スケジュールされた再起動が必要でない場合は、クリアすることが可能です。スケジュールされた再起動と条件付き再起動の組み合わせがサポートされており、たとえば、夜間にマイナーPostgreSQLのアップグレードをスケジュールし、管理スクリプトにpostgres固有のロジックを追加せずに、古いマイナーバージョンを実行しているインスタンスのみを再起動できます。
条件付きおよびスケジュールされたリスタートのサポートをpatronictlに追加します。MuratKabilov。
patronictlrestartは、いくつかの新しいオプションをサポートしています。スケジュールされたアクションをクリーンアップするpatronictllushコマンドもあります。
Robust DCS interaction
LOOP_waitに応じてKazooタイムアウトを設定しますAlexanderKukushkin
もともと、ping_timeoutおよびconnect_timeout値は、ネゴシエートされたセッションタイムアウトから計算されました。Patronistop_waitは考慮されませんでした。その結果、1回の再試行でセッションタイムアウトよりも時間がかかる可能性があり、パトローニはロックを解放して降格することを余儀なくされました。
この変更では、pingと接続タイムアウトをloop_waitの値の半分に設定し、接続問題の検出を高速化し、ロックを失う前に接続試行を再試行するための十分な時間を残します。
元の要求が成功した場合にのみetcdトポロジを更新しますAlexanderKukushkin
元の要求の後まで、クライアントに知られているEtcdトポロジの更新を延期します。クラスタートポロジを取得するときは、Etcdクラスター内のノードの既知の数に応じて、再試行タイムアウトを実装します。これにより、クライアントはノードの最新のリストよりも要求の結果を取得することを優先します。
どちらの変更も、ネットワークに問題が発生した場合にDCSへのPatroni接続をより堅牢にします。
Patronictl, monitoring and configuration
APIを介してストリーミングレプリカに関する情報を返しますFeikeSteenbergen
以前は、接続の問題などにより、変更のストリーミングに失敗したPostgreSQLインスタンスについてPatroniを照会する信頼できる方法がありませんでした。この変更により、/patroniエンドポイントを介してpg_stat_replicationの内容が公開されます。
patronictlscaffoldコマンドを追加OleksiiKliukin
Etcdでクラスター構造を作成するコマンドを追加します。クラスターはユーザー指定のsysidとリーダーで作成され、リーダーキーとメンバーキーの両方が永続化されます。このコマンドは、レプリカのみで構成されるPatroniクラスターがPatroniを認識しない外部マスターノードからレプリケートする、いわゆるマスターレス構成を作成するのに役立ちます。次に、リーダーキーを削除し、Patroniノードの1つを昇格させ、元のマスターをPatroniベースのHAクラスターに置き換えることができます。
PostgreSQLバイナリを見つけるための構成オプション
bin_dirを追加しますAntsAasma複数のPostgreSQLバージョンのインストールを同時にサポートするLinuxディストリビューションを使用する場合、PostgreSQLバイナリの場所を明示的に指定できると便利です。
AlejandroMartínezの
custom_confを使用して構成ファイルパスをオーバーライドできるようにしましたカスタム構成ファイルパスを許可します。これは、Patroni details によって管理対象外になります。
Bug fixes and code improvements
PatroniをPostgreSQL10以降の新しいバージョンスキーマと互換性のあるものにします。FeikeSteenbergen
PostgreSQLバージョンに基づいて条件付きリスタートを実行するときは、Patroniが2桁のバージョン番号を理解することを確認します。
pkgutilを使用してDCSモジュールを見つけます。AlexanderKukushkin
DCSモジュールを見つけるためには、ディレクトリを手動で走査する代わりに、専用のPythonモジュールを使用します。
Patroniを起動するときに常にon_startコールバックを呼び出します。AlexanderKukushkin
以前は、Patroniは、正しいロールで既に実行されているノードに接続する場合、コールバックを呼び出しませんでした。コールバックはクライアントをルーティングするために使用されることが多いため、接続ルーティングスキームで実行中のノードの登録に失敗する可能性があります。この修正により、Patroniは、既に実行中のノードに接続している場合でも、on_startコールバックを呼び出します。
アクティブなレプリケーションスロットをドロップしないでくださいMuratKabilov、OleksiiKliukin
マスターでアクティブな物理レプリケーションスロットをドロップしないようにします。いずれにせよ、PostgreSQLはそのようなスロットをドロップできません。この変更により、マスターで非Patroni管理のレプリカ/コンシューマを実行できるようになります。
PostgreSQLインスタンスの起動中にPatroni接続を閉じますAlexanderKukushkin
PostgreSQLノードが起動されたときに、Patroniに以前のすべての接続を強制的に閉じます。postmasterがSIGKILLで強制終了された場合、以前の接続を再利用するトラップを回避します。
メンバー名からスロット名を構成するときに無効な文字を置き換えますAntsAasma
スロット命名ルールに準拠していないスタンバイ名がスロットの作成とスタンバイの起動に失敗しないことを確認します。スロット名のダッシュをアンダースコアに置き換え、スロット名で使用できないその他のすべての文字をUnicodeコードポイントに置き換えます。
バージョン1.0¶
2016-07-05リリース
このリリースでは、HAクラスター全体のPostgreSQLおよびPatroni構成パラメーターを動的に変更できるグローバル動的構成を導入します。また、多数のバグ修正も提供します。
Upgrade notice
v0.90以前からアップグレードする場合、マスターの前に常にすべてのレプリカをアップグレードします。DCSにレプリケーション資格情報を保存しないため、古いレプリカは新しいマスターに接続できません。
Dynamic Configuration
動的グローバル構成の実装AlexanderKukushkin
新しいRESTAPIエンドポイント/configを導入して、HAクラスター全体マスターおよびすべてのレプリカに対してグローバルに設定する必要があるPostgreSQLおよびPatroni構成パラメーターを提供します。これらのパラメーターはDCSで設定され、多くの場合、PostgreSQLまたはPatroniを中断せずに適用できます。Patroniは、一部の値でPostgreSQLの再起動が必要な場合、APIを介して表示される/"pendingrestart/"と呼ばれる特別なフラグを設定します。その場合、APIを介して再起動を手動で発行する必要があります。
PatroniSIGHUPまたは/reloadへのPOSTにより、構成ファイルが再読み取りされます。
変更できるパラメーターと差分構成ソースの処理順序の詳細については、 Patroni configuration を参照してください。
構成ファイルの形式はv0.90から 変更されました 。Patroniはまだ古い構成ファイルとの互換性がありますが、ブートストラップパラメーターを利用するには、変更する必要があります。ユーザーは、 dynamic configuration documentation page を参照してそれらを更新することをお勧めします。
More flexible configuration *
postgresql構成とデータベース名を作成するPatroniは構成可能に接続しますMisjaHoebe
`database`および`config_base_name`構成パラメーターを導入します。とりわけ、PipelineDBおよびその他のPostgreSQLフォークでPatroniを実行できるようになります。
環境を介して一部のPatroni構成パラメーターを構成する機能を実装します。AlexanderKukushkin
これらには、スコープ、ノード名、名前空間、およびシークレットが含まれ、動的環境、つまりKubernetesでのパトロニの実行が簡単になります。詳細については、 supported environment variables を参照してください。
ビルトインのPatroniDockerコンテナを更新して、環境ベースの構成FeikeSteenbergenを利用します。
PatroniDockerイメージにZookeeperサポートを追加しましたAlexanderKukushkin
ZookeeperとExhibitionr構成オプションの分割AlexanderKukushkin
PatroniclがPatroniから構成を読み取るためにコードを再利用できるようにしました。AlexanderKukushkin
これにより、patroniclは環境ベースの構成を利用できます。
primary_conninfoでアプリケーション名をノード名に設定します。AlexanderKukushkin
これにより、特定のノードの同期レプリケーションの識別と構成が簡素化されます。
Stability, security and usability improvements
sysidをリセットし、バックアップのリストアが進行中のときにpg_controldataを呼び出さないようにしましたAlexanderKukushkin
この変更により、バックアップからこのノードの時間のかかる初期化中にPatroniAPIヘルスチェックによって生成されるノイズの量が削減されます。
多数のpg_rewindコーナーケースを修正しました。AlexanderKukushkin
ソースクラスタがマスターでない場合、pg_rewindの実行を避けてください。
さらに、新しいパラメーター remove_data_directory_on_rewind_failure がtrueに設定されていない限り、リワインドが失敗したときにデータディレクトリを削除しないでください。デフォルトではfalseです。
DCSのレプリケーション接続文字列からパスワードを削除しますAlexanderKukushkin
以前は、Patroniは常にDCSのPostgresURLからのレプリケーション資格情報を使用していました。これは、パトロニ構成から資格情報を取得するように変更されました。シークレットレプリケーションのユーザー名とパスワードは、DCSで公開されなくなりました。
デモートコール周りの非同期機構を修正しました。AlexanderKukushkin
Demoteは、DCS相互作用をブロックすることなく完全に非同期で実行されるようになりました。
patronictlが設定されている場合、承認ヘッダーを常に送信するようにしましたAlexanderKukushkin
これにより、Patroniがこれらに承認を必要とするように構成されている場合、patroniclは/"protected/"要求を発行することができます。つまり、再起動または再初期化。
SystemExit例外を正しく処理しますAlexanderKukushkin
SIGTERMを受信したときにPatroniが適切に停止しない問題を回避します
confdのサンプルhaproxyテンプレートAlexanderKukushkin
confideを使用してDCSのパトロニ状態からhaプロキシ構成を生成および動的に変更します
ドキュメントを改善および再構成して、新しいユーザーにとってより親しみやすいものにします。LauriApple
APIはpg_ctl停止中にrole=masterを報告する必要がありますAlexanderKukushkin
特にクラスター停止の場合、コールバック呼び出しの信頼性を高めます。さらに、`pg_ctl_timeout`オプションを導入して、`pg_ctl`を介してスタート、停止、およびリスタート呼び出しのタイムアウトを設定します。
etcdの再試行ロジックを修正しました。AlexanderKukushkin
再試行をより予測可能かつ堅牢にします。
Zookeeperコードの短いネットワークの中断に対する回復力を高めますAlexanderKukushkin
接続タイムアウトを減らして、Zookeeperの接続試行の頻度を増やします。
バージョン0.90¶
2016-04-27リリース
このリリースでは、Consulのサポートを追加し、新しい noloadbalance タグを含み、 clonefrom タグの動作を変更し、 pg_rewind 処理を改善し、 patronictl 制御プログラムを改善します。
Consul support
Consulサポートの実装AlexanderKukushkin
Patroniは、EtcdとZookeeperに加えて、Consulに対して実行されます。接続パラメーターはYAMLファイルで構成できます。
New and improved tags
noloadbalance タグを実装します。AlexanderKukushkin
このタグにより、Patroniは常にレプリカがロードバランサーで利用できないことを返すようになります。
clonefrom タグの実装を変更します。AlexanderKukushkin
以前は、ノード名を clonefrom に提供する必要があり、タグ付けされたレプリカは特定のノードからクローンを作成する必要がありました。新しい実装では、 clonefrom がブールタグになります。これがtrueに設定されている場合、レプリカは他のレプリカからクローンを作成する候補になります。複数の候補が存在する場合、レプリカはランダムに1つを選択します。
Stability and security improvements
多数の信頼性の向上AlexanderKukushkin
いくつかの偽のエラーメッセージを削除し、フェールオーバーの安定性を向上させ、DCSからのデータの読み取り、元のリーダーのシャットダウン、降格、および再接続に関するいくつかのコーナーケースに対処します。
停止中にパトローニの子供を殺さないようにシステムスクリプトを改善しました。JanKeirse、AlexanderKukushkin
以前は、Patroniを停止すると、 systemd もPostgreSQLにシグナルを送信していました。PatroniもPostgreSQLを自分自身で停止しようとしたため、さまざまなシャットダウン要求スマートシャットダウン、それに続く高速シャットダウンに送信されます。その結果、レプリカの切断が早すぎ、元のマスターは降格後に再参加できなくなりました。Alexanderによる事前調査を使用してJanによって修正されました。
元のマスターがレプリカとして再参加する前にpg_rewindを呼び出すことができなかった一部のケースを排除します。OleksiiKliukin
以前は、元のマスターがクラッシュした場合にのみ pg_rewind を呼び出していました。システムにpg_rewindが存在する限り、以前のマスターに対して常にpg_rewindを実行するようにこれを変更します。これにより、レプリカが最新の変更を取得する前に、つまり/"スマート/"のシャットダウン中にマスターがシャットダウンされた場合が修正されます。
特に、単体テストおよび受け入れテストの多数の改善により、ZookeeperとConsulAlexanderKukushkinのサポートが有効になりました。
TravisCIを高速化し、ZookeeperエキシビターとConsulAlexanderKukushkinに対する実行テストのサポートを実装します
単体テストと受け入れテストは両方とも、各コミットまたはプル要求でEtcd、Zookeeper、およびConsulに対して自動的に実行されます。
PatroniからPostgreSQLコマンドを呼び出す前に環境変数をクリアします。FeikeSteenbergen
これにより、Patroniが管理するPostgreSQLクラスターに接続することにより、システム環境変数を読み取る可能性を防ぎます。
Configuration and control changes
patroniclとPatroni構成の統合FeikeSteenbergen
patronictlは、Patroni自分自身と同じ構成ファイルを使用できます。
Patroniが環境変数から構成を読み取れるようにしますOleksiiKliukin
これにより、Patroniの構成を自動的に生成したり、さまざまなソースから単一の構成をマージしたりすることが簡単になります。
APIから返される情報にデータベースシステム識別子を含めますFeikeSteenbergen
使用可能なすべてのDCSに delete_cluster を実装します。AlexanderKukushkin
patroniclでのEtcd以外のDCSのサポートを有効にします。
バージョン0.80¶
2016-03-14リリース
このリリースでは、 カスケードレプリケーション のサポートを追加し、 スケジュールされたフェイルオーバー を提供することによりPatroni管理を簡素化します。新しいリリースに移行するために、Patroniの古いバージョン特に0.78をこれと組み合わせて使用することができます。スケジュールされたフェイルオーバーとカスケードレプリケーション関連の機能は、Patroni0.80以降でのみ動作することに注意してください。
Cascading replication
パトロニノードOleksiiKliukinの replicatefrom および clonefrom タグのサポートを追加します。
タグ replicatefrom により、レプリカはマスターではなく、ソースとして任意のノードを使用できます。 clonefrom は、初期バックアップに同じことを行います。これらを組み合わせることで、Patroniはカスケードレプリケーションを完全にサポートできます。
実行中のレプリケーション接続OleksiiKliukinなしでもレプリカを初期化する実行レプリケーションメソッドのサポートを追加します。
これは、S3またはFTPに保存されているスナップショットからレプリカを作成するために役立ちます。実行中のレプリケーション接続を必要としないレプリケーション方法は、yaml構成で no_master:true を提供する必要があります。レプリケーション接続が存在する場合、これらのスクリプトは引き続き呼び出されます。
Patronictl, API and DCS improvements
スケジュールされたフェイルオーバーを実装しますFeikeSteenbergen。
patroniclまたはAPI呼び出しを使用して、将来の特定の時刻にフェールオーバーが発生するようにスケジュールできます。
patroniclに dbuser および password パラメーターのサポートを追加しましたFeikeSteenbergen。
PostgreSQLバージョンをヘルスチェック出力に追加しますFeikeSteenbergen
patroniclのZookeeperサポートを向上させました。OleksandrShulgin
python-etcd0.43への移行AlexanderKukushkin
Configuration
Patroni(JanKeirse)のサンプルシステム構成スクリプトを追加します。
PatroniがDB接続の構成ファイルで指定されたスーパーユーザー名を無視する問題を修正しました。AlexanderKukushkin
PatroniAlexanderKukushkinによって起動されたポストマスターの別のセッションIDとプロセスグループを作成することにより、CTRL-Cの処理を修正します。
Tests
実行中のPatroniAlexanderKukushkin、OleksiiKliukinの現実のシナリオを確認するために、 behave を使用して受け入れテストを追加します。
テストは、 behave コマンドを使用して手動で起動できます。また、プル要求の場合およびコミット後にも自動的に起動されます。
一部の古いバージョンのリリースノートは project's github page _で見つけることができます。