I am trying to setup HA solution for PostgreSQL. For that, I am running pgpool service.
In that service, it calls a script whenever my primary node fails by calling it like this:
/etc/pgpool-II-94/failover.sh %d %H'
where %d is my node id and %H is the hostname for the new server. Think of them simply as two parameters.
My Failover script is below:
#!/bin/sh
failed_node=$1
new_master=$2
(
date
echo "Failed node: $failed_node"
set -x
/usr/bin/ssh -T -l postgres $new_master "/usr/pgsql-9.4/bin/repmgr -f /var/lib/pgsql/repmgr/repmgr.conf standby promote 2>/dev/null 1>/dev/null <&-"
exit 0;
) 2>&1 | tee -a /tmp/pgpool_failover.log
The problem I am facing here is that when this script gets executed, it gets executed as root and hence I cannot authenticate it for postgres user for other server.
How to run my pgpool service as postgres user itself so that my authentication get passed?
Right now I am using:
systemctl start pgpool-II-94
from postgres to postgres in all the servers I have setup passwordless ssh so that would not be an issue.
For example: when I run through postgres user
-bash-4.2$ /usr/bin/ssh -T -l postgres lbdevsecondary 'echo $HOSTNAME'
lbdevsecondary
But when I run through root user, it asks for password
/usr/bin/ssh -T -l postgres lbdevsecondary 'echo $HOSTNAME'
postgres@lbdevsecondary's password:
lbdevsecondary
Or please tell me a way to rewrite the above statement in the way that I first logged in as postgres user and then run the commands from my scripts.
I am using CentOS 7 and fairly new to Linux.
Thanks,
Vivek