如何通过 postgres(任何特定)用户运行 pgpool(或任何服务)

如何通过 postgres(任何特定)用户运行 pgpool(或任何服务)

我正在尝试为 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 还很陌生。

答案1

您可以随时更改脚本中的用户:

su - postres
  1. SSH 复制 ID

将 root 的 ssh 密钥添加到远程服务器:

ssh-copy-id [email protected]

相关内容