Introduction

TPAは、Ansibleを使用してEDBの推奨に従ってPostgresクラスターをデプロイするオーケストレーションツールです。

TPAは、Postgresの展開とサポートでの長年の苦労した経験に基づいたEDBに続くベストプラクティスを具体化しています。これらの推奨事項は、実稼働環境と同様に、クイックテストベッドのセットアップにも適用できます。

TPAは何ができますか?

TPAは、トポロジーから構成の細部に至るまで、Postgresクラスターを説明するために使用できる宣言型構成メカニズムを中心に構築されています。

tpaexec configure を実行することから始めて、いくつかの高レベルの選択(インストールするPostgresのバージョンなど)に基づいて初期クラスター構成を生成します。デフォルトの構成はそのまま使用する準備ができていますが、ニーズに合わせて編集できます(生成された構成は単なるテキストファイル config.ymlです)。

この構成を使用して、TPAは次のことができます。

1.サーバー(AWS EC2インスタンスまたはDockerコンテナなど)と、クラスターをホストするために必要なその他のリソースをプロビジョニングします(または、接続の詳細を指定するだけで、既存のサーバーまたはVMにデプロイできます)。

2.オペレーティングシステムを構成します(カーネル設定の調整、ユーザーとSSHキーの作成、パッケージのインストール、systemdサービスの定義、ログローテーションのセットアップなど)。

  1. Postgresと関連するコンポーネント(例、PGD、 Barman、pgbouncer、repmgr、およびさまざまなPostgres拡張機能)をインストールして構成します。

4.展開後、クラスターで自動テストを実行します。

5.構成に対する将来の変更を展開します(たとえば、Postgres設定の変更、パッケージのインストールとアップグレード、新しいサーバーの追加など)。

どうやって使うの?

TPAを使用するには、インストールしてtpaexec setup コマンドを実行する必要があります。プラットフォームの installation instructions に従ってください。

TPAは4つの異なる段階で動作し、Postgresクラスターを起動します。

#  1. Configuration: decide what kind of cluster you want

[tpa]$ tpaexec configure clustername --architecture M1 --platform aws \
        --postgresql 14

#  2. Provisioning: create the servers needed to host the cluster

[tpa]$ tpaexec provision clustername

#  3. Deployment: install and configure the necessary software

[tpa]$ tpaexec deploy clustername

#  4. Testing: make sure everything is working as expected

[tpa]$ tpaexec test clustername

ラップトップ、EC2インスタンス、またはネットワーク経由でクラスターのサーバーに到達できるマシンからTPAを実行できます。

これが list of capabilities and supported software です。

構成

コマンドは、選択したオプションに基づいて、クラスターを説明する単純なYAML構成ファイルを生成します。構成はすぐに使用する準備ができていますが、ニーズに合わせて変更できます。構成ファイルを編集するのは、作成の前と後の両方で、make any configuration changes to your clusterの通常の方法です。

この段階で、クラスターのアーキテクチャとプラットフォームを選択する必要があります。 アーキテクチャ は、特定の目的のためにPostgresをセットアップするためのサーバーとソフトウェアの推奨レイアウトです。例には、「M1」(プライマリレプリカとストリーミングレプリカを備えたPostgres)および「PGD-Always-ON」( Always On構成のEDB Postgres Distributed 5)が含まれます。 プラットフォーム は、サーバーをホストして、AWS、Docker、ベアメタルサーバーなどのアーキテクチャを展開する手段です。

プロビジョニング

コマンドは、クラスターに必要なインスタンスとその他のリソースを作成します。プロセスの詳細は、クラスターの構成中に選択したアーキテクチャ(M1など)とプラットフォーム(AWSなど)によって異なります。

たとえば、必要な権限を持つAWSアクセスが与えられると、TPAはEC2インスタンス、VPC、サブネット、ルーティングテーブル、インターネットゲートウェイ、セキュリティグループ、EBSボリューム、Elastic IPなどをプロビジョニングします。

「ベア」プラットフォームを選択し、接続の詳細を提供することにより、既存のサーバーを「プロビジョニング」することもできます。これらがベアメタルサーバーでも、クラウドプラットフォームで個別にプロビジョニングされたものでも、まるでTPAで作成されたかのように使用できます。

単一のプラットフォームに制限されません。必要に応じて、クラスターを一部のAWSインスタンス(マルチリージョン)と一部のオンプレミスサーバー、または他のデータセンターのサーバーに分散できます。

プロビジョニング段階の最後に、基本的なオペレーティングシステムがインストールされた必要な数のインスタンスが作成され、TPAがSSH経由でアクセスできます(ルートにsudoを使用)。

展開

コマンドは、プロビジョニングされたサーバーにPostgresおよびその他のソフトウェアをインストールおよび構成します(TPAによって作成された場合とそうでない場合があります。ただし、SSHおよびsudoアクセスが利用可能な限り、誰が作成したかは関係ありません)。これには、レプリケーション、バックアップなどの設定が含まれます。

展開段階の最後に、Postgresが起動して実行されます。

テスト

tpaexec test コマンドは、デプロイされたクラスターに対してさまざまなアーキテクチャおよびプラットフォーム固有のテストを実行し、期待どおりに動作していることを確認します。

テスト段階の最後には、完全に機能するクラスターが完成します。

インクリメンタルな変更

TPAは、プロビジョニング、デプロイ、およびテストがべき等になるように慎重に設計されています。それらを実行し、 config.ymlに変更を加え、プロセスを再度実行して変更をデプロイできます。構成またはインスタンスで何も変更されていない場合、プロセス全体を再実行しても何も変更されません。

クラスター管理

クラスターが起動して実行されると、TPAは、構成の変更、スイッチオーバー、ダウンタイムゼロのマイナーバージョンアップグレードなど、便利なクラスター管理機能を提供します。これらの機能により、手動で変更を行うよりも、クラスターを簡単かつ安全に管理できます。

Ansibleで拡張可能

TPAはvariety of configuration optionsをサポートしているため、 config.ymlを編集してprovision/deploy/testを再実行するだけで、たくさんのことができます。 TPAが既にサポートしているものを超える必要がある場合は、次のように書くことができます

  • TPA custom commands 、これにより、クラスターで実行するプレイブックを簡単に作成できます。クラスターディレクトリにcommands/xyz.yml を作成し、 tpaexec xyz /path/to/cluster を使用して呼び出します。自動化が必要な管理タスクまたはプロセスに最適です。

  • TPA custom tests 。環境とアプリケーションに固有の詳細な検証で組み込みテストを強化します。 tpaexec test を使用して、統一された反復可能な方法ですべてのテストを実行すると、危機に対処するとき、または日常のクラスター管理中に、重要なことを見逃すことはありません。

  • Hook scripts 、展開のさまざまな段階で呼び出されます。たとえば、 hooks/pre-deploy.yml のタスクはメイン展開の前に実行されます。 post-deploy を含む他の多くのフックがあります。これにより、あらゆる種類のAnsible機能を自由に利用できます。

ただのPostgresです

TPAは、多くの機能が構成された複雑なクラスターを作成できますが、結果はPostgresのみです。インストールは、人生をよりシンプルにするために設計されたいくつかの規則に従いますが、あなたとデータベースの間に隠された魔法や何かが立つことはありません。他のPostgresインストールで実行できるすべてのことを、TPAクラスターで実行できます。

はじめに

システムの TPA installation instructions 、次に configure your first cluster に従います。