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ユーザーに対して認証できないことです。
認証が通過するように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
しかし、rootユーザーを介して実行すると、パスワードを求められます。
/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]