A first cluster deployment
==========================

この短いチュートリアルでは、単純な :ref:`M1 architecture <M1>` デプロイメントをローカルDockerインストールに展開する手順を実行します。チュートリアルの最後までに、4つのコンテナ、1つのプライマリデータベース、2つのレプリカ、およびバックアップノードが構成され、探索できる準備が整います。

この例では、UbuntuシステムでTPAを実行しますが、ほとんどのLinuxシステムで考慮事項は同様です。

TPAのインストール
^^^^^^^^^^^^^^^^^

EDB顧客の場合、最初に :ref:`EDB repo instructions <TPA installation>` に従ってください。これは、EDBのリポジトリからTPAパッケージを直接インストールします。

TPAのオープンソースユーザーの場合は、最初に :ref:`instructions on how to build from the source <TPA installation>` を参照してください。これは、Github.comからTPAをダウンロードする方法を説明しています。

Dockerのインストール
^^^^^^^^^^^^^^^^^^^^

このチュートリアルでは、展開例をDockerに展開します。
Dockerをまだインストールしていない場合は、セットアップする必要があります。

DebianまたはUbuntuにDockerをインストールするには

::

   sudo apt update
   sudo apt install docker.io

他のLinuxディストリビューションについては、
 `Install Docker Engine <https://docs.docker.com/engine/install/>`_ を参照してください。

ユーザーをdockerグループに追加します。

::

   sudo usermod -aG docker <yourusername>
   newgrp docker

Cgroupsバージョン
^^^^^^^^^^^^^^^^^

現在、TPAでは、システムでCgroupsバージョン1を構成する必要があります。

実行します

::

   mount | grep cgroup | head -1

出力に\ ``tmpfs`` への参照が表示されない場合は、cgroups
v2を無効にする必要があります。

適切な変更を行うには、次を実行します。

::

   echo GRUB_CMDLINE_LINUX=systemd.unified_cgroup_hierarchy=false | sudo tee /etc/default/grub.d/cgroup.cfg

次に、Grubを更新して、システムをリブートします。

::

   sudo update-grub
   sudo reboot

..  Warning::
   ユーザーにDockerデーモンと対話できる機能を付与すると、Dockerホストでのrootを簡単に取得できます。信頼できるユーザーにのみDockerデーモンへのアクセスを付与します。

TPAを使用した構成の作成
^^^^^^^^^^^^^^^^^^^^^^^

次の手順は、構成を作成することです。 TPAは、 ``configure``
コマンドを使用して、作業のほとんどを実行します。あなたがしなければならないのは、コマンドラインフラグとオプションを指定して、展開するものを大まかに選択することです。
``tpaexec configure`` コマンドは次のとおりです。

::

   tpaexec configure demo --architecture M1 --platform docker --postgresql 15 --enable-repmgr --no-git

このコマンドは、 :ref:`M1 architecture <M1>` を含む\ ``demo``
という構成を作成します。したがって、プライマリ、レプリカ、およびバックアップノードがあります。

``--platform docker``
は、ローカルのDockerインスタンスでこの構成を作成するようにTPAに指示します。すべてのコンテナとOS要件をプロビジョニングします。他のプラットフォームには、アマゾンウェブサービスと同じことを行う
 :ref:`awscliを使用してボリューム属性を変更する <awscliを使用してボリューム属性を変更する>`  、および :ref:`プラットフォームベア <プラットフォームベア>` 
が含まれます。オペレーティングシステムのプロビジョニングをスキップし、構成済みのLinuxホストへのソフトウェアのインストールに直接進みます。

``--postgresql 15``
引数は、コミュニティPostgresバージョン15を使用するようにTPAに指示します。ソフトウェアを選択するためのオプションがいくつかありますが、これはオープンソースユーザーにとって最も簡単なデフォルトです。

``--enable-repmgr``
を追加すると、TPAに :ref:`Replication Manager <Configuring repmgr>` を使用してレプリケーションとフェイルオーバーを処理するように展開を構成するように指示します。

最後に、\ ``--no-git``
は、Gitを使用して構成をリビジョン制御できるTPAの機能をオフにします。

このコマンドを実行します。完了してもコマンドラインには何も返されません。ただし、
``demo``
というディレクトリが作成され、いくつかのファイルが含まれます。これらのファイルには、新しい展開のブループリントである\ ``config.yml``
が含まれています。

デプロイメントのプロビジョニング
--------------------------------

