Deploying an EDB Postgres Distributed example cluster on Linux hosts#

TPAとPGDの紹介#

私たちは、さまざまなPostgres構成のインストールと管理を簡単に再現可能にするためにTPAを作成しました。 TPAは、Postgresの作成と展開を調整します。このクイックスタートでは、最初にTPAをインストールします。既にTPAをインストールしている場合、これらの手順をスキップできます。 TPAを使用して、さまざまな構成のPostgresクラスターを展開できます。

PGDは、高いパフォーマンスと可用性を実現するように設計されたPostgresのマルチマスター複製実装です。 PGDのインストールは、TPAによって調整されます。 TPAを使用して、PGDデモクラスターの構成ファイルを生成します。

TPA Linuxホストオプションを使用すると、クラウドまたはVMプラットフォームのユーザーがTPAを使用してEDB Postgres分散を構成できます。 TPAに必要なのは、ターゲットシステムをLinuxオペレーティングシステムで構成し、SSHを使用してアクセスできることだけです。他のTPAプラットフォームDockerおよびAWSとは異なり、Linuxホスト構成はターゲットマシンをプロビジョニングしません。展開する場所にそれらをプロビジョニングするのは自分自身です。

このクラスターは、Linuxサーバーインスタンスを使用してクラスターのノードをホストします。ノードには、3つの複製データベースノード、3つのコホスト接続プロキシ、および1つのバックアップノードが含まれます。 TPAは、必要なEDB Postgres分散ソフトウェアと構成を各ノードにプロビジョニング、準備、および展開できます。

前提条件#

Linuxホストを構成する#

このクイックスタートには、4つのホストをプロビジョニングする必要があります。各ホストには supported Linux operating system をインストールする必要があります。パスワードのプロンプトを排除するには、証明書キーペアを使用して各ホストにSSHアクセスできることも必要です。

どのクラウドまたはVMプラットフォームを使用するかにかかわらず、各インスタンスにSSHでアクセスでき、各インスタンスが他のインスタンスに接続できることを確認する必要があります。パブリックネットワークまたはクラウドプラットフォームのVPCを介して接続できます。オンプレミスVMのローカルネットワークを介して接続できます。

これができない場合は、DockerまたはAWSクイックスタートを検討することをお勧めします。これらの構成は、セットアップが簡単で、すぐに破棄します。たとえば、

Docker、Linuxホスト、またはAWSクイックスタートの選択 は、コンピューティングインスタンスを自動的にプロビジョニングし、これらのインスタンスのVPCを作成します。

Host name

Public IP

Private IP

linuxhost-1

172.19.16.27

192.168.2.247

linuxhost-2

172.19.16.26

192.168.2.41

linuxhost-3

172.19.16.25

192.168.2.254

linuxhost-4

172.19.16.15

192.168.2.30

これらはIPアドレスの例です。クイックスタートを進めながら、これらを独自のパブリックおよびプライベートIPアドレスに置き換えます。

ホスト管理ユーザーを設定する#

各マシンには、インストールに使用するユーザーアカウントが必要です。簡単にするために、すべてのホストで同じ名前のユーザーを使用します。各ホストで、パスワードの入力を求められずにホストにSSHで接続できるようにユーザーも構成します。そのユーザーにホストでのsudo特権を必ず付与してください。 4つのホストでは、ユーザーrockyは既にsudo特権で構成されています。

準備#

EDBアカウント#

TPA と PGDの両方をインストールするにはEDBアカウントが必要です。

まだお持ちでない場合。サインアップすると、EDBのソフトウェアリポジトリのトライアルサブスクリプションが提供されます。

登録したら、 EDB Repos 2.0 ページに移動し、リポトークンを取得します。

このページに最初にアクセスしたときに、 Request Access を選択してリポトークンを生成します。 Copy Token アイコンを使用してトークンをコピーし、安全に保存します。

環境変数の設定#

