Creating Raft subgroups using TPA v5.8.1
The TPAexec configure command enables Raft subgroups if the --enable_proxy_routing local option is set. TPA uses the term locations to reflect the common use case of subgroups that map to physical/regional domains. When the configuration is generated, the location name given is stored under the generated group name, which is based on the location name.
Creating Raft subgroups using TPA
This example creates a two-location cluster with three data nodes in each location. The nodes in each location are part of a PGD Raft subgroup for the location.
The top-level group's name is pgdgroup.
The top-level group has two locations: us_east and us_west. These locations are mapped to two subgroups: us_east_subgroup and us_west_subgroup.
Each location has four nodes: three data nodes and a barman backup node. The three data nodes also cohost PGD Proxy. The configuration can be visualized like this:
The barman nodes don't participate in the subgroup and, by extension, the Raft group. They're therefore not shown. This diagram is a snapshot of a potential state of the cluster with the West Raft group having selected west_1 as write leader and west_2 as its own Raft leader. On the East, east_1 is write leader while east_3 is Raft leader. The entire cluster is contained within the top-level Raft group. There, west_3 is currently Raft leader.
To create this configuration, you run:
tpaexec configure pgdgroup --architecture PGD-Always-ON --location-names us_east us_west --data-nodes-per-location 3 --epas 16 --no-redwood --enable_proxy_routing local --hostnames-from hostnames.txt
Where hostnames.txt contains:
east1 east2 east3 eastbarman west1 west2 west3 westbarman
The configuration file
The generated config.yml file has a bdr_node_groups section that contains the top-level group pgdgroup and the two subgroups us_east_subgroup and us_west_subgroup. Each of those subgroups has a location set (us_east and us_west) and two other options that are set to true:
enable_raft, which activates the subgroup Raft in the subgroupenable_proxy_routing, which enables the pgd_proxy routers to route traffic to the subgroup’s write leader
Here's an example generated by the sample tpaexec command:
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'Every node instance has an entry in the instances list. In that entry, bdr_child_group appears in the variables section, set to the subgroup the node belongs to. Here's an example generated by the sample tpaexec command:
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:
- barmanThe one node in this location that doesn't have a bdr_child_group setting is the barman node because it doesn't participate in the Raft decision-making process.