我正在尝试为 PostgreSQL 设置 HA 解决方案。为此,我正在运行 pgpool 服务。
在该服务中,每当我的主节点发生故障时,它都会通过如下方式调用脚本:
/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.
我的故障转移脚本如下:
#!/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
我在这里面临的问题是,当执行此脚本时,它会以 root 身份执行,因此我无法为其他服务器的 postgres 用户验证它。
如何以 postgres 用户本身身份运行我的 pgpool 服务以便我的身份验证通过?
现在我正在使用:
systemctl start pgpool-II-94
从 postgres 到 postgres 在所有服务器中我都设置了无密码 ssh,所以这不会成为问题。
例如:当我运行 postgres 用户时
-bash-4.2$ /usr/bin/ssh -T -l postgres lbdevsecondary 'echo $HOSTNAME'
lbdevsecondary
但是当我通过root用户运行时,它要求输入密码
/usr/bin/ssh -T -l postgres lbdevsecondary 'echo $HOSTNAME'
postgres@lbdevsecondary's password:
lbdevsecondary
或者请告诉我一种重写上述语句的方法,即我首先以 postgres 用户身份登录,然后从脚本中运行命令。
我使用的是 CentOS 7,对 Linux 还很陌生。