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