これで、新しい展開を実行するコンテナまたは仮想マシンを作成する準備が整いました。これを行うには、
``provision`` コマンドを使用します。

::

   tpaexec provision demo

構成を展開する準備をするために必要なさまざまな操作を介したTPAの動作が表示されます。

Deploying
---------

コンテナがプロビジョニングされたら、展開に進むことができます。展開すると、必要に応じて、オペレーティングシステムとシステムパッケージがインストールされます。次に、要求されたPostgresアーキテクチャをインストールし、必要な構成をすべて実行します。

::

   tpaexec deploy demo

構成を展開するために必要なさまざまな操作を介したTPAの動作が表示されます。

テスト
------

tpaexec ``test``
コマンドを使用して、新しく展開された構成をすばやくテストできます。このコマンドは、新しいデータベースでpgbenchを実行します。

::

   tpaexec test demo

接続しています
--------------

psqlプロンプトを表示するための最も簡単なルートは、DockerまたはSSHを使用してコンテナまたは構成に応じてVMまたはホストのいずれかにログインすることです。展開内のすべての接続可能なホストにpingを実行するには、次のコマンドを実行します。

::

   tpaexec ping demo

出力は次のようなものです。

::

   $ tpaexec ping demo 
   unfair | SUCCESS => {
       "changed": false,
       "ping": "pong"
   }
   uptake | SUCCESS => {
       "changed": false,
       "ping": "pong"
   }
   quondam | SUCCESS => {
       "changed": false,
       "ping": "pong"
   }
   uptight | SUCCESS => {
       "changed": false,
       "ping": "pong"
   }

``SUCCESS`` で応答したノードの1つを選択します。このチュートリアルでは、
``uptake`` を使用します。

Dockerのみを使用する予定がある場合は、
``docker exec -it uptake /bin/bash``
コマンドを使用して、適切なホスト名に置き換えます。

すべての種類のTPA展開で動作するもう1つのオプションは、SSHを使用することです。これを行うには、最初に現在のディレクトリを作成した構成ディレクトリに変更します。

たとえば、チュートリアル構成の名前は\ ``demo``
です。そのディレクトリに移動し、\ ``ssh -F ssh_config ourhostname``
を実行して接続します。

::

   cd demo
   ssh -F ssh_config uptake
   Last login: Wed Sep  6 10:08:01 2023 from 172.17.0.1
   [root@uptake ~]# 

どちらの場合も、コンテナにrootユーザーとしてログインします。

``sudo -iu postgres``
を使用して、ユーザーをpostgresユーザーに変更できるようになりました。
postgresとして、psqlを実行できます。 TPAは\ ``.pgpass``
ファイルでそのユーザーを既に構成しているため、パスワードを入力する必要はありません。

::

   [root@uptake ~]# 
   postgres@uptake:~ $ psql
   psql (15.4)
   Type "help" for help.

   postgres=# 

データベースに接続しました。

SSHを使用してコンテナに入ることなく、ホストシステムから接続できます。
``ssh_config`` ファイルから接続するホストのIPアドレスを取得します。

::

   $ grep "^ *Host" demo/ssh_config 
   Host *
   Host uptight
       HostName 172.17.0.9
   Host unfair
       HostName 172.17.0.4
   Host quondam
       HostName 172.17.0.10
   Host uptake
       HostName 172.17.0.11

``uptake`` に接続するため、IPアドレスは172.17.0.11です。

postgresユーザーのパスワードを取得する必要もあります。
``tpaexec show-password demo postgres``
を実行して、システムから保存されたパスワードを取得します。

::

   tpaexec show-password demo postgres
   a9LmI1X^uMOpPoEnLuRdL%L$oRQak3om

Postgresqlクライアントがインストールされていると仮定すると、次のことを実行できます。

::

   psql --host 172.17.0.11 -U postgres
   Password for user postgres: 

前に取得したパスワードを入力します。

::

   psql (14.9 (Ubuntu 14.9-0ubuntu0.22.04.1), server 15.4)
   WARNING: psql major version 14, server major version 15.
            Some psql features might not work.
   SSL connection (protocol: TLSv1.3, cipher: TLS_AES_256_GCM_SHA384, bits: 256, compression: off)
   Type "help" for help.

   postgres=# 

これで、Dockerホストから、TPA展開されたDockerコンテナのいずれかで実行されているPostgresに接続されました。
