スタンドアロンをPatroniクラスターに変換する¶
このセクションでは、スタンドアロンのPostgreSQLインスタンスをPatroniクラスターに変換するプロセスについて説明します。
既存のPostgreSQLインスタンスを使用せずにPatroniクラスターをデプロイするには、代わりに Running and Configuring を参照してください。
プロシージャー¶
以下は、既存のPostgresクラスターをPatroniマネージドクラスターに変換する手順の概要です。手順では、既存のクラスターの一部であるすべてのノードが現在稼働中であり、移行の進行中にPostgres構成を変更する予定がないことを前提としています。手順:
Patroni構成の authentication セクションの説明に従って、Postgresユーザーを作成します。以下のコードブロックにユーザーを作成するサンプルSQLコマンドがあります。ここでは、環境に応じてユーザー名とパスワードを置き換える必要があります。関連するユーザーが既にいる場合は、この手順をスキップできます。
-- Patroni superuser -- Replace PATRONI_SUPERUSER_USERNAME and PATRONI_SUPERUSER_PASSWORD accordingly CREATE USER PATRONI_SUPERUSER_USERNAME WITH SUPERUSER ENCRYPTED PASSWORD 'PATRONI_SUPERUSER_PASSWORD'; -- Patroni replication user -- Replace PATRONI_REPLICATION_USERNAME and PATRONI_REPLICATION_PASSWORD accordingly CREATE USER PATRONI_REPLICATION_USERNAME WITH REPLICATION ENCRYPTED PASSWORD 'PATRONI_REPLICATION_PASSWORD'; -- Patroni rewind user, if you intend to enable use_pg_rewind in your Patroni configuration -- Replace PATRONI_REWIND_USERNAME and PATRONI_REWIND_PASSWORD accordingly CREATE USER PATRONI_REWIND_USERNAME WITH ENCRYPTED PASSWORD 'PATRONI_REWIND_PASSWORD'; GRANT EXECUTE ON function pg_catalog.pg_ls_dir(text, boolean, boolean) TO PATRONI_REWIND_USERNAME; GRANT EXECUTE ON function pg_catalog.pg_stat_file(text, boolean) TO PATRONI_REWIND_USERNAME; GRANT EXECUTE ON function pg_catalog.pg_read_binary_file(text) TO PATRONI_REWIND_USERNAME; GRANT EXECUTE ON function pg_catalog.pg_read_binary_file(text, bigint, bigint, boolean) TO PATRONI_REWIND_USERNAME;
すべてのPostgresノードで次の手順を実行します。次のノードに進む前に、1つのノードですべての手順を実行します。プライマリノードから始めて、各スタンバイノードに進みます。
systemdを介してPostgresを実行している場合は、Postgressystemdユニットを無効にします。これは、PatroniがPostgresデーモンの起動と停止を管理するときに実行されます。
Patroni用のYAML構成ファイルを作成します。
Note (specific for the primary node): クラスターメンバー間のレプリケーションに使用されているレプリケーションスロットがある場合は、
use_slotsを有効にし、slots構成項目を介して既存のレプリケーションスロットを永続的に構成することをお勧めします。Patroniは、use_slotsが有効になっている場合、メンバー間のレプリケーション用のレプリケーションスロットを自動的に作成し、認識しないレプリケーションスロットをドロップすることに注意してください。ここで永続的なスロットを使用するという考えは、Patroniへの移行が進行中の間、既存のスロットを持続できるようにすることです。詳細は Note (specific for the primary node): を参照してください。
patronisystemdサービスユニットを使用してPatroniを起動します。Postgresが既に実行されていることを自動的に検出し、インスタンスの監視を開始します。
Postgres/"起動手順/"をPatroniに引き渡します。これを行うには、
patronictl restart cluster-name member-nameコマンドを使用してクラスターメンバーを再起動する必要があります。ダウンタイムを最小限に抑えるには、この手順を次のように分割できます。スタンバイノードの即時リスタート。
メンテナンスウィンドウ内のプライマリノードのスケジュールされた再起動。
ステップ
1.2.で永久スロットを構成した場合、Patroniによって作成されたスロットのrestart_lsnが対応するメンバーの元のスロットのrestart_lsnに追いつくことができたら、patronictl edit-config cluster-name member-nameコマンドを介してslots構成からそれらを削除する必要があります。slots構成からスロットを削除することにより、Patroniは、不要になったらクラスターから元のスロットを削除できます。以下に、いくつかのスロットのrestart_lsnをチェックするクエリの例があるので、比較できます。-- Assume original_slot_for_member_x is the name of the slot in your original -- cluster for replicating changes to member X, and slot_for_member_x is the -- slot created by Patroni for that purpose. You need restart_lsn of -- slot_for_member_x to be >= restart_lsn of original_slot_for_member_x SELECT slot_name, restart_lsn FROM pg_replication_slots WHERE slot_name IN ( 'original_slot_for_member_x', 'slot_for_member_x' )
PostgreSQLバージョンのメジャーアップグレード¶
現在メジャーアップグレードを行う唯一の方法は次のとおりです。
ストップパトローニ
PostgreSQLバイナリをアップグレードし、プライマリノードで pg_upgrade を実行します
Patani.ymlを更新する
DCSから初期化キーを削除するか、DCSから完全なクラスター状態をワイプします。2番目は
patronictl remove <cluster-name>を実行することで達成できます。pg_upgradeはinitdbを実行し、実際に新しいPostgreSQLシステム識別子で新しいデータベースを作成するためです。前の手順でクラスターの状態をワイプした場合、パトローニ.dynamic.jsonを古いデータディレクトリから新しいデータディレクトリにコピーすることをお勧めします。以前に設定したいくつかのPostgreSQLパラメーターを保持するのに役立ちます。
プライマリノードでPatroniを起動します。
PostgreSQLバイナリをアップグレードし、atoani.ymlを更新して、スタンバイノードのdata_dirをワイプします。
スタンバイノードでPatroniを起動し、レプリケーションが完了するまで待ちます。
スタンバイノードでのpg_upgradeの実行は、PostgreSQLではサポートされていません。自分が何をしているのか知っている場合は、スタンバイノードでdata_dirを消去する代わりに、https://www.postgresql.org/docs/current/pgupgrade.htmlで説明されているrsync手順を試すことができます。ただし、最も安全な方法は、Patroniにデータを複製させることです。
よくある質問¶
Patroniの起動中に、PatroniはPostgreSQLポートにバインドできないと不平を言っています。
postgresql.confのlisten_addressesとport、patroni.ymlのpostgresql.listenを確認する必要があります。pg_hba.confはそのようなアクセスを許可する必要があることを忘れないでください。Patroniにノードの再起動を要求した後、PostgreSQLはエラーメッセージ
could not open configuration file /"/etc/postgresql/10/main/pg_hba.conf/": No such file or directoryを表示しますPostgreSQL構成を管理する方法に応じて、さまざまなことを意味します。postgresql.config_dir`を指定した場合、Patroniは新しいクラスターをブートストラップするときにのみ、 ``pg_hba.conf` セクションの設定に基づいて
pg_hba.confを生成します。このシナリオでは、PGDATAが空ではなかったため、ブートストラップは発生しませんでした。このファイルは事前に存在している必要があります。