웹사이트 검색

CentOS 8에서 PostgreSQL 12 스트리밍 복제를 구성하는 방법


PostgreSQL 데이터베이스는 고가용성, 확장성, 내결함성 애플리케이션을 구축하기 위한 여러 복제 솔루션을 지원하며 그 중 하나는 Write-Ahead Log(WAL)입니다. ) 배송. 이 솔루션을 사용하면 파일 기반 로그 전달이나 스트리밍 복제를 사용하거나 가능한 경우 두 접근 방식을 조합하여 대기 서버를 구현할 수 있습니다.

스트리밍 복제를 사용하면 대기(복제 슬레이브) 데이터베이스 서버가 마스터/기본 서버에 연결되도록 구성됩니다. 이 서버는 WAL 레코드가 생성될 때 WAL을 기다리지 않고 대기 데이터베이스에 스트리밍합니다. 파일을 채워야 합니다.

기본적으로 스트리밍 복제는 기본 서버에서 트랜잭션이 커밋된 후 대기 서버에 데이터가 기록되는 비동기식입니다. 이는 마스터 서버에서 트랜잭션을 커밋하고 대기 서버에 변경 사항이 표시되는 사이에 약간의 지연이 있음을 의미합니다. 이 접근 방식의 한 가지 단점은 마스터 서버가 충돌하는 경우 커밋되지 않은 트랜잭션이 복제되지 않을 수 있으며 이로 인해 데이터가 손실될 수 있다는 것입니다.

이 가이드에서는 CentOS 8에서 Postgresql 12 마스터-대기 스트리밍 복제를 설정하는 방법을 보여줍니다. 대기 서버가 이전 WAL 세그먼트를 수신하기 전에 마스터 서버가 오래된 WAL 세그먼트를 재활용하는 것을 방지하기 위한 솔루션으로 대기 서버에 "복제 슬롯"을 사용할 것입니다.

다른 방법과 비교하여 복제 슬롯은 필요한 것으로 알려진 세그먼트 수만 유지합니다.

테스트 환경:

이 가이드에서는 SSH를 통해 루트로 마스터 및 대기 데이터베이스 서버에 연결했다고 가정합니다(관리 권한이 있는 일반 사용자로 연결한 경우 필요한 경우 Sudo 명령 사용).

Postgresql master database server: 		10.20.20.9
Postgresql standby database server:		10.20.20.8

두 데이터베이스 서버 모두 Postgresql 12가 설치되어 있어야 합니다. 그렇지 않은 경우 CentOS 8에서 PostgreSQL 및 pgAdmin을 설치하는 방법을 참조하세요.

참고: PostgreSQL 12에는 recovery.conf 교체와 같은 복제 구현 및 구성에 대한 주요 변경 사항이 포함되어 있습니다. recovery.conf 매개변수를 일반 PostgreSQL 구성 매개변수로 변환하여 클러스터 복제 구성을 훨씬 쉽게 만듭니다.

1단계: PostgreSQL 마스터/기본 데이터베이스 서버 구성

1. 마스터 서버에서 postgres 시스템 계정으로 전환하고 마스터 서버가 클라이언트의 연결을 수신할 IP 주소를 구성합니다.

이 경우에는 모두를 의미하는 *를 사용하겠습니다.

su - postgres
psql -c "ALTER SYSTEM SET listen_addresses TO '*';"

ALTER SYSTEM SET SQL 명령은 SQL 쿼리를 사용하여 서버의 구성 매개변수를 직접 변경할 수 있는 강력한 기능입니다. 구성은 데이터 폴더의 루트(예: /var/lib/pgsql/12/data/)에 있는 postgresql.conf.auto 파일에 저장되고 추가 내용을 읽습니다. postgresql.conf에 저장된 것들. 그러나 전자의 구성은 후자 및 기타 관련 파일의 구성보다 우선합니다.

2. 그런 다음 createuser 프로그램을 사용하여 대기 서버에서 마스터 서버로 연결하는 데 사용할 복제 역할을 만듭니다. 다음 명령에서 -P 플래그는 새 역할에 대한 암호를 묻는 메시지를 표시하고 -e는 createuser가 생성하여 데이터베이스 서버에 보내는 명령을 에코합니다.

su – postgres
createuser --replication -P -e replicator
exit

3. 그런 다음 데이터베이스 필드가 다음으로 설정된 /var/lib/pgsql/12/data/pg_hba.conf 클라이언트 인증 구성 파일 끝에 다음 항목을 입력합니다. 스크린샷과 같이 복제됩니다.

host    replication     replicator      10.20.20.8/24     md5

4. 이제 다음 systemctl 명령을 사용하여 Postgres12 서비스를 다시 시작하여 변경 사항을 적용합니다.

systemctl restart postgresql-12.service

5. 다음으로 firewalld 서비스가 실행 중인 경우 대기 서버에서 마스터로의 요청을 허용하도록 Firewalld 구성에 Postgresql 서비스를 추가해야 합니다.

firewall-cmd --add-service=postgresql --permanent
firewall-cmd --reload

2단계: 대기 서버 부트스트랩을 위한 기본 백업 만들기

6. 다음으로 대기 서버에서 마스터 서버의 기본 백업을 만들어야 합니다. 이는 대기 서버를 부트스트랩하는 데 도움이 됩니다. 대기 서버에서 postgresql 12 서비스를 중지하고 postgres 사용자 계정으로 전환하고 데이터 디렉터리(/var/lib/pgsql/12/data/)를 백업한 다음 그 아래의 모든 항목을 삭제해야 합니다. 표시된 대로 기본 백업을 수행하기 전에

