Creating Raft subgroups using TPA

TPAexec configure コマンドは、 --enable_proxy_routing local オプションが設定されている場合、Raftサブグループを有効にします。 TPAは、 ロケーション という用語を使用して、物理/リージョンドメインにマッピングされるサブグループの一般的なユースケースを反映しています。構成が生成されると、指定されたロケーション名は、ロケーション名に基づいて、生成されたグループ名の下に保存されます。

TPAを使用してRaftサブグループを作成する

この例では、各場所に3つのデータノードを持つ2ロケーションクラスターを作成します。各場所のノードは、その場所のPGD Raftサブグループの一部です。

最上位グループの名前はpgdgroup です。

トップレベルグループには、 us_east とus_west の2つの場所があります。これらの場所は、2つのサブグループus_east_subgroup およびus_west_subgroup にマップされます。

各ロケーションには4つのノードがあります。3つのデータノードと1つのbarman backupノードです。 3つのデータノードは、PGDプロキシも共同ホストします。構成は次のように視覚化できます。

6 Node Cluster with 2 Raft Subgroups

6 Node Cluster with 2 Raft Subgroups

barmanノードはサブグループに参加せず、ひいてはRaftグループにも参加しません。したがって、それらは表示されません。この図は、West Raftグループがwest_1を書き込みリーダーとして、west_2を自分のRaftリーダーとして選択したクラスターの潜在的な状態のスナップショットです。東では、 east_1は書き込みリーダーであり、east_3はRaftリーダーです。クラスター全体は、トップレベルのRaftグループ内に含まれます。そこでは、west_3が現在Raftリーダーです。

この構成を作成するには、次を実行します。

tpaexec configure pgdgroup --architecture PGD-Always-ON --location-names us_east us_west --data-nodes-per-location 3 --epas 15 --no-redwood --enable_proxy_routing local --hostnames-from hostnames.txt

hostnames.txt には以下が含まれます。

east1
east2
east3
eastbarman
west1
west2
west3
westbarman

構成ファイル

生成されたconfig.yml ファイルには、トップレベルグループpgdgroup と2つのサブグループus_east_subgroup およびus_west_subgroup を含むbdr_node_groups セクションがあります。これらの各サブグループには、ロケーションセット(us_east およびus_west )とtrueに設定されている他の2つのオプションがあります。

  • enable_raft 、サブグループ内のサブグループRaftをアクティブにします

  • enable_proxy_routing 、pgd_proxyルーターがトラフィックをサブグループの書き込みリーダーにルーティングできるようにします

サンプルのtpaexecコマンドによって生成された例を次に示します。

cluster_vars:
  apt_repository_list: []
  bdr_database: bdrdb
  bdr_node_group: pgdgroup
  bdr_node_groups:
  - name: pgdgroup
  - name: us_east_subgroup
    options:
      enable_proxy_routing: true
      enable_raft: true
      location: us_east
    parent_group_name: pgdgroup
  - name: us_west_subgroup
    options:
      enable_proxy_routing: true
      enable_raft: true
      location: us_west
    parent_group_name: pgdgroup
  bdr_version: 5

すべてのノードインスタンスには、インスタンスリストにエントリがあります。そのエントリでは、 bdr_child_group が変数セクションに表示され、ノードが属するサブグループに設定されます。サンプルのtpaexecコマンドによって生成された例を次に示します。

instances:

- Name: east1
  backup: eastbarman
  location: us_east
  node: 1
  role:
  - bdr
  - pgd-proxy
  vars:
    bdr_child_group: us_east_subgroup
    bdr_node_options:
      route_priority: 100

- Name: east2
  location: us_east
  node: 2
  role:
  - bdr
  - pgd-proxy
  vars:
    bdr_child_group: us_east_subgroup
    bdr_node_options:
      route_priority: 100

- Name: east3
  location: us_east
  node: 3
  role:
  - bdr
  - pgd-proxy
  vars:
    bdr_child_group: us_east_subgroup
    bdr_node_options:
      route_priority: 100

- Name: eastbarman
  location: us_east
  node: 4
  role:
  - barman

bdr_child_group 設定がないこの場所の1つのノードは、Raft意思決定プロセスに参加しないため、barmanノードです。