Postgresql-9.4 HA
환경을 설정 중인데 postgres db를 초기화하면 데이터 디렉터리가 생성되고 RHEL 7
데이터 디렉터리에 postgresql.conf
파일이 포함됩니다 pg_hba.conf
. 여기서는 마스터 복제 중에 구성 파일을 덮어썼기 때문에 데이터 디렉터리에 구성 파일을 생성하면 충돌이 발생할 것으로 예상했습니다.
postgres.conf
그래서 데이터 디렉토리에서 파일을 재배치 하고 재배치된 구성 파일을 사용해 보았습니다 . 구성 파일의 경로를 어디에서 업데이트합니까?pg_hba.conf
postgres service
고쳐 쓰다:/usr/lib/systemd/system/postgresql-9.4.service
재배치된 conf 파일을 가리키 도록 PGDATA를 업데이트했습니다 . 새 postgres.conf 파일에서 데이터 디렉터리와 hba_file 경로가 업데이트됩니다. 서비스를 다시 시작하려고 했는데 오류가 반환되었습니다.
Job for postgresql-9.4.service failed. See 'systemctl status postgresql-9.4.service' and 'journalctl -xn' for details.
답변1
최근에 같은 문제가 발생했습니다. 실제 질문은 포스트마스터에게 실제 구성 파일 위치를 어떻게 알릴 것인가입니다. 우리가 해야 할 일은 -c config_file <configuration/filename/location>
postgres 프로세스에 명령줄 옵션을 추가하는 것뿐입니다. 문제는 이 작업을 수행하는 방법입니다...?
오래 전, 머나먼 은하계에는 /etc/sysconfig 디렉토리에 있는 일부 파일에 명령줄 옵션을 구성할 수 있는 System V 초기화 스크립트가 있었습니다. 그러나 이제 우리는 강력하고 진보된 시스템을 갖추게 되었으며... 모든 작업 등을 수행하도록 기계를 구성하기가 어렵습니다. 따라서 구성 파일과 데이터 파일을 분리하는 유일한 방법은 postgresql systemd init 시스템을 구성하는 것입니다. 이 목표를 달성하는 방법은 무엇입니까? 이것이 내가 한 일입니다:
먼저 구성 파일 postgresql.conf, pg_hba.conf 및 pg_ident.conf를 외부 디렉터리로 이동합니다.
/var/lib/pgsql/config
postgresql.conf에서 위 파일의 새 위치를 구성했습니다.
hba_file = '/var/lib/pgsql/config/pg_hba.conf' ident_file = '/var/lib/pgsql/config/pg_ident.conf'
기존 (시스템) 구성을 덮어써서 systemd postgresql.service를 편집했습니다.
systemctl edit postgresql.service
그러면 새로운 빈 시스템 서비스 파일인 /etc/systemd/system/postgresql.service.d/override.conf가 생성되고 $EDITOR 편집기에서 열립니다.
나는 거기에 넣었다:
[Service] ExecStart= ExecStart=/usr/bin/pg_ctl start -D ${PGDATA} -s -o "-p ${PGPORT} -c config_file=/var/lib/pgsql/config/postgresql.conf" -w -t 300
보시다시피 -o 매개변수에 "-c config_file /var/lib/pgsql/config/postgresql.conf" 문자열을 추가했습니다. 또 다른 흥미로운 점은 null: "ExecStart" 지시어입니다. "재정의"라고 불리지만 먼저 이 지시문을 0으로 설정해야 합니다. 그렇지 않으면 "postgresql.service에 여러 ExecStart= 설정이 있습니다..."라는 오류가 발생합니다.
서비스를 다시 시작합니다.
systemctl restart postgresql
저는 Postgresql을 매우 좋아합니다. Postgresql의 데이터 파일은 $PGDATA에 있고 구성 파일은 다른 곳에 있습니다.
/usr/bin/postgres -D /var/lib/pgsql/data -p 5432 -c config_file=/var/lib/pgsql/config/postgresql.conf
CentOS 7 및 RHEL7에서 이 작업을 수행했지만 모든 시스템 기반 OS에서 작동하고 싶습니다.
이 이야기가 누군가에게 도움이 되기를 바랍니다.
인사.
답변2
찾았어요이 페이지공식 Postgresql 웹사이트에서 자세한 지침을 확인하세요.
데이터 디렉터리가 아닌 다른 위치에 구성 파일을 보관하려면 postgres -D 명령줄 옵션 또는 PGDATA 환경 변수가 구성 파일이 포함된 디렉터리를 가리켜야 하며 data_directory 매개변수는 postgresql.conf에서 설정되어야 합니다. (또는 명령줄에서) 데이터 디렉터리의 실제 위치를 표시합니다. data_directory는 데이터 디렉터리 위치에 대해 -D 및 PGDATA를 재정의하지만 구성 파일의 위치는 재정의하지 않습니다.
원하는 경우 config_file, hba_file 및/또는 ident_file 매개변수를 사용하여 구성 파일 이름과 위치를 개별적으로 지정할 수 있습니다. config_file은 postgres 명령줄에서만 지정할 수 있지만 다른 항목은 기본 구성 파일에서 설정할 수 있습니다. 세 매개변수와 data_directory가 모두 명시적으로 설정된 경우 -D 또는 PGDATA를 지정할 필요가 없습니다.
이러한 매개 변수 중 하나가 설정되면 상대 경로는 postgres가 시작되는 디렉터리를 기준으로 해석됩니다.
echo $PGDATA
호스트 시스템의 출력은 무엇입니까?