最初に、 EDB_SUBSCRIPTION_TOKEN 環境変数を EDBアカウント ステップで取得したEDBリポトークンの値に設定します。

export EDB_SUBSCRIPTION_TOKEN=<your-repo-token>

これを.bashrc スクリプトまたは同様のシェルプロファイルに追加して、常に設定されるようにできます。

リポジトリの構成#

この例に必要なソフトウェアはすべて、 EDB Postgres Distributedパッケージリポジトリから入手できます。スクリプトをダウンロードして実行して、 EDB Postgres分散リポジトリを構成します。このリポジトリには、TPAパッケージも含まれています。

curl -1sLf "https://downloads.enterprisedb.com/$EDB_SUBSCRIPTION_TOKEN/postgres_distributed/setup.deb.sh" | sudo -E bash
``` ## Trusted Postgres ArchitectTPAのインストール

TPAを使用して、PGDをプロビジョニングおよび展開します。以前にTPAをインストールしている場合は、 :ref:`Next Steps with PGD <Next Steps with PGD>` に進むことができます。 TPAをインストールするための完全な手順については、 :ref:`Trusted Postgres Architect documentation </tpa/latest/INSTALL/>`  にあります。これもここに含まれています。

###  Linux環境

ホストプラットフォームとしての :ref:`TPA supports several distributions of Linux </tpa/latest/INSTALL/>` 。これらの例は、Ubuntu 22.04用に書かれていますが、サポートされている他のプラットフォームでも手順は同様です。

###  TPAパッケージをインストールする

```shell
sudo apt install tpaexec

TPAの設定#

次に、TPAのPython環境を構成するTPAを構成する必要があります。次のコマンドでtpaexec を呼び出します setup

sudo /opt/EDB/TPA/bin/tpaexec setup
export PATH=$PATH:/opt/EDB/TPA/bin

export コマンドをシェルのプロファイルに追加できます。

TPAインストールのテスト#

selftest を実行して、TPAが正しくインストールされたことを確認できます。

tpaexec selftest
``` TPAがインストールされました。

##  TPAを使用したPGDのインストール

###  構成ファイルの生成

:ref:`tpaexec configure </tpa/latest/tpaexec-configure/>` コマンドを実行して、構成フォルダーを生成します。
tpaexec configure democluster
–architecture PGD-Always-ON
–platform bare
–edb-postgres-advanced 15
–redwood
–no-git
–location-names dc1
–pgd-proxy-routing local
–hostnames-unsorted
PGD-Always-ONアーキテクチャ `--architecture PGD-Always-ON`  を指定します。これは、 :ref:`PGD 5's Always On architectures <Choosing your architecture>` の構成をセットアップします。デフォルトアーキテクチャの一部として、3つのデータノードでクラスターを構成し、3つの `PGD Proxy <https://www.enterprisedb.com/docs/pgd/latest/routing/proxy/>`_ サーバーとバックアップ用の :ref:`Barman <Backup and recovery>` ノードをコホストします。

Linuxホストの場合、「ベア」プラットフォーム `--platform bare`  をターゲットとしていることを指定します。 TPAは、展開中に各ホストで実行されているLinuxバージョンを決定します。サポートされているオペレーティングシステムの詳細については、 :ref:`the EDB Postgres Distributed compatibility table <Compatibility changes>`  を参照してください。

データノードがOracle互換性`--redwood`  を備えた `EDB Postgres Advanced Server v15 <https://www.enterprisedb.com/docs/epas/latest/>`_  `--edb-postgres-advanced 15`  を実行することを指定します。

`--location-names` を使用して、ノードの概念的なロケーションを`dc1` に設定します。次に、プロキシルーティングが各ロケーション内のすべてのノードにトラフィックをルーティングできるように、 `--pgd-proxy-routing` を`local` に設定します。

デフォルトでは、TPAは構成変更をGitリポジトリにコミットします。この例では、それをする必要がないため、`--no-git` フラグを渡します。

