リリースノート¶
バージョン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
Podロールラベルを構成可能にします。(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)永続的な論理スロットがない場合、Patroniは、プライマリのLSNが前進しなかった場合でも、ハートビートループごとに
/statusを更新していました。古いプライマリーがリーダーレースに勝つことを許可しないでください(AlexanderKukushkin)
リソース不足のために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
シェルを介して
archive_commandを実行します(Waynerv)Patroniは、シングルユーザーモードでクラッシュリカバリを実行する前、または
pg_rewindの前に、いくつかのWALセグメントをアーカイブする場合があります。archive_commandに&&のようないくつかのシェルオペレーターが含まれている場合、Patroniでは動作しませんでした。/"onswitchover/"シャットダウンチェックを修正しました(PolinaBungina)
指定された候補がまだストリーミング中であり、シャットダウンチェックを受信しなかった可能性がありますが、他のいくつかのノードが正常であったため、リーダーキーが削除されました。
/"isprimary/"チェックを修正しました(AlexanderKukushkin)
リーダーレース中、レプリカは古いリーダー上のPostgresがまだプライマリとして実行されていることを認識できませんでした。
patronictl listを修正(AlexanderKukushkin)tsv、json、およびyaml出力形式にクラスター名フィールドがありませんでした。一時停止後の
pg_rewindの動作を修正しました。(AlexanderKukushkin)特定の条件下では、Patroniは、メンテナンスモードを終了した後、
pg_rewindを使用してfalseプライマリをクラスターに参加できませんでした。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クラスターにアクセスできない場合、パトローニは
/v2エンドポイントにアクセスできないことを報告していました。可能であれば
patronictlでクォーラム読み取りを使用します。(AlexanderKukushkin)EtcdまたはConsulクラスターは読み取り専用に低下させることができましたが、
patronictlビューからはすべて問題ありませんでした。これで、エラーで失敗します。splitbrainが構成内の名前を重複しないようにしました。(MarkPekala)
Patroniの起動時に、同じ名前のノードがDCSに登録されているかどうかを確認し、そのRESTAPIをクエリしようとします。RESTAPIにアクセスできる場合Patroniはエラーで終了します。ヒューマンエラーから身を守るのに役立ちます。
Patroniの実行中にクラッシュした場合、Postgresが復旧していない状態で起動します。(AlexanderKukushkin)
回復時間を短縮し、不必要なタイムラインの増分から役立ちます。
Bugfixes
SIGHUPを受信してもRESTAPISSL証明書がリロードされませんでした。(IsraelBarthRubio)
回帰は3.0.3で導入されました。
max_connectionsなどのパラメーターの整数GUC検証を修正しました。(FeikeSteenbergen)Patroniは、引用符で囲まれた数値が好きではありませんでした。回帰は3.0.3で導入されました。
synchronous_modeの問題を修正(AlexanderKukushkin)txid_current()をsynchronous_commit=offで実行して、synchronous_mode_strictが有効になっているときに誤って不在の同期スタンバイを待機しないようにします。
バージョン3.0.3¶
New features
PostgreSQL16beta1との互換性(AlexanderKukushkin)
拡張GUCのバリデータールール。
PostgreSQLGUCのバリデータを拡張可能にしました。(IsraelBarthRubio)
バリデータールールは、
patroni/postgresql/available_parameters/ディレクトリにあるYAMLファイルからロードされます。ファイルはアルファベット順に並べられ、次々と適用されます。非標準のPostgresディストリビューション用のカスタムバリデーターを持つことが可能になります。restapi.request_queue_sizeオプションを追加しました。(AndreyZhidenkov、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コールバックスクリプトに渡します。(AlexanderKukushkin、PolinaBungina)Patroniは、昇格時に誤って
promotedロールをon_role_changeコールバックスクリプトに渡していました。渡されたロール名はmasterに戻りました。このリグレッションは3.0.0で導入されました。
バージョン3.0.0¶
このバージョンでは Citus _との統合が追加され、プライマリを降格せずに一時的なDCSの停止を生き残ることが可能になります。
警告
バージョン3.0.0は、Python2.7をサポートする最後のリリースです。今後のリリースでは、3.7より前のPythonバージョンのサポートが終了します。
RAFTサポートは非推奨です。メンテナンスには万全を期しておりますが、いかなる保証も責任も負えません。
このバージョンは、/"primary/"を優先して、/"master/"を取り除くための最初のステップです。次のメジャーリリースへのアップグレードは、少なくとも3.0.0を実行している場合にのみ確実に機能します。
New features
DCSフェイルセーフモード(AlexanderKukushkin、PolinaBungina)
この機能が有効になっている場合、Patroniクラスターは一時的なDCSの停止から生き残ることができます。 documentation で詳細を見つけることができます。
Citusのサポート(AlexanderKukushkin、PolinaBungina、JelteFennema)
Patroni enables easy deployment and management of Citus clusters with HA. Please check here page for more information.
Improvements
不明だがアクティブなレプリケーションスロットをドロップするときに繰り返し発生するエラーを抑制しました。(MichaelBanck)
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ステータスコードを取得するとすぐに接続を閉じます。パトローニがSSL接続を適切にシャットダウンする時間はありません。
arm64のサンプルDockerfileを調整します(PolinaBungina)
明示的な
amd64およびx86_64を削除します。libnss_files.so.*を削除しないでください。
Security improvements
非レプリケーション接続に
search_path=pg_catalogを強制します。(AlexanderKukushkin)Patroniはスーパーユーザー接続に大きく依存しているため、
pg_catalogの対応するオブジェクトと同じ名前と署名を持つpublicスキーマのユーザー定義関数および/またはオペレーターを使用して実行される攻撃から保護したいと思います。そのため、search_path=pg_catalogはPatroniによって作成されたすべての接続(レプリケーション接続を除く)に適用されます。pg_stat_statementsにパスワードが記録されないようにしました。(FeikeSteenbergen)これは、ユーザーの作成時に
pg_stat_statements.track_utility=offを設定することで実現されます。
Bugfixes
proxy_addressをオプションとして宣言します。(DenisLaxalde)それは事実上非必須オプションであるため。
安全でないオプションの動作を改善しました。(AlexanderKukushkin)
RESTAPIリクエストにクライアント証明書が使用された場合、ctlの
insecureオプションが正しく機能しませんでした。新しいクラスターがブートストラップされるときに
bootstrap.dcsからウォッチドッグ構成を取得します。(MattBaker)Patroniは、DCSのブートストラップに使用される構成を取得するのではなく、新しいクラスターをブートストラップするときにデフォルトでウォッチドッグを最初に構成していました。
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サポートが本番環境対応として宣言されています。いかだのパトローニはベータのままです。
New features
patroni --validate-configを改善(DenisLaxalde)configが無効な場合はコード1で終了し、エラーをstderrに出力します。
一時停止中にレプリケーションスロットをドロップしないでください(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ファイルをアーカイブすることにより、この問題を軽減するだけでなく、一般的にアーカイブエクスペリエンスを継続的に改善します。KubernetesServiceを作成しようとするときに
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の期限切れのトークンを処理するlease_grant(monsterxx03)
エラーが発生した場合は、新しいトークンを取得して要求を再試行します。
GET /read-only-syncエンドポイントのバグを修正しました。(AlexanderKukushkin)以前のリリースで導入され、効果的に機能しませんでした。
datadirstorageが消えた場合の対処法(AlexanderKukushkin)
Patroniは、PGDATAが存在し、空ではないことを定期的にチェックしていますが、ストレージに問題がある場合、
os.listdir()はOSError例外を発生させ、ハートビートループを壊しています。ユーザーのバックエンドが閉じるのを待っているときに
master_stop_timeoutを適用しました。(AlexanderKukushkin)ユーザーバックエンドのように見えるものは、実際には停止に失敗したバックグラウンドワーカー(例、CitusMaintenanceDaemon)である可能性があります。
postgresql.listenに*:<port>を受け入れました(DenisLaxalde)patroni --validate-configは、無効であると不平を言っていました。Raftでのタイムアウトの修正(AlexanderKukushkin)
Patroniまたはatonictlが起動すると、既知のメンバーからRaftクラスタートポロジーを取得しようとします。これらの呼び出しは、適切なタイムアウトなしで行われました。
トークンが変更された場合、Consulサービスを強制的に更新します。(JohnA.Lotoski)
そうしないと、エラー「/"rpcerrorメーキングコール: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でない場合に役立ちます。ウォッチドッグに
ppc64leのサポートを追加しました。(Jean-MichelScheiwiler)また、一部の非x86プラットフォームでのウォッチドッグサポートを修正しました。
aws.pyコールバックを
botoからboto3に切り替えました。(AlexanderKukushkin)
.xは2018年以来放棄され、python3.9で失敗します。
K8s(HaitaoLi)のサービスアカウントトークンを定期的に更新します
Kubernetesv1.21以降、サービスアカウントトークンの有効期限は1時間です。
/read-only-syncモニタリングエンドポイントを追加しました(Dennis4b)/read-onlyに似ていますが、同期レプリカのみが含まれています。
Stability improvements
プライマリとの論理デコードセットアップに構成の不一致がある場合、論理レプリケーションスロットをレプリカにコピーしないでください。(AlexanderKukushkin)
スロットが
pluginまたはdatabase構成オプションと一致しない場合、レプリカはプライマリから論理レプリケーションスロットをコピーしません。以前は、スロットがこれらの構成オプションと一致するかどうかのチェックは、レプリカがスロットをコピーして開始するまで実行されなかったため、不要な再起動が繰り返されました。PostgreSQLv12+のリカバリ構成パラメーターの特別な処理(AlexanderKukushkin)
レプリカとして起動している間、Patroniは
postgresql.confを更新し、リーダーアドレスが変更された場合に再起動/リロードできるはずですpg_settingsから照会する代わりに、現在のパラメーター値をキャッシュすることにより。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)
特定の(不明な)条件下では、ウォッチャーが古くなる場合があります。その結果、HTTPステータスコード409が原因で
attempt_to_acquire_leader()メソッドが失敗する可能性があります。その場合、ウォッチャー接続をリセットし、最初から再起動します。
バージョン2.1.3¶
New features
patronictlの暗号化されたTLSキーのサポートを追加しました。(AlexanderKukushkin)ctl.keyfile_passwordまたはPATRONI_CTL_KEYFILE_PASSWORD環境変数を介して構成できます。/metricsエンドポイントにメトリックを追加しました。(AlexandrePereira)
具体的には、
patroni_pending_restartおよびpatroni_is_paused。スタンバイクラスタ構成で複数ホストを指定できるようにしました。(MichaelBanck)
スタンバイクラスターが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証明書の置き換えに関する/"portinuse/"エラーを修正しました。(AntsAasma)
証明書を切り替えると、同時API要求で競合状態が発生しました。置換期間中にアクティブなものがあると、置換は使用中のポートエラーでエラーになり、PatroniはアクティブなAPIサーバーのない状態でスタックします。
パスワードに
%文字が含まれる場合のクラスターブートストラップのバグを修正しました。(BastienWirtz)ブートストラップメソッドは、すべてのパラメーターを適切に引用して
DOブロックを実行しますが、cursor.execute()メソッドは、パラメーターが渡された空のリストが好きではありませんでした。/"AttributeError:noattribute'leader'/"例外を修正しました。(HrvojeMilković)
同期モードが有効になっていて、DCSコンテンツが一掃された場合に発生する可能性があります。
ダイバージェンスタイムラインチェックのバグを修正しました。(AlexanderKukushkin)
Patroniは、タイムラインがずれていると誤って想定していました。pg_rewindの場合、問題は発生しませんでしたが、pg_rewindが許可されておらず、
remove_data_directory_on_diverged_timelinesが設定されている場合、元のリーダーが再初期化されました。
バージョン2.1.2¶
New features
psycopg>=3.0(AlexanderKukushkin)との互換性デフォルトでは
psycopg2が優先されます。psycopg>=3.0`は、 ``psycopg2` が利用できないか、そのバージョンが古すぎる場合にのみ使用されます。RESTAPIに
dcs_last_seenフィールドを追加しました。(MichaelBanck)このフィールドは、クラスターメンバーがDCSと正常に通信した最後に(UNIXエポックとして)記録します。これは、ネットワークパーティションを特定および/または分析するのに役立ちます。
pg_controldataが/"shutdown/"を報告したらリーダーロックを解放します。(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が熱心に回復しようとしてログにあふれます。
降格する前にログを追加します。これには時間がかかる場合があります。(MichaelBanck)
降格が完了するまでに時間がかかる場合があり、ログを見ても正確に何が起こっているのかが明らかではない場合があります。
「私は」ステータスメッセージを改善しました。(MichaelBanck)
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マシンのキャッシュから重複するホストを削除します。(MichaelBanck)
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がdemote時に更新されませんでした。(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)pg_stat_replicationビューは、state = 'streaming'場合でも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、MichaelBanck)/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証明書ファイルがその場で更新された場合、パトローニはリロードを実行しませんでした。
kerberosauthが使用されている場合、pgpassdirを作成しないでください。(KostiantynNemchenko)
Kerberosとパスワード認証は相互に排他的です。
カスタムブートストラップの小さな問題を修正しました(AlexanderKukushkin)
PITRを実行する場合にのみ
hot_standby=offでPostgresを起動し、PITRの完了後に再起動します。
Bugfixes
kazoo-2.7+(AlexanderKukushkin)との互換性Patroniは自分で再試行を処理しているため、利用可能な接続がない場合、Zookeeperクラスターへのリクエストはすぐに破棄されるという
kazooの古い動作に依存しています。プロキシを介して接続していることがわかっている場合、Etcdv3クラスターのバージョンを明示的に要求します。(AlexanderKukushkin)
PatroniはgPRC-gatewayを介して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
カスタムブートストラップを行うときに
hot_standby = offでpostgresを起動します。(IgorYanchenko)カスタムブートストラップ中に、Patroniはベースバックアップを復元し、Postgresを起動し、リカバリが完了するまで待機しています。スタンバイの一部のPostgreSQLパラメーターは、プライマリよりも小さくすることはできません。新しい値(WALから復元)が構成された値よりも高い場合、Postgresはパニックして停止します。このような動作を回避するために、
hot_standbyモードなしでカスタムブートストラップを実行します。必要なウォッチドッグが正常でない場合にユーザーに警告します。(NicolasThauvin)
ウォッチドッグデバイスが必要なモードで書き込みできないか、見つからない場合、メンバーを昇格できません。この構成ミスを検索する場所をユーザーに示す警告を追加しました。
シングルユーザーモードリカバリの冗長性が向上しました。(AlexanderKukushkin)
PatroniがPostgreSQLが明確にシャットダウンされなかったことに気付いた場合、特定の場合、シングルユーザーモードで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)使用時の睡眠時間の問題を修正
Patroniが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クラスタートポロジの検出を実行し、必要な場合は認証します。Patroniはこのサーバーで認証を実行しようとしていて、次のノードで再試行する代わりに失敗しました。
psutilcmdline()で空のリストを返すケースを処理しました。(AlexanderKukushkin)
ゾンビプロセスはまだpostmastersの子ですが、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)Patroniconfigで
patronictlを使用する場合、self_addrpartner_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
[BETA]PureRAFTにPatroniのサポートを実装しました(AlexanderKukushkin)
これにより、Etcd、Consul、Zookeeperなどのサードパーティの依存関係なしでPatroniを実行できます。HAの場合、3つのPatroniノード、またはPatroniで2つのノードと
patroni_raft_controllerで1つのノードを実行する必要があります。詳細については、patroni_raft_controllerを確認してください。[BETA]gPRC-gatewayを介してEtcdv3プロトコルのサポートを実装しました(AlexanderKukushkin)
Etcd3.0は4年以上前にリリースされ、Etcd3.4ではv2がデフォルトで無効になっています。v2がEtcdから完全に削除される可能性もあるため、PatroniにEtcdv3のサポートを実装しました。それを使い始めるには、
etcd3セクションを明示的に作成する必要がありますPatroni構成ファイルです。複数の同期スタンバイのサポート(クリシュナサラブ)
これにより、複数の同期レプリカでクラスターを実行できます。同期レプリカの最大数は、新しいパラメーター
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ヘッダーの後にdoubleCRLFを書き込みました。(SergeyBurladyan)HAProxyは単一の
CRLFに満足していましたが、Consulヘルスチェックは接続の切断と予期しないEOFについて不平を言いました。GET /clusterは、Zookeeper(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は、メンバー/"None/"にアクセスできないという警告を表示していました。メンバー
conn_urlが欠落している場合を処理します。(AlexanderKukushkin)K8sでは、Patroniがまだ実行されていないため、ポッドに必要なアノテーションがない可能性があります。
patronictlを失敗させていました。ASCIIクラスタートポロジーを印刷する機能を追加しました。(MaximFedotov、AlexanderKukushkin)
カスケードレプリケーションを使用してクラスターの概要を取得すると非常に役立ちます。
patronictl flush switchoverを実装する(AlexanderKukushkin)それ以前は、
patronictl flushはスケジュールされた再起動のキャンセルのみをサポートしていました。
Bugfixes
既存のPGDATAを使用したクラスターのブートストラップ中の属性エラー(KrishnaSarabu)
/historyキーを作成/更新しようとすると、パトロニはDCSでまだ作成されていないClusterConfigオブジェクトにアクセスしていました。Consulでの例外処理の改善(AlexanderKukushkin)
touch_member()メソッドの未処理の例外により、Patroniプロセス全体がクラッシュしました。post_initスクリプトにsynchronous_commit=localを適用しました。(AlexanderKukushkin)Patroniは、ユーザー(
replication、rewind)を作成するときに既にそれを行っていましたが、post_initの場合にそれを見逃したのは見落としでした。その結果、スクリプトが自分で内部的に実行していない場合、synchronous_modeのブートストラップは終了できませんでした。Consulプールマネージャー(ponvenkates)の
maxsizeを増やしましたデフォルトの
size=1では、いくつかの警告が生成されました。PatroniはPostgresを実行中として誤って報告していました(AlexanderKukushkin)
たとえば、ディスク不足エラーによりPostgresがクラッシュした場合、状態は更新されませんでした。
欠損値または空の値の代わりに
*をpgpassに入れました。(AlexanderKukushkin)たとえば、
standby_cluster.portが指定されていない場合、pgpassファイルが誤って生成されました。特殊キャラクターを使用してリーダーノードでの物理レプリケーションスロットの作成をスキップします(クリシュナサラブ)
Patroniは、名前に「-」などの特殊文字(たとえば、/"abc-us-1/")が含まれている場合、リーダーノードの休止スロット(
slotsが定義されている場合)を作成しているように見えました。カスタムブートストラップで存在しない
pg_hba.confを削除しないようにしました。(KrishnaSarabu)カスタムブートストラップ後に
pg_hba.confがたまたまpgdatadirの外部にある場合、Patroniは失敗していました。
バージョン1.6.5¶
New features
マスターストップタイムアウト(クリシュナサラブ)
Postgresを停止するときにPatroniが待機できる秒数。
synchronous_modeが有効な場合にのみ有効です。0より大きい値に設定され、synchronous_modeが有効になっている場合、master_stop_timeoutで設定された値を超える値で停止操作が実行されている場合、PatroniはSIGKILLをポストマスターに送信します。耐久性/可用性のトレードオフに従って値を設定します。パラメーターが設定されていないか、非正の値に設定されている場合、master_stop_timeoutは効果がありません。プライマリの名前で永続的な物理スロットを作成しないでください(AlexanderKukushkin)
レプリカがダウンしているときにプライマリがWALセグメントをリサイクルするのは一般的な問題です。これで、固定数のノードと名前が変更されない静的クラスターの優れたソリューションができました。
slotsのすべてのノードの名前をリストするだけでよいので、ノードがダウンしている(DCSに登録されていない)ときにプライマリがスロットを削除しません。ConfigValidatorの最初のドラフト(IgorYanchenko)
Patroni構成を検証するには、
patroni --validate-config patroni.yamlを使用します。タイムライン履歴の最大長を構成する可能性(KrishnaSarabu)
Patroniは、フェールオーバー/スイッチオーバーの履歴をDCSの
/historyキーに書き込みます。時間の経過とともにこのキーのサイズは大きくなりますが、ほとんどの場合、興味深いのは最後の数行だけです。max_timelines_historyパラメーターを使用すると、DCSに保持するタイムライン履歴アイテムの最大数を指定できます。Kazoo2.7.0互換性(DanyalProut)
Kazooの一部の非公開メソッドは署名を変更しましたが、Patroniはそれらに依存していました。
Improvements in patronictl
メンバーのタグを表示する(KostiantynNemchenko、AlexanderKukushkin)
タグはすべてのノードに対して個別に構成されており、それらの概要を取得する簡単な方法はありませんでした
メンバーのアウトプットを改善する(AlexanderKukushkin)
冗長なクラスター名は、すべての行に表示されなくなり、テーブルヘッダーにのみ表示されます。
$ patronictl list
+ Cluster: batman (6813309862653668387) +---------+----+-----------+---------------------+
| Member | Host | Role | State | TL | Lag in MB | Tags |
+-------------+----------------+--------+---------+----+-----------+---------------------+
| postgresql0 | 127.0.0.1:5432 | Leader | running | 3 | | clonefrom: true |
| | | | | | | noloadbalance: true |
| | | | | | | nosync: true |
+-------------+----------------+--------+---------+----+-----------+---------------------+
| postgresql1 | 127.0.0.1:5433 | | running | 3 | 0.0 | |
+-------------+----------------+--------+---------+----+-----------+---------------------+
設定ファイルが明示的に指定されたが見つからない場合に失敗します。(KaarelMoppel)
以前は、
patronictlはDEBUGメッセージのみを報告していました。初期化されていないK8sポッドがパトロールを破損する問題を解決しました(AlexanderKukushkin)
Patroniは、K8の特定のポッドアノテーションに依存しています。Patroniポッドの1つが停止または開始するとき、有効なアノテーションはまだなく、
patronictlは例外で失敗していました。
Stability improvements
K8sAPIサーバーへのLIST呼び出しが失敗した場合、1秒のバックオフを適用します。(AlexanderKukushkin)
ほとんどの場合、ログのフラッディングを回避する必要がありますが、メインスレッドの枯渇を防ぐのにも役立ちます。
retry-afterHTTPヘッダーがK8sAPIによって返された場合に再試行します。(AlexanderKukushkin)K8sAPIサーバーがリクエストで圧倒されている場合、再試行を求める場合があります。
postmasterから
KUBERNETES_環境をスクラブしました。(FeikeSteenbergen)KUBERNETES_環境変数はPostgreSQLには必要ありませんが、postmasterに公開すると、バックエンドと通常のデータベースユーザー(pl/perlなどを使用)にも公開されます。再初期化時にテーブルスペースをクリーンアップします。(KrishnaSarabu)
再初期化中に、Patroniは
PGDATAのみを削除し、ユーザー定義のテーブルスペースディレクトリを残しました。これにより、Patroniがreinitでループします。この問題の以前の作業は、PGDATAスクリプトを実装することでした。プロモートが発生した後に
CHECKPOINTを明示的に実行しました。(AlexanderKukushkin)新しいプライマリが
pg_rewindで使用可能になるまでの時間を短縮するのに役立ちます。Etcdメンバーのスマートリフレッシュ(AlexanderKukushkin)
PatroniがEtcdクラスターのすべてのメンバーでリクエストの実行に失敗した場合、Patroniは次回再試行する前に、IP/ホストの変更について
AまたはSRVレコードを再チェックします。pg_controldataから欠損値をスキップしました。(FeikeSteenbergen)PGDATAと一致しないバージョンのバイナリを使用しようとすると、値が欠落します。PatroniはとにかくPostgresを起動しようとしますが、Postgresはメジャーバージョンが一致しないと不平を言い、エラーで中止します。
Bugfixes
必要に応じてConsulのSSL検証を無効にします。(JulienRiou)
urllib3の特定のバージョン以降、SSL検証を効果的に無効にするには、cert_reqsを明示的にssl.CERT_NONEに設定する必要があります。HAループのすべてのサイクルでレプリケーション接続を開かないようにしました。(AlexanderKukushkin)
回帰は1.6.4で導入されました。
プライマリに障害が発生したときに
on_role_changeコールバックを呼び出します。(AlexanderKukushkin)場合によっては、仮想IPが古いプライマリに接続されたままになる可能性があります。回帰は1.4.5で導入されました。
pg_rewindが成功した後にpostgresが起動した場合、リワインド状態をリセットします。(AlexanderKukushkin)
このバグの結果、Patroniは起動してpostgresを一時停止モードで手動でシャットダウンしていました。
recovery.confをチェックするときにrecovery_min_apply_delayをmsに変換します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-domainソケットを使用しようとしないでください
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パトロニ構成で定義されておらず、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のモジュールをインポートする必要はありません。飼育係。メモリ使用量を削減し、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を介して、またはSIGHUPをPatroniプロセスに送信することによりリロードを行っている場合、通常は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)さまざまなForeignDataWrappersの実行に関する多くの問題を解決します。
Stability improvements
K8sAPIで作業するときにLIST+WATCHを使用してください(AlexanderKukushkin)
オブジェクトの変更(ポッド、エンドポイント/構成マップ)を効率的に受信でき、K8sマスターノードのストレスが軽減されます。
ブートストラップ中にPGDATAが空でない場合のワークフローを改善しました。(AlexanderKukushkin)
initdbソースコードによると、lost+foundと.dotfilesのみがある場合、PGDATAが空であると考える場合があります。現在、パトローニは同じことをしています。PGDATAがたまたま空ではなく、同時にpg_controldataの観点から有効でない場合、Patroniは文句を言って終了します。すべてのHAループで高価な
os.listdir()を呼び出さないようにしました。(AlexanderKukushkin)システムにIOストレスがかかっている場合、
os.listdir()の実行には数秒(または場合によっては数分)かかり、PatroniのHAループに悪影響を与える可能性があります。これにより、更新がないためにリーダーキーがDCSから消えることさえあります。PGDATAが空でないことを確認するより良い、より安価な方法があります。次に、PGDATA内のglobal/pg_controlファイルの存在を確認します。ログインフラストラクチャのいくつかの改善(AlexanderKukushkin)
以前は、ロギングスレッドが
daemonスレッドだったため、シャットダウン時にログの最後の数行が失われる可能性がありました。python3.4以降で
spawnマルチプロセッシングスタートメソッドを使用します。(MaciejKowalczyk)スレッド化とマルチプロセッシングがうまく混ざらないことは、Pythonで知られている issue _です。デフォルトの方法
forkからspawnへの切り替えは、推奨される回避策です。そうしないと、Postgresが実際に起動して実行されているときに、Postmasterの開始プロセスがハングし、Patroniが無期限にINFO: restarting after failure in progressを報告する可能性があります。
Improvements in REST API
RESTAPIでクライアント証明書を確認できるようにしました。(AlexanderKukushkin)
verify_clientがrequiredに設定されている場合、PatroniはすべてのRESTAPI呼び出しのクライアント証明書を確認します。optionalに設定されている場合、クライアント証明書は、安全でないすべてのRESTAPIエンドポイントについてチェックされます。Postgresが実行されていない場合、
GET /replicaヘルスチェック要求の応答コード503を返します。(AlexanderAnikin)Postgresは、クライアント接続の受け入れを開始する前に、リカバリにかなりの時間を費やす場合があります。
/historyおよび/clusterエンドポイントを実装しました。(AlexanderKukushkin)/historyエンドポイントは、DCSのhistoryキーの内容を示します。/clusterエンドポイントは、すべてのクラスターメンバーと、保留中およびスケジュールされた再起動またはスイッチオーバーなどのサービス情報を表示します。
Improvements in Etcd support
RetryonEtcdRAFTinternalerror(AlexanderKukushkin)
Etcdノードがシャットダウンされると、
response code=300, data='etcdserver: server stopped'を送信します、これにより、Patroniはプライマリを降格させました。Etcd要求の再試行をあまりにも早くあきらめないでください。(AlexanderKukushkin)
ネットワークに問題が発生したとき、PatroniはEtcdノードのリストをすぐに使い果たし、
retry_timeout全体を使用せずにあきらめていました。
Bugfixes
pg_rewindユーザーに実行権限を付与するときにsynchronous_commitを無効にします。(kremius)ブートストラップが
synchronous_mode_strict: trueで完了すると、非同期ノードが利用可能になったため、`GRANTEXECUTE`ステートメントは無期限に待機していました。python3.7のメモリリークを修正しました。(AlexanderKukushkin)
Patroniは
ThreadingMixInを使用してRESTAPIリクエストを処理しており、python3.7では、デフォルトでデーモン以外のすべてのリクエストに対してスレッドが生成されました。非同期アクションの競合状態を修正しました。(AlexanderKukushkin)
停止したPostgresを回復しようとする試みによって
patronictl reinit --forceが上書きされる可能性がありました。これは、ベースバックアップの実行中にPatroniがPostgresを起動しようとしている状況になりました。postmaster_start_time()メソッドの競合状態を修正しました。(AlexanderKukushkin)メソッドがRESTAPIスレッドから実行される場合、別のカーソルオブジェクトを作成する必要があります。
名前に大文字が含まれる同期スタンバイが昇格しない問題を修正(AlexanderKukushkin)
application_nameをsynchronous_standby_namesの値と比較しながらPostgresが同じことをしていたため、名前を小文字に変換しました。新しいものを開始する前に、コールバックプロセスと一緒にすべての子供たちを殺します。(AlexanderKukushkin)
そうしないと、bashでコールバックを実装するのが難しくなり、最終的に2つのコールバックが同時に実行されている状況につながる可能性があります。
「スタートに失敗しました」問題を修正しました(AlexanderKukushkin)
特定の条件下では、Postgresが起動して実行されているにもかかわらず、Postgresの状態が「startfailed」に設定される場合があります。
バージョン1.6.0¶
このバージョンでは、PostgreSQL12との互換性が追加され、PostgreSQL11以降でスーパーユーザーなしでpg_rewindを実行できるようになり、IPv6サポートが有効になります。
New features
Psycopg2は要件から削除され、個別にインストールする必要があります。(AlexanderKukushkin)
2.8.0以降
psycopg2は2つの異なるパッケージpsycopg2およびpsycopg2-binaryに分割され、ファイルシステム上の同じ場所に同時にインストールできました。依存関係地獄の問題を軽減するために、ユーザーにインストール方法を選択させます。利用可能なオプションがいくつかあります。psycopg2を参照してください。PostgreSQL12(AlexanderKukushkin)との互換性
PostgreSQL12以降、
recovery.confはなくなり、以前のすべての回復パラメーターはrecovery.confに変換されます。ALTER SYSTEM SET primary_conninfoなどから保護するために、Patroniはpostgresql.auto.confを解析し、そこからすべてのスタンバイおよびリカバリパラメーターを削除します。Patroniconfigは引き続き下位互換性があります。たとえば、restore_commandがGUCであるにもかかわらず、postgresql.recovery_conf.restore_commandセクションで指定できます。パトロニは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認証を使用できるようにします
Manage
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
二段階ロギング(AlexanderKukushkin)
すべてのログメッセージは、最初にメモリ内キューに書き込まれ、後で非同期に別のスレッドからstderrまたはファイルにフラッシュされます。最大キューサイズは制限されています(設定可能)。制限に達すると、Patroniはログを失い始めますが、これはHAループをブロックするよりも優れています。
GET/OPTIONSAPI呼び出しとレイテンシーのデバッグログを有効にします。(JanTomsa)
HAProxy、Consul、またはどのノードがプライマリ/レプリカであるかを決定するその他のツールによって実行されるヘルスチェックのデバッグに役立ちます。
Retryでキャッチされた例外をログに記録します。(DanielKucera)
試行回数またはタイムアウトに達した場合、最後の例外をログに記録します。DCSへの通信が失敗したときの問題のデバッグに役立つことを願っています。
Improvements in patronictl
スケジュールされたスイッチオーバーとリスタートのダイアログを強化しました(RafiaSabih)
以前のダイアログでは、スケジュールされたアクションが考慮されなかったため、誤解を招きました。
設定ファイルが存在するかどうかを確認します。(WilfriedRoset)
指定されたファイル名が存在しない場合、静かに無視するのではなく(誤解につながる可能性があります)、構成ファイルについて冗長になります。
EDITORのフォールバック値を追加しました。(WilfriedRoset)EDITOR環境変数が定義されていない場合、patronictl edit-configは`PatroniCtlException`で失敗していました。新しい戦略は、editorを試すことですvi、ほとんどのシステムで利用できるはずです。
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`を使用し、`multiprocessing.Pipe`を使用して、ポストマスターpidをPatroniプロセスに送信します。それ以前はパイプを使用していましたが、stdinを閉じた状態でpostmasterプロセスを終了していました。
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が強制されます。Patroni側でこの問題を解決しました。
バージョン1.5.5¶
このバージョンでは、以前のマスターの自動再初期化の可能性が導入され、patanictlリストの出力が改善され、多数のバグが修正されました。
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はデータディレクトリを消去し、元のマスターを自動的に再初期化します。
パトロンリストにタイムラインに関する情報を表示します。(AlexanderKukushkin)
古いレプリカの検出に役立ちます。それに加えて、ポート値がデフォルトでない場合、または同じホストで複数のメンバーが実行されている場合、`Host`には':{port}'が含まれます。
$SCOPE-configエンドポイントに関連付けられたヘッドレスサービスを作成します。(AlexanderKukushkin)
/"config/"エンドポイントは、クラスター全体のPatroniおよびPostgres構成、履歴ファイルに関する情報を保持し、最後に最も重要なことに、`initialize`キーを保持します。Kubernetesマスターノードが再起動またはアップグレードされると、サービスのないエンドポイントが削除されます。ヘッドレスサービスは、削除されないようにします。
Bug fixes
リーダーウォッチブロッキングクエリの読み取りタイムアウトを調整しました。(AlexanderKukushkin)
Consulのドキュメントによると、実際の応答タイムアウトは、同時要求のウェイクアップ時間を分散するために、指定された最大待機時間に追加されたランダムな少量の追加待機時間だけ増加します。最大持続時間に`wait/16`の追加時間を加算します。私たちの場合、大きいものに応じて`wait/15`または1秒を追加します。
レプリケーションプロトコルを介してpostgresに接続するときは、常にreplication=1を使用してください。(AlexanderKukushkin)
Postgres10以降、database=replicationを含むpg_hba.confの行は、パラメータreplication=databaseを持つ接続を受け入れません。
wal-onlyスタンバイクラスターのrecovery.confにprimary_conninfoを書き込まないでください。(AlexanderKukushkin)
`standby_cluster`構成で`host`も`port`も定義されていないにもかかわらず、パトロニは`primary_conninfo`を`recovery.conf`に入れていました。これは役に立たず、多くのエラーを生成していました。
バージョン1.5.4¶
このバージョンでは、柔軟なロギングを実装し、多くのバグが修正されています。
New features
ロギングインフラストラクチャの改善(AlexanderKukushkin、LucasCapistrant、AlexanderAnikin)
ロギング構成は、環境変数だけでなく、Patroni構成ファイルからも構成できます。構成を更新してリロードを実行するか、SIGHUPをPatroniプロセスに送信することにより、実行時にロギング構成を変更できるようにします。デフォルトでは、Patroniはログをstderrに書き込みますが、ログをファイルに直接書き込み、特定のサイズに達するとローテーションできるようになりました。それに加えて、カスタムdateformatのサポートと、各Pythonモジュールのログレベルを微調整する可能性が追加されました。
リーダー選挙中に現在のタイムラインを考慮に入れられるようにします。(AlexanderKukushkin)
現在、既知の最新のタイムライン上にはありませんが、ノードが自分自身を最も健全なノードと見なしている可能性があります。場合によっては、そのようなノードの昇格を回避したい場合があります。これは、`check_timeline`パラメータを`true`に設定することで達成できます(デフォルトの動作は変更されません)。
スーパーユーザーの資格情報の緩和された要件
Libpqでは、ユーザー名もパスワードも明示的に指定せずに接続を開くことができます。状況に応じて、pgpassファイルに依存するか、pg_hba.confの認証方法を信頼します。pg_rewindもlibpqを使用しているため、同じように動作します。
環境変数を介してConsulサービスの登録とチェック間隔を構成する可能性を実装しました。(AlexanderKukushkin)
Consulでのサービスの登録は1.5.0で追加されましたが、これまでのところ、atoani.yamlを介してのみオンにすることができました。
Stability Improvements
カスタムブートストラップ中にarchive_modeをoffに設定します。(AlexanderKukushkin)
クラスターが完全に機能するまで、walsとhistoryファイルのアーカイブは避けたいと思います。カスタムブートストラップにpg_upgradeが含まれる場合、本当に役立ちます。
スタート時にグローバル設定をロードするときに5秒のバックオフを適用します。(AlexanderKukushkin)
Patroniの起動時にDCSをハンマーするのを避けるのに役立ちます。
シャットダウン時に生成されるエラーメッセージの量を減らしました。(AlexanderKukushkin)
それらは無害ですが、むしろ迷惑であり、時には恐ろしいものでした。
作成時にrecovery.confのrwpermを明示的に保護しました。(LucasCapistrant)
このファイルにはレプリケーションユーザーとパスワードが含まれているため、atoni/postgresユーザー以外は誰も読まないでください。
HTTPServer例外をロガーにリダイレクトしました。(JulienRiou)
デフォルトでは、このような例外は標準出力に記録され、通常のログが混乱していました。
Bug fixes
pg_ctlプロセスのstdoutへのstderrパイプを削除しました(CodyCoons)
メインのPatroniプロセスからstderrを継承すると、すべてのPostgresログをすべてのパトロニログとともに表示できます。PatroniおよびPostgresのログは標準ツール(dockerログ、kubectlなど)を使用して消費される可能性があるため、これはコンテナ環境で非常に役立ちます。それに加えて、この変更により、postgresがいくつかの警告をstderrに書き込むときにPatroniがpostmasterpidをキャッチできないというバグが修正されます。
Consulサービスのチェック登録解除タイムアウトをGo時間形式で設定します。(PavelKirillov)
明示的に言及されていない場合、時間単位の登録は失敗していました。
standby_clusterクラスター構成のチェックを緩めます。(DmitryDolgov、AlexanderKukushkin)
有効な値として文字列のみを受け入れていたため、ポートを整数として指定し、create_replica_methodsをリストとして指定することはできませんでした。
バージョン1.5.3¶
互換性とバグ修正リリース。
Zookeeperに対してpython3で実行する際の安定性を改善しました。(AlexanderKukushkin)
`loop_wait`の変更により、Patroniはzookeeperから切断し、再接続しませんでした。
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`を使用して構成できます。初期構成は、 :ref:`bootstrap.dcs <yaml_configuration> で行うこともできます。
pgbackrestのサポートを追加しました。(YogeshSharma)
pgBackrestは既存の$PGDATAフォルダーに復元できます。これにより、最後のバックアップから変更されていないファイルはスキップされるため、迅速な復元が可能になります。この機能をサポートするために、新しいパラメーター`keep_data`が導入されました。追加の例については、 replica creation method セクションを参照してください。
Bug fixes
/"standbycluster/"ワークフローのいくつかのバグ修正(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
パトロンを追加-k/--insecureフラグとrestapi証明書のサポート。(WilfriedRoset)
以前は、RESTAPIが自己署名証明書`patronictl`で保護されている場合、それらを検証できませんでした。その検証を無効にする方法はありませんでした。patronictl`を構成して、証明書の検証を完全にスキップするか、構成の :ref:`ctl: <patronictl_settings> セクションでCAおよびクライアント証明書を提供できるようになりました。
Patanictlスイッチオーバー/フェールオーバー出力からnofailoverタグを持つメンバーを除外しました。(AlexanderAnikin)
以前は、これらのメンバーは、patanictlを介して対話型スイッチオーバーまたはフェイルオーバーを実行するときに、候補として誤って提案されました。
Stability improvements
pg_controldataの非キー値出力行の解析を回避しました。(AlexanderAnikin)
特定の状況下で、pg_controldataはコロン文字なしで行を出力します。それはpg_controldata出力を解析したPatroniコードでエラーを引き起こし、実際の問題を隠しました。多くの場合、このような行は、通常の出力の前にpg_controldataによって表示される警告、つまりバイナリメジャーバージョンがPostgreSQLデータディレクトリのバージョンと一致しない場合に出力されます。
リーダー選挙中のエラーメッセージにメンバー名を追加しました。(JanMussler)
リーダー選挙中に、Patroniはクラスターの既知のすべてのメンバーに接続し、そのステータスを要求します。このようなステータスはPatroniログに書き込まれ、メンバーの名前が含まれます。以前は、メンバーにアクセスできない場合、エラーメッセージには名前が示されず、URLのみが含まれていました。
レプリケーションスロットの作成時にWALポジションをすぐに予約しました。(AlexanderKukushkin)
9.6以降、`pg_create_physical_replication_slot`ファンクションは、追加のブールパラメータ`immediately_reserve`を提供します。これがデフォルトでもある`false`に設定されている場合、スロットは最初のクライアント接続を受信するまでWALポジションを予約せず、スロットの作成と初期クライアント接続。
厳密な同期レプリケーションのバグを修正しました。(AlexanderKukushkin)
`synchronous_mode_strict:true`で実行している場合、場合によってはパトロニは`*`を`synchronous_standby_names`に入れ、ほとんどのレプリケーション接続の同期状態を`potential`に変更します。以前は、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で状態を/"stopped/"に設定します。(TonySorrentino)
これは、/"patronictllist/"コマンドでメンバーの状態が/"stopped/"として表示されます。
古いpostmaster.pidが実行中のプロセスと一致したときに記録されるメッセージを改善しました。(AntsAasma)
前のものは混乱を超えるものでした。
パトロンのリロード機能を実装しました。(DonSeiler)
それ以前は、RESTAPIを呼び出すか、SIGHUPシグナルをPatroniプロセスに送信することによってのみ、構成をリロードすることができました。
レプリカとして起動するときに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構成ファイルを更新し、SIGHUPをPatroniプロセスに送信することにより、実行時に多くのパラメーター(`restapi.listen`を含む)を変更することが可能です。この修正により、一部のパラメーターが無効な値を受け取ったときに、「restapi」スレッドからあいまいな例外が排除されます。
バージョン1.4.4¶
Stability improvements
poll_failover_resultの競合状態を修正しました。(AlexanderKukushkin)
フェールオーバーにもスイッチオーバーにも直接影響しませんでしたが、まれに、前のリーダーがロックを解放したときに成功を報告するのが早すぎ、「/にFailedoverto/"None/"」が生成されました。"desired-node/"'メッセージ。
Postgresパラメーター名を大文字と小文字を区別しないものとして扱います。(AlexanderKukushkin)
Postgresパラメーターのほとんどにはsnake_case名前がありますが、このルールには3つの例外があります。DateStyle、IntervalStyle、およびTimeZoneです。Postgresは、別のケースで記述された場合(例:timezone='some/tzn')、これらのパラメーターを受け入れます。ただし、Patroniはpg_settingsでこれらのパラメーター名の大文字と小文字を区別しない一致を見つけることができず、結果としてそのようなパラメーターを無視しました。
実行中のpostgresにアタッチし、クラスターが初期化されていない場合、スタートを中止しました。(AlexanderKukushkin)
Patroniは、すでに実行中のPostgresインスタンスに自分自身をアタッチできます。レプリカに到達する前に、マスターノードでPatroniの実行を開始することが不可欠です。
Patanictlscaffoldの動作を修正しました。(AlexanderKukushkin)
jsonエンコードされた文字列の代わりにdictオブジェクトをtouch_memberに渡すと、DCS実装がエンコードを処理します。
一時停止中にリーダーキーの更新に失敗した場合、マスターを降格しないでください。(AlexanderKukushkin)
メンテナンス中に、DCSは読み取り要求への応答を継続しながら、書き込み要求に失敗し始める場合があります。その場合、Patroniは、DCSでリーダーロックの更新に失敗した後、Postgresマスターノードを読み取り専用モードにしていました。
Patroniが新しいpostmasterプロセスに気付いたときにレプリケーションスロットを同期します。(AlexanderKukushkin)
Postgresが再起動された場合、Patroniはレプリケーションスロットのリストが期待と一致することを確認する必要があります。
一時停止から抜けた後にsysidを確認し、レプリケーションスロットを同期します。(AlexanderKukushkin)
`maintenance`モード中にデータディレクトリが完全に書き換えられた可能性があるため、`データベースシステム識別子`がまだクラスターに属し、レプリケーションスロットがPatroniの期待と同期していることを確認する必要があります。
postmasterロックファイルが存在するデータディレクトリでPostgresを実行していないときに発生する可能性のある障害を修正しました。(AlexanderKukushkin)
postmasterロックファイルから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`は依然として`Scheduledswitchover`ではなく`Scheduledfailover`を報告していました。
保留中の再起動に関する情報を表示する(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でパトニーを実行するための適切なRBACを追加しました。(MaciejSzulik)
クラスターのポッドに割り当てられるサービスアカウント、必要な権限のみを保持するロール、およびサービスアカウントとロールを接続するロールバインディングを追加します。
バージョン1.4.1¶
Fixes in patronictl
フェールオーバー先のメンバーの提案リストに現在のリーダーを表示しないでください。(アレクサンダー・ククシュキン)
クラスターにリーダーが存在し、フェールオーバーが可能なメンバーのリストから除外する必要がある場合でも、patitanictlフェイルオーバーは引き続き機能します。
パトローニのスイッチオーバーを古いPatroniapi(AlexanderKukushkin)と互換性のあるものにします
POST/switchoverRESTAPI呼び出しがステータスコード501で失敗した場合、もう一度呼び出しますが、/failoverエンドポイントに。
バージョン1.4¶
このバージョンでは、DCSとしてKubernetesを使用するためのサポートが追加され、Etcd、Zookeeper、またはConsulを追加デプロイせずに、KubernetesでPatroniをクラウドネイティブエージェントとして実行できます。
Upgrade notice
pipを介してPatroniをインストールすると、(Etcd、Zookeper、ConsulまたはKubernetesのライブラリ、またはAWSのサポートなど)の依存関係が取り込まれなくなります。それらを有効にするには、pipinstallコマンドで明示的にリストする必要があります。
Kubernetes support
KubernetesベースのDCSを実装します。エンドポイントメタデータは、構成とリーダーキーを保存するために使用されます。ポッド定義内のメタデータフィールドは、メンバー関連のデータを保存するために使用されます。Endpointsの使用に加えて、PatroniはConfigMapをサポートしています。この機能の詳細については、 Kubernetes chapter of the documentation
Stability improvements
postmasterプロセスを別のオブジェクトに分解しました(AntsAasma)
このオブジェクトは、pidと開始時間を介して実行中のポストマスタープロセスを識別し、ポストマスターが背後で再起動されたとき、またはpostgresディレクトリがファイルシステムから消えたときの状況の検出(および解決)を簡素化します。
HAサイクルのすべてのループでPatroniが発行するSELECTの量を最小限に抑えます。(AlexanderKukushkin)
HAループのすべての反復で、Patroniはリカバリーステータスと絶対ウォールポジションを知る必要があります。今後、Patroniは、レプリカで2回、マスターで3回ではなく、単一のSELECTのみを実行してこの情報を取得します。
ロックがある場合にのみ、シャットダウン時にリーダーキーを削除します(AntsAasma)
無条件削除は、不要で誤解を招く例外を生成していました。
Improvements in patronictl
パトロンにバージョンコマンドを追加しました。(AntsAasma)
インストールされているPatroniのバージョンと実行中のPatroniインスタンスのバージョン(クラスター名が指定されている場合)が表示されます。
パトロンの一部のコマンドで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はpostmasterpidとその開始時刻をキャッシュし、対応するデータディレクトリが削除された後もまだ実行されている場合に備えて、古いpostmasterを終了させます。
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でサポートされる最小値よりも小さい場合があります。その場合、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モジュールはいくつかのメソッドのシグネチャを変更しました
/"CouldnottakeoutTTLlock/"メッセージはログに記録されませんでした。(AlexanderKukushkin)
重大なバグではありませんが、適切なログ記録がないため、問題が発生した場合の調査が複雑になります。
Quote synchronous_standby_names using quote_ident
synchronous_standby_namesをpostgresql.confに書き込むときは、その値をクォートする必要があります。(AlexanderKukushkin)適切に引用符で囲まれていない場合、PostgreSQLは同期レプリケーションを効果的に無効にして、動作し続けます。
Different bugfixes around pause state, mostly related to watchdog (AlexanderKukushkin)
ウォッチドッグがアクティブでない場合はキープアライブを送信しない
一時停止モードでウォッチドッグをアクティブにしない
一時停止モードで正しいpostgres状態を設定する
postgresが停止している場合、APIからクエリを実行しようとしないでください
バージョン1.3.3¶
Bugfixes
synchronous_mode_strictがオンになっていても、昇格直後に同期レプリケーションが無効になりました。(AlexanderKukushkin)
バックアップから復元した後に見つからない場合は、空の
pg_ident.confファイルを作成します。(AlexanderKukushkin)postgresだけでなく、すべてのデータベースへの
pg_hba.confでのオープンアクセス(FrancoBellagamba)
バージョン1.3.2¶
Bugfix
Patanictledit-configがZooKeeperで動作しませんでした。(AlexanderKukushkin)
バージョン1.3.1¶
Bugfix
_MemberStatusの変更により、APIを介したフェイルオーバーが壊れました。(AlexanderKukushkin)
バージョン1.3¶
バージョン1.3では、カスタムブートストラップの可能性が追加され、pg_rewindのサポートが大幅に改善され、同期モードのサポートが強化され、patanictlに構成編集が追加され、Linuxでウォッチドッグサポートが実装されます。さらに、これはPostgreSQL10で正しく動作する最初のバージョンです。
Upgrade notice
Patroniの新しいバージョンとの既知の互換性問題はありません。バージョン1.2からの構成は、変更せずに機能するはずです。新しいパッケージをインストールしてPatroniを再起動する(PostgreSQLの再起動が発生します)、またはPatroniを最初に pause mode に入れてからクラスター内のすべてのノードでPatroniを再起動することにより、アップグレードできます(一時停止モードのPatroniは停止/startPostgreSQL)、最後に一時停止モードから再開します。
Custom bootstrap
クラスターのブートストラッププロセスを構成可能にしました。(AlexanderKukushkin)
クラスター内の最初のノードを初期化するときに、
initdbの代わりにカスタムブートストラップスクリプトを許可します。bootstrapコマンドは、クラスターの名前とデータディレクトリへのパスを受け取ります。結果として得られるクラスターは、リカバリを実行するように構成できるため、バックアップからブートストラップし、ポイントインタイムリカバリを実行できます。この機能の詳細については、initdbを参照してください。
Smarter pg_rewind support
現在のマスターとのタイムラインの違いを見てpg_rewindを実行するかどうかを決定します。(AlexanderKukushkin)
以前は、Patroniにはpg_rewindをトリガーするための一定の条件セットがありました。これらすべての場合に共通して、一部のレプリカが新しいマスターよりも進んでいる可能性があります。場合によっては、pg_rewindは何もしませんでした。他の場合には、必要なときに実行されませんでした。この限られたルールのリストに依存する代わりに、PatroniにマスターとレプリカのWAL位置を(ストリーミングレプリケーションプロトコルを使用して)比較させ、レプリカに巻き戻しが必要かどうかを確実に判断します。
Synchronous replication mode strict
strictモードを追加して、同期レプリケーションのサポートを強化しました。(JamesSewell、AlexanderKukushkin)
通常、
synchronous_modeが有効になっていて、マスターにレプリカが接続されていない場合、Patroniは同期レプリケーションを無効にして、マスターを書き込みに使用できるようにします。synchronous_mode_strictオプションは、設定されている場合、Patroniがレプリカがない場合に同期レプリケーションを無効にしないように変更し、マスターにデータを書き込むすべてのクライアントを効果的にブロックします。自動フェールオーバーによるデータ損失を防止する同期モードの保証に加えて、strictモードは、各書き込みが2つのノードに永続的に保存されるか、クラスター内にノードが1つしかない場合に完全に行われないことを保証します。
Configuration editing with patronictl
Patanictlに構成編集を追加しました。(AntsAasma、AlexanderKukushkin)
DCSに保存されている動的クラスター構成を編集する機能をpatanictlに追加します。コマンドラインからのパラメーター/値の指定、$EDITORの呼び出し、またはyamlファイルからの構成の適用をサポートします。
Linux watchdog support
Linuxのウォッチドッグサポートを実装します(AntsAasma)
Patroniが実行されていないか応答していないノードをリブートするために、Linuxソフトウェアウォッチドッグをサポートしてください(高負荷のためなど)Linuxソフトウェアウォッチドッグは、応答しないノードをリブートします。Patroni構成のウォッチドッグセクションから、使用するウォッチドッグデバイス(デフォルトは`/dev/watchdog`)とモード(on、automatic、off)を構成できます。 watchdog documentation から詳細情報を取得できます。
Add support for PostgreSQL 10
Patroniは、これまでにリリースされたPostgreSQL10のすべてのベータ版と互換性があり、リリースされるPostgreSQL10と互換性があると期待しています。
PostgreSQL-related minor improvements
Patroni構成ファイルまたはDCSの動的構成を介してpg_hba.confを定義します。(AlexanderKukushkin)
構成の
postgresqlセクションのpg_hbaサブセクションでpg_hba.confの内容を定義できます。これにより、すべてのノードにログインし、手動で変更して構成をリロードする代わりに、DCSで1つだけを定義する必要があるため、複数のノードでのpg_hba.confの管理が簡単になります。定義されると、このセクションの内容は現在の
pg_hba.confを完全に置き換えます。hba_filePostgreSQLパラメーターが設定されている場合、Patroniはそれを無視します。UNIXソケットを介したローカルPostgreSQLクラスターへの接続をサポートしました。(AlexanderKukushkin)
Patroni構成の
postgresqlセクションにuse_unix_socketオプションを追加します。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の英語以外のロケールで`postmastergotmultithreadedduringstartup`致命的エラーを回避します。
レプリケーションスロットをドロップする際の追加チェック(AlexanderKukushkin)
場合によっては、PatroniがWAL送信者によってレプリケーションスロットをドロップできない場合があります。
PostgreSQLの命名規則に準拠するために、レプリケーションスロット名を63(NAMEDATALEN-1)文字に切り詰めます。(NickScott)
PatroniからPostgreSQLクラスターへの余分な接続が開かれる競合状態を修正しました。(AlexanderKukushkin)
ノードが空のデータディレクトリで再起動したときにリーダーキーを解放します。(AlexKerney)
リーダーなしでブートストラップを実行するときに非同期エグゼキューターをビジーに設定します。(AlexanderKukushkin)
そうしないと、ノードが別のクラスターに属していることを示すエラーが発生する可能性があります。
WAL-Eレプリカの作成方法を改善しました(JoarWandborg、AlexanderKukushkin)。
WAL-Eベースバックアップを解析するときにcsv.DictReaderを使用し、スペース区切りの日時でISO日付を受け入れます。
復元するWALの量を見積もるために、レプリカからの現在のWAL位置のフェッチをサポートします。以前は、マスターノードでのみ使用可能なシステム情報機能を呼び出すために使用されるコード。
バージョン1.2¶
このバージョンでは、同期レプリケーションの処理が大幅に改善され、起動プロセスとフェールオーバーの信頼性が向上し、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に書き込みます。(アレクサンダー・ククシュキン)
pg_ctlだけでPatroniが構成したPostgreSQLを起動できます。構成にユーザーがいない場合の例外を回避します。(キリルプーシキン)
異常なクラスターの一時停止を許可します。この修正の前は、
patronictlは、一時停止を実行しようとするノードが異常な場合に救済されました。(アレクサンダー・ククシュキン)リーダーウォッチの機能を改善。(アレクサンダー・ククシュキン)
以前は、レプリカは常にリーダーキーを監視していました(タイムアウトまたはリーダーキーが変更されるまでスリープ)。この変更により、レプリカのPostgreSQLが
running状態にあるときのみ監視し、PostgreSQLの停止/起動または再起動中は監視しません。SIGCHILDをPID1として処理するときに競合状態に遭遇しないようにしました。(AlexanderKukushkin)
Patroni内の同じプロセスが新しいプロセスを生成し、それらからSIGCHILDを処理したため、以前はDockerコンテナ内で実行すると競合状態が発生する可能性がありました。この変更では、Patroniにfork/execを使用し、元のPID1プロセスに子からのシグナルの処理を任せます。
WAL-E復元を修正。(OleksiiKliukin)
以前は、WAL-E復元は
no_masterフラグを使用してマスターとのコンサルティングを完全に回避していたため、Patroniは常にpg_basebackupではなくWALからの復元を選択していました。この変更により、no_masterの元の意味に戻ります。つまり、マスターが実行されていない場合、PatroniWAL-Erestoreはレプリケーション方法として選択できます。後者は、メソッドに渡された接続文字列を調べることによってチェックされます。さらに、リトライメカニズムをより堅牢にし、他の細目を処理します。非同期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が存在しない場合)、一時停止モードでの不必要な再起動を避けます。pg_rewind関連のPatroni構成セクションにsuperuser認証が欠落している場合、superuser(デフォルトのOSユーザー)のデフォルトのlibpq値にフォールバック。コールバックの実行をシリアル化します。新しいコールバックが実行されようとしているときに、同じタイプの以前のコールバックを強制終了します。コールバックの実行時にゾンビプロセスを生成する問題を修正します。(アレクサンダー・ククシュキン)
リーダーキーがDCSで設定されているが、このリーダーキーへの更新が失敗する場合、以前のマスターの昇格を避けます。(アレクサンダー・ククシュキン)
これにより、現在のマスターがEtcdおよび/"一貫性のない読み取り/"を許可する他のDCS内の少数のノードと一緒にパーティション分割されたときに、その役割を維持し続ける問題を回避できます。
Miscellaneous
ブートストラップに
post_init構成オプションを追加。(アレハンドロ・マルティネス)Patroniは、
initdbを実行し、新しいクラスター用にPostgreSQLを起動した直後に、このオプションのスクリプト引数を呼び出します。スクリプトはsuperuserを含む接続URLを受け取り、パスワードを含む.pgpassファイルを指すようにPGPASSFILEを設定します。スクリプトが失敗すると、Patroniの初期化も失敗します。これは、新しいユーザーを追加したり、新しいクラスターで拡張機能を作成したりする場合に役立ちます。PostgreSQL9.6サポートを実装します。(アレクサンダー・ククシュキン)
wal_level = replicaをhot_standbyの同義語として使用し、pending_restartフラグが変更されたときにフラグを回避します。(アレクサンダー・ククシュキン)
Documentation improvements
Patronimain loop workflow diagram _を追加します。(アレハンドロ・マルティネス、アレクサンダー・ククシュキン)
READMEを改善し、Helmチャートとリリースノートへのリンクを追加。(ラウリアップル)
Patroniのドキュメントを
Read the Docsに移動します。最新のドキュメントは、https://patroni.readthedocs.ioで入手できます。(OleksiiKliukin)ドキュメントをさまざまなデバイス(スマートフォンを含む)から簡単に表示および検索できるようにします。
パッケージをセマンティックバージョニングに移動します。(OleksiiKliukin)
Patroniは、major.minor.patchバージョンスキーマに従って、小さいながらも重大なバグ修正で新しいマイナーバージョンがリリースされないようにします。すべてのパッチが含まれるマイナーバージョンのリリースノートのみを公開します。
バージョン1.1¶
このリリースでは、一時停止モードを導入することによりPatroniクラスターの管理が改善され、スケジュールされた条件付きの再起動によるメンテナンスが改善され、PatroniとEtcdまたはZookeeperとの相互作用がより回復力があり、pattronictlが大幅に強化されます。
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 を読むことができます。
さらに、patanictlは、一時停止モードを切り替える新しい pause および resume コマンドをサポートします。
Scheduled and conditional restarts
リスタートAPIコマンドに条件を追加しました。(OleksiiKliukin)
この変更により、再起動を行うために検証できるいくつかの条件を追加することにより、Patroniの再起動が強化されます。条件には、PostgreSQLロールがマスターまたはレプリカの場合の再起動、PostgreSQLバージョン番号の確認、または構成の変更を適用するために再起動が必要な場合にのみ再起動することです。
スケジュールされた再起動を追加します。(OleksiiKliukin)
将来的に再起動をスケジュールできるようになりました。ノードごとに1つのスケジュールされた再起動のみがサポートされています。スケジュールされた再起動が不要になった場合は、クリアすることができます。スケジュールされた再起動と条件付きの再起動の組み合わせがサポートされているため、たとえば、夜間にPostgreSQLのマイナーアップグレードをスケジュールし、postgres固有のロジックを管理スクリプトに追加せずに、古いマイナーバージョンを実行しているインスタンスのみを再起動できます。
条件付き再起動とスケジュールされた再起動のサポートをパトロンに追加しました(MuratKabilov)。
パトロンリスタートは、いくつかの新しいオプションをサポートします。スケジュールされたアクションをクリーンアップするためのpatanictlflushコマンドもあります。
Robust DCS interaction
loop_waitに応じてKazooのタイムアウトを設定しました。(AlexanderKukushkin)
もともと、ping_timeoutおよびconnect_timeoutの値は、ネゴシエートされたセッションタイムアウトから計算されました。Patroniloop_waitは考慮されませんでした。その結果、1回の再試行にはセッションタイムアウトよりも時間がかかる可能性があり、Patroniは強制的にロックを解放して降格します。
この変更により、pingと接続のタイムアウトがloop_waitの値の半分に設定され、接続の問題の検出が高速化され、ロックを失う前に接続試行を再試行するための十分な時間が残されます。
元のリクエストが成功した後にのみEtcdトポロジを更新します。(AlexanderKukushkin)
元のリクエストが完了するまで、クライアントが知っているETCDトポロジの更新を延期します。クラスタートポロジを取得するときは、Etcdクラスター内の既知のノード数に応じて再試行タイムアウトを実装します。これにより、クライアントは、ノードの最新のリストを取得するための要求の結果を取得することを好みます。
どちらの変更も、ネットワークの問題に直面した際のDCSへのPatroni接続をより堅牢にします。
Patronictl, monitoring and configuration
APIを介してストリーミングレプリカに関する情報を返します。(FeikeSteenbergen)
以前は、変更のストリーミングに失敗したPostgreSQLインスタンスについてPatroniにクエリを実行する信頼できる方法はありませんでした(たとえば、接続の問題が原因で)。この変更により、/patroniエンドポイントを介してpg_stat_replicationの内容が公開されます。
パトロンを追加しました。scaffoldコマンド(OleksiiKliukin)
Etcdにクラスター構造を作成するコマンドを追加します。クラスターはユーザー指定のsysidとleaderで作成され、リーダーとメンバーの両方のキーが永続的にされます。このコマンドは、いわゆるマスターレス構成を作成する場合に役立ちます。レプリカのみで構成されるPatroniクラスターは、Patroniを認識しない外部マスターノードから複製します。その後、リーダーキーを削除し、Patroniノードの1つを昇格させ、元のマスターをPatroniベースのHAクラスターに置き換えることができます。
構成オプション
bin_dirを追加して、PostgreSQLバイナリを見つけます。(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を介して見える/"pendingrestart/"と呼ばれる特別なフラグを設定します。その場合、APIを介して手動でリスタートを発行する必要があります。
PatroniSIGHUPまたはPOSTto/reloadは、構成ファイルを再読み取りします。
変更できるパラメーターと差分構成ソースの処理順序の詳細については、 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)。
PatronidockerimageにZookeeperのサポートを追加しました。(AlexanderKukushkin)
ZookeeperとExhibitorの構成オプションを分割しました。(AlexanderKukushkin)
PatroniにPatroniのコードを再利用して構成を読み取らせるようにしました。(AlexanderKukushkin)
これにより、patanictlは環境ベースの構成を利用できます。
アプリケーション名をprimary_conninfoのノード名に設定します。(AlexanderKukushkin)
これにより、特定のノードの同期レプリケーションの識別と構成が簡素化されます。
Stability, security and usability improvements
sysidをリセットし、バックアップの復元が進行中にpg_controldataを呼び出さないでください。(AlexanderKukushkin)
この変更により、バックアップからこのノードの長時間の初期化中にPatroniAPIヘルスチェックによって生成されるノイズの量が削減されます。
pg_rewindのコーナーケースの束を修正しました。(AlexanderKukushkin)
ソースクラスターがマスターでない場合は、pg_rewindの実行を避けてください。
さらに、新しいパラメーター remove_data_directory_on_rewind_failure がtrueに設定されていない限り、リワインドに失敗したときにデータディレクトリを削除しないでください。デフォルトではfalseです。
DCSのレプリケーション接続文字列からパスワードを削除します。(AlexanderKukushkin)
以前は、Patroniは常にDCSのPostgresURLからのレプリケーション資格情報を使用していました。これは、パトロニ構成から資格情報を取得するように変更されました。シークレット(レプリケーションユーザー名とパスワード)であり、DCSで公開されなくなりました。
降格コールの周りの非同期機構を修正しました。(AlexanderKukushkin)
Demoteは、DCSの相互作用をブロックすることなく、完全に非同期に実行されるようになりました。
パトロンが設定されている場合、常に承認ヘッダーを送信するようにしました。(AlexanderKukushkin)
これにより、Patroniがそれらに対する承認を必要とするように構成されている場合、pattroniは/"保護された/"リクエスト、つまり再起動または再初期化を発行できます。
SystemExit例外を正しく処理します。(AlexanderKukushkin)
SIGTERMを受信したときにPatroniが適切に停止しない問題を回避します
confdのサンプルhaproxyテンプレート(AlexanderKukushkin)
confideを使用して、DCSのパトローニ状態からhaproxy構成を生成し、動的に変更します
ドキュメントを改善および再構成して、新しいユーザーにとってより使いやすくしました。(LauriApple)
APIはpg_ctlstop中にrole=masterを報告する必要があります。(AlexanderKukushkin)
特にクラスター停止の場合、コールバック呼び出しの信頼性を高めます。さらに、`pg_ctl_timeout`オプションを導入して、`pg_ctl`を介した開始、停止、およびリスタート呼び出しのタイムアウトを設定します。
etcdの再試行ロジックを修正しました。(AlexanderKukushkin)
再試行をより予測可能で堅牢にします。
Zookeeperコードを短いネットワークのしゃっくりに対してより回復力のあるものにしました。(AlexanderKukushkin)
接続タイムアウトを減らして、Zookeeper接続の試行をより頻繁にします。
バージョン0.90¶
このリリースでは、Consulのサポートが追加され、新しい noloadbalance タグが含まれ、 clonefrom タグの動作が変更され、 pg_rewind 処理が改善され、 patronictl 制御プログラムが改善されます。
Consul support
Consulサポートの実装(AlexanderKukushkin)
Patroniは、EtcdとZookeeperに加えて、Consulと対戦します。接続パラメーターはYAMLファイルで構成できます。
New and improved tags
noloadbalance タグを実装します(AlexanderKukushkin)
このタグにより、Patroniは常にレプリカがロードバランサーで利用できないことを返します。
clonefrom タグの実装を変更しました。(AlexanderKukushkin)
以前は、ノード名を clonefrom に提供する必要があり、タグ付けされたレプリカに特定のノードからのクローンを強制していました。新しい実装は、 clonefrom をブールタグにします。trueに設定されている場合、レプリカは、他のレプリカがクローンを作成する候補になります。複数の候補が存在する場合、レプリカはランダムに1つを選択します。
Stability and security improvements
多数の信頼性の向上(AlexanderKukushkin)
いくつかの偽のエラーメッセージを削除し、フェールオーバーの安定性を向上させ、DCSからのデータの読み取り、シャットダウン、降格、および前のリーダーの再接続でいくつかのコーナーケースに対処します。
システムスクリプトを改善して、停止時にPatroniの子供たちを殺さないようにしました。(JanKeirse、AlexanderKukushkin)
以前は、Patroniを停止すると、 systemd もPostgreSQLにシグナルを送信しました。PatroniもPostgreSQLを自分で停止しようとしたため、さまざまなシャットダウン要求(スマートシャットダウン、それに続く高速シャットダウン)に送信されました。その結果、レプリカの切断が早すぎ、以前のマスターは降格後に再参加できませんでした。Janによる修正、Alexanderによる事前調査。
以前のマスターがレプリカとして再参加する前に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
パトロンとパトローニの構成を統一しました。(FeikeSteenbergen)
Patronictlは、Patroni自分自身と同じ構成ファイルを使用できます。
Patroniが環境変数から構成を読み取れるようにします。(OleksiiKliukin)
これにより、Patroniの構成の自動生成、またはさまざまなソースからの単一の構成のマージが簡素化されます。
APIによって返される情報にデータベースシステム識別子を含めます。(FeikeSteenbergen)
利用可能なすべてのDCSに delete_cluster を実装しました。(AlexanderKukushkin)
パトロールでEtcd以外のDCSのサポートを有効にします。
バージョン0.80¶
このリリースでは、 カスケードレプリケーション のサポートが追加され、 スケジュールされたフェールオーバー を提供することにより、Patroniの管理が簡素化されます。新しいリリースに移行するために、Patroniの古いバージョン(特に0.78)とこれを組み合わせて使用できます。スケジュールされたフェールオーバーとカスケードレプリケーション関連の機能は、Patroni0.80以降でのみ動作することに注意してください。
Cascading replication
パトロニノード(OleksiiKliukin)の replicatefrom および clonefrom タグのサポートを追加します。
タグ replicatefrom を使用すると、レプリカはマスターではなく、任意のノードをソースとして使用できます。 clonefrom は、初期バックアップと同じことを行います。一緒に、これらはPatroniがカスケードレプリケーションを完全にサポートできるようにします。
実行中のレプリケーション接続がなくてもレプリカを初期化するレプリケーションメソッドを実行するためのサポートを追加しました。(OleksiiKliukin)
これは、S3またはFTPに保存されているスナップショットからレプリカを作成するために役立ちます。実行中のレプリケーション接続を必要としないレプリケーションメソッドは、yaml構成で no_master:true を指定する必要があります。レプリケーション接続が存在する場合、これらのスクリプトは引き続き順に呼び出されます。
Patronictl, API and DCS improvements
スケジュールされたフェイルオーバーを実装します(FeikeSteenbergen)。
パトロンまたはAPI呼び出しを使用して、将来の特定の時刻にフェールオーバーが発生するようにスケジュールできます。
パトロンに dbuser と password パラメーターのサポートを追加しました。(FeikeSteenbergen)
ヘルスチェックの出力にPostgreSQLバージョンを追加しました(FeikeSteenbergen)。
パトロンの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 _にあります。