Hello,
I've given a try once again.
Two variants used in my script (launched by crm_mon):
1. /usr/pgsql-9.5/bin/pg_basebackup -U pgreplic -h db-other-site -w -D /opt/geo_stdby_data -c fast -vvv -X stream &>> /tmp/log
2. strace -o /tmp/pg_basebackup.log /usr/pgsql-9.5/bin/pg_basebackup -U pgreplic -h db-other-site -w -D /opt/geo_stdby_data -c fast -vvv -X stream &>> /tmp/log
Result:
variant 2. works fine with return code 0 (with strace)
variant 1. fails with error code 1 (without strace)
Any ideas?
Andrej
----------------------details
Output:
Variant 2:
DEBUG: CommitTransaction
DEBUG: name: unnamed; blockState: STARTED; state: INPROGR, xid/subid/cid: 0/1/0, nestlvl: 1, children:
DEBUG: received replication command: IDENTIFY_SYSTEM
DEBUG: received replication command: BASE_BACKUP LABEL 'pg_basebackup base backup' FAST NOWAIT
-- Mon May 23 17:54:31 CEST 2016 [l1abrnch->l1abrnch:3122/27282:GEO] --INFO-- l1abrnch->l1abrnch (GEO-STDBY-DB / stop: 0): target/returned 0/0 (OK)
transaction log start point: 0/FA000028 on timeline 1
pg_basebackup: starting background WAL receiver
DEBUG: CommitTransaction
DEBUG: name: unnamed; blockState: STARTED; state: INPROGR, xid/subid/cid: 0/1/0, nestlvl: 1, children:
DEBUG: received replication command: IDENTIFY_SYSTEM
DEBUG: received replication command: START_REPLICATION 0/FA000000 TIMELINE 1
WARNING: skipping special file "./pg_hba.conf"
DEBUG: standby "pg_basebackup" has now caught up with primary
DEBUG: write 0/FA000000 flush 0/0 apply 0/0
DEBUG: removing transaction log backup history file "0000000100000000000000F8.00000028.backup"
transaction log end point: 0/FA0000F8
pg_basebackup: waiting for background process to finish streaming ...
pg_basebackup: base backup completed
RETVAL=0
Output
Variant 1:
DEBUG: CommitTransaction
DEBUG: name: unnamed; blockState: STARTED; state: INPROGR, xid/subid/cid: 0/1/0, nestlvl: 1, children:
DEBUG: received replication command: IDENTIFY_SYSTEM
DEBUG: received replication command: BASE_BACKUP LABEL 'pg_basebackup base backup' FAST NOWAIT
-- Mon May 23 17:55:32 CEST 2016 [l1abrnch->l1abrnch:3122/28785:GEO] --INFO-- l1abrnch->l1abrnch (GEO-STDBY-DB / stop: 0): target/returned 0/0 (OK)
transaction log start point: 0/FC000028 on timeline 1
pg_basebackup: starting background WAL receiver
DEBUG: CommitTransaction
DEBUG: name: unnamed; blockState: STARTED; state: INPROGR, xid/subid/cid: 0/1/0, nestlvl: 1, children:
DEBUG: received replication command: IDENTIFY_SYSTEM
DEBUG: received replication command: START_REPLICATION 0/FC000000 TIMELINE 1
WARNING: skipping special file "./pg_hba.conf"
DEBUG: standby "pg_basebackup" has now caught up with primary
DEBUG: write 0/FC000000 flush 0/0 apply 0/0
DEBUG: removing transaction log backup history file "0000000100000000000000FA.00000028.backup"
transaction log end point: 0/FC0000F8
pg_basebackup: waiting for background process to finish streaming ...
pg_basebackup: could not wait for child process: No child processes
RETVAL=1
2016-04-18 16:12 GMT+02:00 Adrian Klaver <adrian.klaver@xxxxxxxxxxx>:
On 04/17/2016 12:13 PM, Andrej Vanek wrote:
Hello Adrian,
I tried to use -U without "su"- launched directly by root: same behaviour.
Finally I reverted my script to use standard backup (pg_start_backup;
rsync; pg_stop_backup)- this works- the only downside is possible
collisions with on-line backup/synchronizaiton of other two nodes on
master node...
Back to the pg_basebackup issue: it is clear to me that this is an issue
of environment which launched pg_basebackup.
Possibly either some privileges or some kernel parameters/limits. Who
knows?
Summary: clusterlab's crm_mon launched a shell script starting
pg_basebackup which fails to do some its work (pg_basebackup: could not
wait for child process: No child processes)- probably due to some
failing system call.
How can I report to clusterlabs: What system call fails in pg_basebackup?
All I can to do is point you at:
https://wiki.postgresql.org/wiki/Getting_a_stack_trace_of_a_running_PostgreSQL_backend_on_Linux/BSD
Best Regards, Andrej
2016-04-17 1:09 GMT+02:00 Adrian Klaver <adrian.klaver@xxxxxxxxxxx
<mailto:adrian.klaver@xxxxxxxxxxx>>:
Is the su - even necessary?
pg_basebackup is a Postgres client program you can specify the user
you want it to connect to using -U.
Or do you need the script to run as postgres in order to get
permissions on wherever you are creating the backup directory?
have to find out why pg_basebackup cannot fork when launched
from crm_mon.
I assume crm_mon is this:
http://linux.die.net/man/8/crm_mon
from Pacemaker.
I do not use Pacemaker, but I am pretty sure that running what is a
monitoring program in daemon mode and then shelling out to another
program is not workable. The docs seem to bear this out:
http://clusterlabs.org/wiki/PgSQL_Replicated_Cluster#Installation
https://github.com/smbambling/pgsql_ha_cluster/wiki/Building-A-Highly-Available-Multi-Node-PostgreSQL-Cluster
--
Adrian Klaver
adrian.klaver@xxxxxxxxxxx