最後に、 `--hostnames-unsorted` を渡すことにより、ノードの反復可能なホスト名を生成するようにTPAに依頼します。それ以外の場合、適切なワードの事前定義されたリストからホスト名をランダムに選択します。

このコマンドは、現在の作業ディレクトリに`democluster` という名前のサブディレクトリを作成します。これには、TPAがクラスターの作成に使用する`config.yml` 構成ファイルが含まれています。次を使用して表示できます。

```shell
less democluster/config.yml

次に、構成ファイルを編集して、管理ユーザー名、パブリックおよびプライベートIPアドレスなど、Linuxホストに関連する詳細を追加する必要があります。

構成の編集#

好みのエディターを使用して、democluster/config.yml を開きます。

ansible_user: root を含む行を検索します。 root を、SSHアクセスとsudo特権で構成したユーザーの名前に変更します。これに次の行を続けます。

manage_ssh_hostkeys: yes

instance_defaults セクションは次のようになります。

edb_notranlate_8 次に、最初のノードkaboomの構成設定であるnode: 1 を検索します。

node: 1 行の後に、ノードのパブリックおよびプライベートIPアドレスを追加します。このノードのホストとしてlinuxhost-1 を使用します。次をファイルに追加し、IPアドレスを置き換えます。各行の先頭をnode: 行の先頭に位置合わせします。

public_ip: 172.19.16.27
private_ip: 192.168.2.247

kaboomのエントリ全体は次のようになりますが、独自のIPアドレスを使用します。

- Name: kaboom
  backup: kapok
  location: dc1
  node: 1
  public_ip: 172.19.16.27
  private_ip: 192.168.2.247
  role:
  - bdr
  - pgd-proxy
  vars:
    bdr_child_group: dc1_subgroup
    bdr_node_options:
      route_priority: 100
``` 他の3つのノードに対してこのプロセスを繰り返します。

ノードkaftanの構成設定である`node: 2` を検索します。このノードには`linuxhost-2` を使用します。 IPアドレスを置き換えて、次を追加します。

