Step 5 - Creating the PGD cluster
=================================

PGDクラスターの作成
-------------------

-  **各ノードの接続文字列を作成します**
   。ノードごとに、PGDがレプリケーションを実行できる接続文字列を作成します。

接続文字列は、\ ``host=``
とホストのIPアドレスで始まるキー/値の文字列です。解決可能な名前付けホストがある場合、IPアドレスの代わりにホストの名前が使用されます。

その後にデータベースの名前が続きます。この場合、 ``dbname=bdrdb``
を使用します。 :ref:`installing the software <Step 4 - Installing the PGD software>` のときに\ ``bdrdb``
データベースが作成されたためです。

また、サーバーのポート番号をEDB Postgres Advanced
Serverの場合は\ ``port=5444`` として、 EDB Postgres
ExtendedおよびコミュニティPostgreSQLの場合は\ ``port=5432``
として接続文字列に追加することをお勧めします。

-  **最初のノードを準備します。**
   クラスターを作成するには、ホストのPostgresサーバーで\ ``bdrdb``
   データベースを選択してログインします。

-  **最初のノードを作成します。** ``bdr.create_node``
   を実行し、ノードに名前とその接続文字列を指定します。 *他の*
   ノードが接続できる場所。

-  最上位グループを作成します。 ``bdr.create_node_group``
   を使用してクラスターのトップレベルグループを作成し、それに単一のパラメーターを指定します。トップレベルグループの名前。

-  サブグループを作成します。 ``bdr.create_node_group``
   を使用してトップレベルグループの子としてサブグループを作成し、それに2つのパラメーターを指定します。サブグループの名前と親およびトップレベルグループの名前。

このプロセスは、最初のノードを初期化します。

-  **2番目のノードを追加します。**

-  2番目のノードを作成します。別の初期化されたノードの\ ``bdrdb``
   データベースにログインします。 ``bdr.create_node``
   を実行し、ノードに別の名前とその接続文字列を指定します。ここで、
   *他の* ノードはそれに接続できます。

-  2番目のノードをクラスターに参加させます。次に、
   ``bdr.join_node_group``
   を実行し、最初のノードの接続文字列とノードに参加するサブグループの名前の2つのパラメーターを渡します。

-  **3番目のノードを追加します。**

-  3番目のノードを作成します。別の初期化されたノードの\ ``bdrdb``
   データベースにログインします。 ``bdr.create_node``
   を実行し、ノードに別の名前とその接続文字列を指定します。ここで、
   *他の* ノードはそれに接続できます。

-  3番目のノードをクラスターに参加させます。次に、
   ``bdr.join_node_group``
   を実行し、最初のノードの接続文字列とノードに参加するサブグループの名前の2つのパラメーターを渡します。

実際の例
--------

これまでのところ、この例には次のものが含まれています。

-  3つのホストを作成しました。

-  各ホストにPostgresサーバーをインストールしました。

-  各ホストにPostgres Distributedのインストール。

-  各ホストでPGDと連携するようにPostgresサーバーを構成しました。

クラスターを作成するには、host-oneのPostgresインスタンスに、それがPGDノード-node-one-であることを指示し、そのノードにPGDグループを作成します。次に、host-2とhost-threeのPostgresインスタンスに、それらがPGDノード-ノード2およびノード-3-であり、ノード1のグループに参加する必要があることを指示します。

各ノードの接続文字列を作成する
^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^

事前に各ノードの接続文字列を計算しておきます。次に、この3ノードの例の接続文字列を示します。

.. csv-table::
  :header: Name,Node name,Private IP,Connection string
  :widths: 15,12,12,20
  :align: left
  :class: longtable

  host-one,node-one,192.168.254.166,host=host-one dbname=bdrdb port=5444
  host-two,node-two,192.168.254.247,host=host-two dbname=bdrdb port=5444
  host-three,node-three,192.167.254.135,host=host-three dbname=bdrdb port=5444

最初のノードの準備
^^^^^^^^^^^^^^^^^^

