복제 프로세스 모니터링 및 튜닝
RDS for PostgreSQL DB 인스턴스와 읽기 전용 복제본을 정기적으로 모니터링하는 것이 좋습니다. 읽기 전용 복제본이 소스 DB 인스턴스의 변경 사항을 따르도록 해야 합니다. Amazon RDS는 복제 프로세스가 중단될 때 읽기 전용 복제본을 명료하게 복구합니다. 그러나 복구할 필요가 아예 없도록 하는 것이 가장 좋습니다. 복제 슬롯을 사용하여 복구하는 것이 Amazon S3 아카이브를 사용하는 것보다 빠르지만, 복구 프로세스는 읽기 성능에 영향을 줄 수 있습니다.
다음을 수행하여 읽기 전용 복제본이 소스 DB 인스턴스를 얼마나 잘 따라잡는지 확인할 수 있습니다.
-
소스 DB 인스턴스와 복제본 간
ReplicaLag의 양을 확인합니다 복제본 지연은 읽기 전용 복제본이 소스 DB 인스턴스보다 지연되는 시간(초)입니다. 이 지표는 다음 쿼리 결과를 보고합니다.SELECT extract(epoch from now() - pg_last_xact_replay_timestamp()) AS "ReplicaLag";복제본 지연은 읽기 전용 복제본이 소스 DB 인스턴스를 얼마나 잘 따라잡는지 나타냅니다. 이는 소스 DB 인스턴스와 특정 읽기 전용 인스턴스 간의 지연 시간입니다. 복제본 지연 값이 높으면 소스 DB 인스턴스와 해당 읽기 전용 복제본이 사용하는 DB 인스턴스 클래스나 스토리지 유형(또는 둘 다) 간에 불일치가 있다는 의미일 수 있습니다. DB 소스 인스턴스와 모든 읽기 전용 복제본의 DB 인스턴스 클래스 및 스토리지 유형은 동일해야 합니다.
복제본 지연은 간헐적인 연결 문제의 결과로 나타날 수도 있습니다. Amazon CloudWatch에서 Amazon RDS
ReplicaLag지표를 보고 복제 지연을 모니터링할 수 있습니다. Amazon RDS의ReplicaLag및 기타 지표에 대한 자세한 내용은 Amazon RDS에 대한 Amazon CloudWatch 지표 섹션을 참조하세요. -
설정을 조절하는 데 사용할 수 있는 정보는 PostgreSQL 로그를 확인하세요. 모든 체크포인트에서 PostgreSQL 로그는 다음 예제와 같이 재사용된 트랜잭션 로그 파일 수를 캡처합니다.
2014-11-07 19:59:35 UTC::@:[26820]:LOG: checkpoint complete: wrote 376 buffers (0.2%); 0 transaction log file(s) added, 0 removed, 1 recycled; write=35.681 s, sync=0.013 s, total=35.703 s; sync files=10, longest=0.013 s, average=0.001 s이 정보를 사용하여 지정된 기간 동안 얼마나 많은 트랜잭션 파일이 재사용되는지 파악할 수 있습니다. 필요할 경우
wal_keep_segments설정을 변경할 수 있습니다. 예를 들어checkpoint complete시 PostgreSQL 로그에 5분 간격으로35 recycled가 표시된다고 가정합니다. 이 경우wal_keep_segments기본값인 32는 스트리밍 활동에 보조를 맞추기에 충분하지 않으므로 이 파라미터의 값을 높여야 합니다. -
Amazon CloudWatch를 사용하여 복제 문제를 예측할 수 있는 지표를 모니터링합니다. PostgreSQL 로그를 직접 분석하는 대신 Amazon CloudWatch를 사용하여 수집된 지표를 확인할 수 있습니다. 예를 들어
TransactionLogsGeneration지표의 값을 확인하여 소스 DB 인스턴스에서 얼마나 많은 WAL 데이터를 생성 중인지 확인 가능합니다. DB 인스턴스의 워크로드로 인해 많은 양의 WAL 데이터가 생성되는 경우가 있습니다. 그렇다면 소스 DB 인스턴스와 읽기 전용 복제본의 DB 인스턴스 클래스를 변경해야 할 수 있습니다. 네트워크 성능이 높은(10Gbps) 인스턴스 클래스를 사용하면 복제본 지연이 줄어들 수 있습니다.
RDS for PostgreSQL DB 인스턴스에 대한 복제 슬롯 모니터링
모든 RDS for PostgreSQL 버전은 교차 리전 읽기 전용 복제본의 복제 슬롯을 사용합니다. RDS for PostgreSQL 14.1 이상 버전은 리전 내 읽기 전용 복제본의 복제 슬롯을 사용합니다. 또한 리전 내 읽기 전용 복제본은 Amazon S3를 사용하여 WAL 데이터를 아카이브합니다. 즉, DB 인스턴스와 읽기 전용 복제본이 PostgreSQL 14.1 이상을 실행하는 경우 복제 슬롯과 Amazon S3 아카이브를 모두 사용하여 읽기 전용 복제본을 복구할 수 있습니다. 복제 슬롯을 사용하여 읽기 전용 복제본을 복구하는 것이 Amazon S3 아카이브에서 복구하는 것보다 빠릅니다. 따라서 복제 슬롯 및 관련 지표를 모니터링하는 것이 좋습니다.
다음과 같이 pg_replication_slots 보기를 쿼리하여 RDS for PostgreSQL DB 인스턴스의 복제 슬롯을 볼 수 있습니다.
postgres=>SELECT * FROM pg_replication_slots;slot_name | plugin | slot_type | datoid | database | temporary | active | active_pid | xmin | catalog_xmin | restart_lsn | confirmed_flush_lsn | wal_status | safe_wal_size | two_phase ---------------------------+--------+-----------+--------+----------+-----------+--------+------------+------+--------------+-------------+---------------------+------------+---------------+----------- rds_us_west_1_db_555555555 | | physical | | | f | t | 13194 | | | 23/D8000060 | | reserved | | f (1 row)
reserved 값의 wal_status는 슬롯이 보유한 WAL 데이터의 양이 max_wal_size 파라미터의 범위 안에 있음을 나타냅니다. 즉, 복제 슬롯의 크기가 적절하다는 뜻입니다. 지원되는 다른 상태 값은 다음과 같습니다.
-
extended- 슬롯이max_wal_size설정을 초과하지만, WAL 데이터는 유지됩니다. -
unreserved- 슬롯에 더 이상 어떤 필수 WAL 데이터도 없습니다. 이중 일부는 다음 체크포인트에서 제거됩니다. -
lost- 일부 필수 WAL 데이터가 제거되었습니다. 슬롯을 더 이상 사용할 수 없습니다.
wal_status의 unreserved 및 lost 상태는 max_slot_wal_keep_size가 음수가 아닌 경우에만 표시됩니다.
pg_replication_slots 보기에는 복제 슬롯의 현재 상태가 표시됩니다. Amazon CloudWatch를 통해 다음 지표를 모니터링하여 복제 슬롯의 성능을 평가할 수 있습니다.
-
OldestReplicationSlotLag- 가장 지연된 복제본에서 사용하지 않은 소스의 Write-Ahead Log(WAL) 데이터의 양을 표시합니다. -
TransactionLogsDiskUsage- WAL 데이터에 얼마나 많은 스토리지가 사용되고 있는지 보여줍니다. 읽기 전용 복제본이 크게 지연되면 이 지표의 값이 크게 증가할 수 있습니다.
Amazon CloudWatch와 RDS for PostgreSQL에 대한 해당 지표 사용에 대해 자세히 알아보려면 Amazon CloudWatch로 Amazon RDS 지표 모니터링 섹션을 참조하세요. RDS for PostgreSQL DB 인스턴스의 스트리밍 복제 모니터링에 대한 자세한 내용은 AWS 데이터베이스 블로그에서 Amazon RDS PostgreSQL 복제의 모범 사례