Patroni cluster management commands#
Patroniは、次のコマンドオプションを使用して、M1アーキテクチャでシングルマスターフェールオーバーマネージャーとして使用できます。
tpaexec configure cluster_name -a M1 --enable-patroni --postgresql 14
またはconfig.ymlオプションを設定することにより
cluster_vars:
failover_manager: patroni
TPAは、 patroni パッケージPGDGリポジトリからまたはedb-patroni
パッケージEDBリポジトリからを使用してPatroniクラスターを展開できます。これは、
config.ymlのcluster_vars の下のpatroni_package_flavour
オプションを介して構成できます。これは、 --patroni-package-flavour
コマンドライン引数を介して設定することもできます。
patroni_package_flavour
が明示的に設定されていない場合、TPAは、構成されたリポジトリに基づいてフレーバーを推論しようとします。EDBリポジトリが構成されている場合、暗黙的にedb
フレーバーを選択し、それ以外の場合は暗黙的にcommunity
フレーバーを選択します。
TPA configure は3つのetcdノードを追加し、オプション
--enable-haproxy
を指定する場合2つのhaproxyノードを追加する場合があります。
etcdは、分散構成ストアDCSに使用されます。
Patroniは他のDCSバックエンドをサポートしていますが、現在EDBまたはTPAではサポートされていません。
HAProxyの代替として、--enable-pgbouncer
オプションを使用して、PostgresノードでPgBouncerを構成できます。
PgBouncerは、プライマリの接続をプールするように構成されます。
Patroniは、クラスター内のフェールオーバーまたはスイッチオーバー時にPgBouncerを再構成するように構成されるため、PgBouncerは新しいプライマリPostgresインスタンスに従います。
TPAは、既存のPostgreSQLクラスターを変換するPatroniの機能を使用します。これにより、TPAは構成を初期化および管理できます。 PostgreSQLクラスターが作成されると、Patroniが管理を引き継ぎます。 TPAは、セットアップ中に使用されたpostgres構成ファイルを削除します。
セットアップが完了すると、クラスターのTPAとconfig.yml
の設定を使用して、Postgresを引き続き管理できます。コマンドライン
patronictl やREST
APIなどのPatroniインターフェイスを使用することもできますが、可能な限りTPAメソッドを使用することをお勧めします。
Patroniパッケージバージョン#
デフォルトでは、TPAはPatroniの最新バージョンをインストールします。
インストールされるPatroniパッケージのバージョンは、 config.yml
ファイルのcluster_vars
セクションの下のpatroni_package_version: xxx
を含めることにより指定できます。
cluster_vars:
…
patroni_package_version: 4.0.0-1PGDG.rhel8`
…
aptまたはyumが受け入れるバージョン指定子を使用できます。
バージョンが一致しない場合は、 *
ワイルドカードを追加してみてください。これは、パッケージバージョンに2:...
のようなエポック修飾子がある場合に必要になることがよくあります。
TPAは、Patroni REST
APIを保護するための堅牢なオプションを提供します。これは、主にpatroni_ssl_enabled
およびpatroni_authentication_mode 変数によって制御されます。
TLS暗号化#
patroni_ssl_enabled: true を設定すると、REST
APIのTLS暗号化が有効になります。 TPAは自動的に次のことを行います。
各PatroniノードのTPAクラスターCAとサーバー証明書を生成します。
HTTPSでトラフィックを処理するようにPatroni REST APIを構成します。
HTTPSを介して接続し、CAを使用してサーバー証明書を検証するようにクライアント
patronictlやHAProxyなどを構成します。
クライアント認証#
TLS暗号化が有効になる patroni_ssl_enabled: true すると、
patroni_authentication_mode 変数を使用して認証モードを選択できます。
``basic`` デフォルト クライアントは、設定済みのPatroni REST APIのユーザー名とパスワードを提供する必要があります。 TPAは、これらの資格情報を自動的に生成します。
``mtls`` : クライアントは、信頼できるクラスターCAによって署名された有効なTLS証明書を提示する必要があります。 TPAは自動的に
クライアント証明書
verify_client: requiredを要求および検証するようにPatroni REST APIを構成します。必要なクライアント証明書とキーを使用してクライアント
patronictl、HAProxyを構成します。
APIアクセス制御許可リスト#
セキュリティを強化するために、PatroniのREST APIはallowlist
で自動的に構成されます。このリストは、TPAインベントリで定義されたホスト名に基づいて、有害な可能性のあるAPIエンドポイントPOST
、PUT 、PATCH 、DELETE
を使用するエンドポイントへのアクセスをクラスター内の他のPatroniノードにのみ制限します。読み取り専用エンドポイントヘルスチェックなどは、他のソースHAProxyなどからアクセスしたままです。
これらの構成変数は、TPAでのPatroniの展開での特定の動作を制御するために使用できます。
Variable |
Default value |
Description |
|---|---|---|
patroni_super_user |
postgres |
スーパーユーザーロールのpostgresで作成するユーザー。 |
patroni_replication_user |
replicator |
レプリケーションロールのpostgresで作成するユーザー名。 |
patroni_restapi_user |
patroni |
patroni REST API用に構成するユーザー名。 |
patroni_rewind_user |
rewind |
pg_rewindファンクションのpostgresで作成するユーザー名。 |
patroni_installation_method |
pkg |
パッケージまたはソースたとえばgitリポジトリまたはdockerの場合はローカルソースディレクトリなどからpatroniをインストールします。 |
patroni_package_flavour |
community if no EDB repository is configured, else edb |
`edb-patroni`パッケージ `edb`フレーバー、EDBリポジトリが必要 または `patroni`パッケージ `community`フレーバー、PGDGおよびEPEL RedHatベースのみのリポジトリが必要 をインストールするかどうか。 |
patroni_ssl_enabled |
no |
REST APIおよびctl接続のSSLを有効にするかどうか。可能な場合は、クラスターSSL証明書とCAを使用します。 |
patroni_authentication_mode |
basic |
REST APIのクライアント認証モード`basic`または`mtls`を定義します。 `patroni_ssl_enabled: true`が必要です。 |
patroni_rewind_enabled |
yes |
postgres rewindを有効にするかどうか、patroni_rewind_userで定義されたユーザーを作成し、configセクションを追加します。 |
patroni_watchdog_enabled |
no |
追加のスプリットブレイン防止のためにカーネルウォッチドッグを構成するかどうか。 |
patroni_dcs |
etcd |
DCSに使用するバックエンド。現時点ではetcdのみがオプションです。 |
patroni_dcs_namespace |
/tpa |
Patroniがクラスター状態を保存するDCS内の名前空間。 |
patroni_listen_port |
8008 |
REST API TCPポート番号 |
patroni_etcd_user |
etcd_patroni |
`etcd_authentication_mode`が`basic`の場合にPatroniが使用する専用etcdユーザーのユーザー名。 |
patroni_conf_settings |
{} |
パトローニ構成のオーバーライドを含む構造化データオブジェクト。部分的なデータを提供でき、生成された構成とマージされます。実行時に既知のインスタンス情報に基づいて生成された値をオーバーライドしないように注意してください。 |
patroni_dynamic_conf_settings |
{} |
DCS設定専用のオプションの構造化データ。これは`patroni_conf_settings`にマージされます。 |
patroni_repl_max_lag |
None |
これは、haproxy_read_only_load_balancer_enabled`がtrueの場合にのみhaproxyバックエンドヘルスチェックで使用されます。 `/replica?lag`の可能な値については、 :ref:`Configuring lvm-direct for production <Patroni cluster management commands> を参照してください |
注釈
Ansible Towerを介して展開する場合、patroni_etcd_user をデフォルト値から変更すると、展開が失敗します。これは、TPAがインベントリ内の動的なシークレット名を処理できないために発生します。この問題を回避するには、プロビジョニング後および展開前に、パスワードをローカルで手動生成し、構成リポジトリにプッシュする必要があります。
tpaexec store-password <your_custom_username> .
patroniの構成は3つのレイヤーから構築され、Patroniデーモンによって設定されたデフォルトから始まり、DCSからロードされた構成、最後にローカル構成から構築されます。最後は、構成ファイルから制御でき、環境を介してオーバーライドできます。 TPAは構成ファイルを制御し、値はこの順序で構築されます。
APIに送信され、構成ファイルのブートストラップセクションに保存されるDCS構成。
postgresのTPA変数はDCS設定にロードされます。 postgresql.conf を参照してください。一部の機能はサポートされていません。以下の注意事項を参照してください。DCS設定のPatroniのデフォルト
patroni_dynamic_conf_settingsのユーザー指定のデフォルト。DCS設定をオーバーライドする場合は、ここで行うことができます。
YAML構成ファイルに保存されるローカル構成
上記の前の手順からロードされた
bootstrap.dcs。patroni_ssl_enabledなどの機能フラグによって有効になる構成。上記の表を参照してください。次に、最後にユーザー指定設定からオーバーロードされます
patroni_conf_settingsオプション。機能フラグによって制御されない構成を変更または追加する場合、これはそれに最適な場所です。
構成は、IPアドレス、ポート番号、クラスターロールなどのクラスター情報からTPAによって生成された構成に マージ されることに注意してください。これは、クラスターの安定したオペレーションに影響を与える可能性があるため、オーバーライドするものに注意してください。
Patroniはすべてのpostgres構成をDCSに保存し、これがpostgresに配布される方法と時期を制御するため、TPAの一部の機能はpatroniと互換性がありません。
postgres_conf_template設定でpostgresql.confの生成に使用されたテンプレートを変更することはできません。設定
postgres_conf_dirでは、Postgres構成ファイルの場所を変更することはできません。
TPAのPatroni構成 config.yml#
単一の値をオーバーライドできます。
cluster_vars:
patroni_conf_settings:
bootstrap:
dcs:
ttl: 120
またはフルブロックPatroniドキュメントからの例を使用して
cluster_vars:
patroni_conf_settings:
restapi:
http_extra_headers:
X-Frame-Options: SAMEORIGIN
X-XSS-Protection: 1; mode=block
X-Content-Type-Options: nosniff
https_extra_headers:
Strict-Transport-Security: max-age=31536000; includeSubDomains
デフォルトのTPA構成変数に存在する値またはセクションを無効にする場合は、値をnull
に設定できます。これにより、パトロニは、構成ファイルをロードするときにこのセクションを無視します。
たとえば、log のデフォルトのTPA構成は次のとおりです。
log:
dir: /var/log/patroni
ロギングをオフにするには、これをconfig.yml に追加します。
cluster_vars:
patroni_conf_settings:
log: null
Eetcd統合#
etcd がDCSとして使用される場合、TPAはetcd
セキュリティ構成に基づいて、それに接続するようにPatroniを自動的に構成します。
プロトコル
etcd_ssl_enabledに基づいてhttpまたはhttpsを使用します。CA証明書 TLSが有効になっている場合に、クラスターCA証明書パスを提供します。
認証
etcd_authentication_modeがbasicの場合、Patroniはユーザー名patroni_etcd_userとその生成されたパスワードで構成されます。etcd_authentication_modeがmtlsの場合、Patroniはクライアント証明書とキーへのパスで構成されます。
TPAは、Patroniクラスターを管理するためのこれらの最小限のツールセットを提供します。
ステータス#
Patroni実行に従ってTPAクラスターの現在のステータスを確認するには
tpaexec status cluster_name
スイッチオーバー#
レプリカノードへのスイッチオーバーを実行するにはメンテナンスを実行するには、次のコマンドを実行します。
tpaexec switchover cluster_name new_primary
new_primary引数は、現在正常なレプリカとして実行されている既存のクラスターノードの名前である必要があります。スイッチオーバーが実行される前に、これがtrueを確認するためにチェックが実行されます。
スイッチオーバーが実行されたら、 deploy およびtest
を実行して、正常なクラスターを確認することをお勧めします。
tpaexec deploy cluster_name
tpaexec test cluster_name
TPAは、config.ymlの内容に関係なく、展開中にノードの現在のロールを検出しますたとえば、別のノードがリーダーである場合。
tpaexec upgrade を使用したパトローニのマイナー更新#
特定のパッケージバージョンにアップグレードしようとする場合は、
config.yml のpatroni_package_version
が更新されて、目的のバージョンを反映していることを確認します。
目的のバージョンを追加の引数としてtpaexec upgrade
コマンドに渡すこともできます。
tpaexec upgrade <cluster_dir> -e patroni_package_version="<desired version>" --components=patroni
詳細については、 package version selection and upgrade のセクションを参照してください。
アップグレードのためにPatroniを選択するには、 tpaexec upgrade
コマンドに渡される--components フラグに patroni
またはall が含まれていることを確認します
component selection for upgrade のセクションを参照してください
詳細については、