host-oneのPostgresサーバーにログインします。

::

   ssh admin@host-one
   sudo -iu enterprisedb psql bdrdb

最初のノードを作成する
^^^^^^^^^^^^^^^^^^^^^^

:ref:`bdr.create_node <bdr.create_node>` ファンクションを呼び出してノードを作成し、ノード名と他のノードが接続するために使用できる接続文字列を渡します。

::

   select bdr.create_node(node-one,host=host-one dbname=bdrdb port=5444);

最上位グループを作成する
^^^^^^^^^^^^^^^^^^^^^^^^

:ref:`bdr.create_node_group <bdr.create_node_group>` ファンクションを呼び出して、PGDクラスターのトップレベルグループを作成します。単一の文字列パラメーターを渡すと、その名前でトップレベルのグループが作成されます。この例では、
``pgd`` という名前のトップレベルグループを作成します。

::

   select bdr.create_node_group(pgd);

サブグループを作成する
^^^^^^^^^^^^^^^^^^^^^^

サブグループを使用してノードを編成することは、後で構成するPGDプロキシのようなサービスが操作を調整できるため、をお勧めします。大規模なPGDインストールでは、複数のサブグループが存在する場合があります。これらのサブグループは、クラスターの地理的マッピングとローカライズされた復元力を有効にする組織グループを提供します。そのため、この例では、最初のノードのサブグループを作成して、より簡単な拡張とPGDプロキシの使用を有効にします。

:ref:`bdr.create_node_group <bdr.create_node_group>` ファンクションを再度呼び出して、トップレベルグループのサブグループを作成します。サブグループ名は最初のパラメーターであり、親グループは2番目のパラメーターです。この例では、サブグループ\ ``dc1``
を\ ``pgd`` の子として作成します。

::

   select bdr.create_node_group(dc1,pgd);

2番目のノードの追加
^^^^^^^^^^^^^^^^^^^

host-twoのPostgresサーバーにログインします

::

   ssh admin@host-two
   sudo -iu enterprisedb psql bdrdb

2番目のノードを作成する
^^^^^^^^^^^^^^^^^^^^^^^

:ref:`bdr.create_node <bdr.create_node>` ファンクションを呼び出してこのノードを作成し、ノード名と他のノードが接続するために使用できる接続文字列を渡します。

::

   select bdr.create_node(node-two,host=host-two dbname=bdrdb port=5444);

2番目のノードをクラスターに参加させます
^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^

:ref:`bdr.join_node_group <bdr.join_node_group>` を使用して、ノード2にノード1の\ ``dc1``
グループに参加するように依頼できます。このファンクションは、最初のパラメーターとして既にグループ内にあるノードの接続文字列を取得し、2番目のパラメーターとしてグループ名を取得します。

::

   select bdr.join_node_group(host=host-one dbname=bdrdb port=5444,dc1);

3番目のノードを追加します
^^^^^^^^^^^^^^^^^^^^^^^^^

host-threeのPostgresサーバーにログインします。

::

   ssh admin@host-three
   sudo -iu enterprisedb psql bdrdb

.. _番目のノードを作成する-1:

3番目のノードを作成する
^^^^^^^^^^^^^^^^^^^^^^^

:ref:`bdr.create_node <bdr.create_node>` ファンクションを呼び出してこのノードを作成し、ノード名と他のノードが接続するために使用できる接続文字列を渡します。

::

   select bdr.create_node(node-three,host=host-three dbname=bdrdb port=5444);

.. _番目のノードをクラスターに参加させます-1:

3番目のノードをクラスターに参加させます
^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^

:ref:`bdr.join_node_group <bdr.join_node_group>` を使用して、ノード3にノード1の\ ``dc1``
グループに参加するように依頼できます。このファンクションは、最初のパラメーターとして既にグループ内にあるノードの接続文字列を取得し、2番目のパラメーターとしてグループ名を取得します。

::

   select bdr.join_node_group(host=host-one dbname=bdrdb port=5444,dc1);

PGDクラスターが作成されました。
