When running Greenplum Database on a mirrorless cluster (for example, PowerFlex), the documentation recommends setting the following WAL-related GUCs:
Reference: Greenplum HA Service Installation Guide
max_replication_slots=0
wal_keep_segments=0
wal_level=minimal
max_wal_senders=0
However, when expanding the cluster using gpexpand, the first phase of the expansion may fail with the following error.
$ gpexpand -i expand_conf.txt
...
20251216:14:55:20:032583 gpexpand:gpdb12:gpadmin-[INFO]:-Creating segment template
20251216:14:55:21:032583 gpexpand:gpdb12:gpadmin-[ERROR]:-gpexpand failed: ExecutionError: 'non-zero rc: 1' occurred. Details: 'pg_basebackup -c fast -D /data/master/master_6.31.1/gpexpand_12162025_32583 -h gpdb12 -p 5432 --xlog -E ./db_dumps -E ./gpperfmon/data -E ./gpperfmon/logs -E ./promote -E ./db_analyze --target-gp-dbid 73785 --progress --verbose' cmd had rc=1 completed=True halted=False
stdout=''
stderr='pg_basebackup: could not connect to server: FATAL: number of requested standby connections exceeds max_wal_senders (currently 0)
'
Exiting...
20251216:14:55:21:032583 gpexpand:gpdb12:gpadmin-[ERROR]:-Please run 'gpexpand -r' to rollback to the original state.
20251216:14:55:21:032583 gpexpand:gpdb12:gpadmin-[INFO]:-Shutting down gpexpand...
The error is generated by pg_basebackup.
During the gpexpand process, pg_basebackup is used to create a template directory for new segments.
The pg_basebackup command includes the --xlog parameter because WAL files must be shipped during the master data directory copy.
As documented in the PostgreSQL manual for pg_basebackup, max_wal_senders must be configured to a value high enough to allow at least one WAL sender connection for the backup operation.
When max_wal_senders is set to 0, pg_basebackup fails, causing the first phase of gpexpand to abort.
To allow gpexpand to complete successfully, perform the following steps.
# gpexpand -r
Reset all GUCs that were recommended in the HA service document.
All parameters must be reset together, otherwise the database may fail to restart (for example, wal_level cannot be minimal while max_wal_senders > 0).
gpconfig -r max_replication_slots --skipvalidation
gpconfig -r wal_keep_segments --skipvalidation
gpconfig -r wal_level --skipvalidation
gpconfig -r max_wal_senders --skipvalidation
gpstop -M fast
gpstart
# gpexpand -i expand_conf.txt
After confirming that the first phase of gpexpand completes successfully, set the GUCs back to the recommended values and restart the database to apply them.
gpconfig -c max_replication_slots -v 0 --skipvalidation
gpconfig -c wal_keep_segments -v 0 --skipvalidation
gpconfig -c wal_level -v minimal --skipvalidation
gpconfig -c max_wal_senders -v 0 --skipvalidation
gpstop -M fast
gpstart
Continue with the remaining expansion and redistribution steps as documented in: Greenplum Database Expansion and Redistribution Guide
The product team plans to address this behavior in future releases, including the following improvements:
Item 1: gpexpand logic enhancement
The design of gpexpand will be improved. In future releases, gpexpand will first validate the relevant GUC settings. If a GUC is set to 0 (indicating a mirrorless cluster), gpexpand will fail at the very beginning with clear error messages, guidance, and recommended actions.
Item 2: Documentation update
The documentation team will update the gpexpand and HA service guides to explicitly describe the required workaround when running gpexpand on mirrorless clusters.