```yaml
  public_ip: 172.19.16.26
  private_ip: 192.168.2.41

ノードkaolinの構成設定であるnode: 3 を検索します。このノードにはlinuxhost-3 を使用します。 IPアドレスを置き換えて、次を追加します。

public_ip: 172.19.16.25
private_ip: 192.168.2.254

最後に、ノードkapokの構成設定であるnode: 4 を検索します。このノードにはlinuxhost-4 を使用します。 IPアドレスを置き換えて、次を追加します。

public_ip: 172.19.16.15
private_ip: 192.168.2.30

クラスターのプロビジョニング#

次を実行できるようになりました。

tpaexec provision democluster

このコマンドは、クラスターを展開する準備をします。 DockerやAWSなどの他のプラットフォームでは、このコマンドは必要なホストも作成します。Linuxホストを使用する場合、ホストは既に構成されている必要があります。

Linuxホストのこのプロセスの一部は、後でSSH操作のためのホストのキーペアを作成することです。これらのキーペアを作成したら、キーペアの公開部分をホストにコピーする必要があります。これは、 ssh-copy-id で行うことができ、デモクラスターID -i と各ホストへのログインを提供します。この例では、これらは次のコマンドです。

ssh-copy-id -i democluster/id_democluster rocky@172.19.16.27
ssh-copy-id -i democluster/id_democluster rocky@172.19.16.26
ssh-copy-id -i democluster/id_democluster rocky@172.19.16.25
ssh-copy-id -i democluster/id_democluster rocky@172.19.16.15

tpa_known_hosts ファイルを作成できるようになりました。これにより、ホストを検証できます。各ホスト-H でssh-keyscan を使用し、その出力をtpa_known_hosts に追加します。

ssh-keyscan -H 172.19.16.27 >> democluster/tpa_known_hosts
ssh-keyscan -H 172.19.16.26 >> democluster/tpa_known_hosts
ssh-keyscan -H 172.19.16.25 >> democluster/tpa_known_hosts
ssh-keyscan -H 172.19.16.15 >> democluster/tpa_known_hosts

クラスターを展開する#

これで、クラスターを展開する準備がすべて整いました。デプロイするには、次を実行します。

tpaexec deploy democluster

TPAは構成を適用し、必要なパッケージをインストールし、実際のEDB Postgres分散クラスターをセットアップします。

クラスターへの接続#

これで、SSHを使用してクラスターのノードのいずれかにログインし、データベースに接続する準備が整いました。構成プロセスの一部では、すべてのノードのSSHログインをセットアップし、キーを完了します。 SSH構成を使用するには、前にtpaexec configure コマンドで作成したdemocluster ディレクトリにいる必要があります。

cd democluster

そこから、 ssh -F ssh_config <hostname> を実行してSSH接続を確立できます。クラスター内の最初のデータベースノードであるkaboomに接続します。

ssh -F ssh_config kaboom
__OUTPUT__
[rocky@kaboom ~]#

kaboomに、以前に構成した管理ユーザーとansibleユーザーであるrockyとしてログインしていることに注意してください。

次に、enterprisedbユーザーのIDを採用する必要があります。このユーザーは事前構成され、クラスターのノードに接続することが許可されています。

sudo -iu enterprisedb
__OUTPUT__
enterprisedb@kaboom:~ $

psql コマンドを実行して、bdrdb データベースにアクセスできるようになりました。

psql bdrdb
__OUTPUT__
psql (15.2.0, server 15.2.0)
Type "help" for help.

bdrdb=#

kaboomノードで実行されているPostgresデータベースに直接接続され、 SQLコマンドの発行を開始できます。

SQLクライアントを終了するには、exit と入力します。

PGD CLIを使用する#

PGD CLIとしても知られるpgdユーティリティを使用すると、 EDB Postgres分散クラスターを制御および管理できます。ノードには既にインストールされています。

pgd check-health を実行することにより、クラスターの状態を確認できます。

pgd check-health
__OUTPUT__
Check      Status Message
- ----      ------ -------
ClockSkew  Ok     All BDR node pairs have clockskew within permissible limit
Connection Ok     All BDR nodes are accessible
Raft       Ok     Raft Consensus is working correctly
Replslots  Ok     All BDR replication slots are working correctly
Version    Ok     All nodes are running same BDR versions
enterprisedb@kaboom:~ $

または、 pgd show-nodes を使用して、クラスター内のデータ保持ノードを表示するようにPGDに依頼できます。

pgd show-nodes
__OUTPUT__
Node   Node ID    Group        Type Current State Target State Status Seq ID
- ---   -------    -----        ---- ------------- ------------ ------ ------
kaboom 2710197610 dc1_subgroup data ACTIVE        ACTIVE       Up     1
kaftan 3490219809 dc1_subgroup data ACTIVE        ACTIVE       Up     3
kaolin 2111777360 dc1_subgroup data ACTIVE        ACTIVE       Up     2
enterprisedb@kaboom:~ $

同様に、 pgd show-proxies を使用してプロキシ接続ノードを表示します。

pgd show-proxies
__OUTPUT__
Proxy  Group        Listen Addresses Listen Port
- ----  -----        ---------------- -----------
kaboom dc1_subgroup [0.0.0.0]        6432
kaftan dc1_subgroup [0.0.0.0]        6432
kaolin dc1_subgroup [0.0.0.0]        6432

プロキシは、アプリケーションのデータノードのクラスターへの高可用性接続を提供します。 psql -h kaboom,kaftan,kaolin -p 6432 bdrdb コマンドを使用して、プロキシに接続し、データベースに接続できます。

psql -h kaboom,kaftan,kaolin -p 6432 bdrdb
__OUTPUT__
psql (15.2.0, server 15.2.0)
SSL connection (protocol: TLSv1.3, cipher: TLS_AES_256_GCM_SHA384, compression: off)
Type "help" for help.

bdrdb=#

クラスターを探索する#