
복구 후 의 이전 기본 강등을 pg_rewind
통해 대기 모드로 실행하려고 할 때 이 오류 알림을 발견했습니다 . repmgr
(이전 대기 @192.168.1.2가 이미 실행되었습니다 repmgr standby promote
)
postgres
version=15.4 repmgr
version=5.4dev 및 해당 프로세스를 실행하는 명령과 다음 피드백은 다음과 같습니다.
repmgr node rejoin --force-rewind -d 'host=192.168.1.2 port=5432 user=rep dbname=repmgr connect_timeout=5'
NOTICE: rejoin target is node "yzx2" (ID: 2)
NOTICE: pg_rewind execution required for this node to attach to rejoin target node 2
DETAIL: rejoin target server's timeline 2 forked off current database system timeline 1 before current recovery point 0/81C6D80
NOTICE: executing pg_rewind
DETAIL: pg_rewind command is "/usr/pgsql-15/bin/pg_rewind -D '/pgdata' --source-server='host=192.168.1.2 port=5432 user=rep dbname=repmgr connect_timeout=5'"
ERROR: pg_rewind execution failed
DETAIL: pg_rewind: error: could not fetch remote file "global/pg_control": ERROR: permission denied for function pg_read_binary_file
실제로 나는 사용자 담당자에게 pg_read_binary_file의 실행 권한을 부여하는 함수를 가지고 있으며 다음은 이 역할에 대한 설정입니다.
CREATE EXTENSION repmgr;
GRANT pg_checkpoint TO rep;
GRANT pg_read_all_stats TO rep;
GRANT EXECUTE ON function pg_catalog.pg_ls_dir(text, boolean, boolean) TO rep;
GRANT EXECUTE ON function pg_catalog.pg_stat_file(text, boolean) TO rep;
GRANT EXECUTE ON function pg_catalog.pg_read_binary_file(text) TO rep;
GRANT EXECUTE ON function pg_catalog.pg_read_binary_file(text, bigint, bigint, boolean) TO rep;
를 사용하여 다시 권한을 다시 부여했지만 GRANT EXECUTE ON function pg_read_binary_file(text) TO rep;
아무런 차이가 없었습니다. 사용자에게 rep
해당 기능을 실행할 권한이 없다는 것이 아니라 해당 기능에 fetch remote file "global/pg_control"
? 그런데 보안상의 이유로 다른 서버의 postgres Linux 계정에 액세스할 수 있는 ssh 권한을 부여하지 않았습니다.