systemctl stop postgresql-12.service
su - postgres
cp -R /var/lib/pgsql/12/data /var/lib/pgsql/12/data_orig
rm -rf /var/lib/pgsql/12/data/*

7. 그런 다음 pg_basebackup 도구를 사용하여 올바른 소유권(데이터베이스 시스템 사용자, 즉 Postgres)으로 기본 백업을 수행합니다. Postgres 사용자 계정) 및 올바른 권한이 있어야 합니다.

다음 명령에서 옵션은 다음과 같습니다.

  • -h – 마스터 서버인 호스트를 지정합니다.
  • -D – 데이터 디렉터리를 지정합니다.
  • -U – 연결 사용자를 지정합니다.
  • -P – 진행 상황 보고를 활성화합니다.
  • -v – 상세 모드를 활성화합니다.
  • -R – 복구 구성 생성을 활성화합니다. standby.signal 파일을 생성하고 데이터 아래의 postgresql.auto.conf에 연결 설정을 추가합니다. 예배 규칙서.
  • -X – 필수 미리 쓰기 로그 파일(WAL 파일)을 백업에 포함하는 데 사용됩니다. stream 값은 백업이 생성되는 동안 WAL을 스트리밍한다는 의미입니다.
  • -C – 백업을 시작하기 전에 -S 옵션으로 명명된 복제 슬롯 생성을 활성화합니다.
  • -S – 복제 슬롯 이름을 지정합니다.
pg_basebackup -h 10.20.20.9 -D /var/lib/pgsql/12/data -U replicator -P -v  -R -X stream -C -S pgstandby1
exit

8. 백업 프로세스가 완료되면 대기 서버의 새 데이터 디렉터리는 스크린샷과 같아야 합니다. standby.signal이 생성되고 연결 설정이 postgresql.auto.conf에 추가됩니다. ls 명령을 사용하여 내용을 나열할 수 있습니다.

ls -l /var/lib/pgsql/12/data/

postgresql.conf에서 hot_standby 매개변수가 on(기본값)으로 설정되고 복제 슬레이브는 "Hot Standby" 모드에서 실행됩니다. 데이터 디렉토리에 standby.signal 파일이 있습니다.

9. 이제 마스터 서버로 돌아가서 다음과 같이 pg_replication_slots 보기를 열면 pgstandby1이라는 복제 슬롯을 볼 수 있습니다.

su - postgres
psql -c "SELECT * FROM pg_replication_slots;"
exit

10. postgresql.auto.conf 파일에 추가된 연결 설정을 보려면 cat 명령을 사용하십시오.

cat /var/lib/pgsql/12/data/postgresql.auto.conf

11. 이제 다음과 같이 PostgreSQL 서비스를 시작하여 대기 서버에서 정상적인 데이터베이스 작업을 시작합니다.

systemctl start postgresql-12

3단계: PostgreSQL 스트리밍 복제 테스트

12. 마스터와 대기 사이에 성공적으로 연결이 설정되면 대기 서버에 스트리밍 상태의 WAL 수신 프로세스가 표시됩니다. 이를 확인할 수 있습니다. pg_stat_wal_receiver 뷰를 사용합니다.

psql -c "\x" -c "SELECT * FROM pg_stat_wal_receiver;"

스트리밍 상태와 sync_state가 비동기인 마스터/기본 서버의 해당 WAL 발신자 프로세스가 있으면 이 pg_stat_replication pg_stat_replication 보기를 확인할 수 있습니다.

psql -c "\x" -c "SELECT * FROM pg_stat_replication;"

위 스크린샷에서 스트리밍 복제는 비동기식입니다. 다음 섹션에서는 선택적으로 동기 복제를 활성화하는 방법을 보여줍니다.

13. 이제 마스터 서버에 테스트 데이터베이스를 생성하여 복제가 제대로 작동하는지 테스트하고, 대기 서버에도 해당 데이터베이스가 존재하는지 확인합니다.
[master]postgres=# 데이터베이스 생성 tecmint;
[대기]postgres=# \l

선택 사항: 동기식 복제 활성화

14. 동기식 복제는 기본 데이터베이스와 대기/복제본에 동시에 트랜잭션을 커밋(또는 데이터 쓰기)하는 기능을 제공합니다. 트랜잭션에 의한 모든 변경 사항이 하나 이상의 동기 대기 서버로 전송된 경우에만 트랜잭션이 성공했는지 확인합니다.

동기식 복제를 활성화하려면 synchronous_commit도 on으로 설정해야 하며(기본값이므로 변경할 필요가 없음) synchronous_standby_names 매개변수도 설정해야 합니다. 비어 있지 않은 값으로. 이 가이드에서는 모두로 설정하겠습니다.

psql -c "ALTER SYSTEM SET synchronous_standby_names TO  '*';"

15. 그런 다음 PostgreSQL 12 서비스를 다시 로드하여 새로운 변경 사항을 적용합니다.

systemctl reload postgresql-12.service

16. 이제 기본 서버에서 WAL 발신자 프로세스를 다시 한 번 쿼리하면 스트리밍 상태와 sync_state가 < Strong>동기화.

psql -c "\x" -c "SELECT * FROM pg_stat_replication;"

이제 이 가이드가 끝났습니다. CentOS 8에서 PostgreSQL 12 마스터-대기 데이터베이스 스트리밍 복제를 설정하는 방법을 보여주었습니다. 또한 PostgreSQL 데이터베이스 클러스터에서 동기 복제를 활성화하는 방법도 다루었습니다.

복제에는 다양한 용도가 있으며 언제든지 IT 환경 및/또는 애플리케이션별 요구 사항을 충족하는 솔루션을 선택할 수 있습니다. 자세한 내용은 PostgreSQL 12 설명서의 로그 전달 대기 서버를 참조하세요.