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
여기서 직면한 문제는 이 스크립트가 실행될 때 루트로 실행되므로 다른 서버의 postgres 사용자에 대해 인증할 수 없다는 것입니다.
인증이 통과되도록 pgpool 서비스를 postgres 사용자 자체로 실행하려면 어떻게 해야 합니까?
지금은 다음을 사용하고 있습니다.
systemctl start pgpool-II-94
postgres에서 postgres까지 모든 서버에 비밀번호 없는 SSH가 설정되어 있으므로 이는 문제가 되지 않습니다.
예: postgres user를 실행할 때
-bash-4.2$ /usr/bin/ssh -T -l postgres lbdevsecondary 'echo $HOSTNAME'
lbdevsecondary
하지만 루트 사용자를 통해 실행하면 비밀번호를 묻습니다.
/usr/bin/ssh -T -l postgres lbdevsecondary 'echo $HOSTNAME'
postgres@lbdevsecondary's password:
lbdevsecondary
아니면 먼저 postgres 사용자로 로그인한 다음 스크립트에서 명령을 실행하는 위의 명령문을 다시 작성하는 방법을 알려주십시오.
저는 CentOS 7을 사용하고 있으며 Linux를 처음 사용합니다.
답변1
- 수
언제든지 스크립트에서 사용자를 변경할 수 있습니다.
su - postres
- SSH 복사 ID
원격 서버에 루트의 SSH 키를 추가합니다.
ssh-copy-id [email protected]