wal2json 구성
IBM Cloud® Databases for PostgreSQL 배포는 wal2json 플러그인을 지원하므로 배포 시 논리적 디코딩이 가능합니다.
참고:
- 사용 중단되었습니다: 이 플러그인은 PostgreSQL 버전 9.6 및 10에서 더 이상 사용되지 않습니다.
- 지원됩니다: PostgreSQL 버전 11 이상에서만 사용 가능.
-
먼저, , 및
wal_level설정을max_replication_slots구성max_wal_senders해야 합니다.wal_level을logical로 변경하십시오.max_replication_slots및max_wal_senders모두를 20보다 큰 값으로 설정해야 합니다. Databases for PostgreSQL에는 현재 및 향후 운영 용도로 20개의 복제 슬롯과 WAL 송신자가 예약되어 있습니다.curl -X PATCH https://api.{region}.databases.cloud.ibm.com/v4/ibm/deployments/{id}/configuration -H 'Authorization: Bearer <>' -H 'Content-Type: application/json' -d '{"configuration": { "wal_level": "logical", "max_replication_slots": 21, "max_wal_senders": 21 } }' -
repl사용자의 비밀번호를 설정하십시오. Cloud Databases CLI 플러그인cdb deployment-user-password명령 또는 Cloud Databases API/deployments/{id}/users/{username}엔드포인트를 사용하여 모든 사용자의 비밀번호를 변경할 수 있습니다.repl사용자에게 복제 권한이 있으며 비밀번호를 설정한 후wal2json플러그인에서 이 사용자를 사용합니다. -
Cloud Databases API에서 데이터베이스에 대한 복제 슬롯을 작성하십시오.
/deployments/{id}/postgresql/logical_replication_slots엔드포인트에 POST 요청을 전송하십시오.curl -X POST https://api.{region}.databases.cloud.ibm.com/v4/ibm/deployments/{id}/postgresql/logical_replication_slots -H 'Authorization: Bearer <>' -H 'Content-Type: application/json' -d '{"logical_replication_slot": { "name": "<slot_name>", "database_name": "<database_name>", "plugin_type": "wal2json" } }'플러그인 유형은
wal2json이어야 합니다. 데이터베이스는 기존 데이터베이스여야 합니다. 슬롯 이름에는 소문자, 숫자, 밑줄 문자만 포함할 수 있습니다. 데이터베이스에 연결하고 다음 명령을 실행하여 복제 슬롯의 존재 여부를 확인할 수 있습니다:SELECT * FROM pg_replication_slots WHERE slot_name = '<slot_name>'; -
플러그인을 테스트하려면 명령줄에서
pg_recvlogical을 실행합니다. PostgreSQL을 설치하면 이 명령을 사용할 수 있습니다. 배포의 호스트와 포트, API를 통해 생성한 데이터베이스와 슬롯 이름을 사용합니다.PGSSLMODE=require pg_recvlogical -d <DATABASE NAME> -U repl -h <HOST> -p <PORT> --slot <SLOT NAME> --start -o pretty-print=1 -f - -
ibmclouddb에 테이블을 작성하고 일부 데이터를 삽입하십시오.pg_recvlogical를 실행하는 명령줄에서 인서트가 나오는지 확인합니다.테이블 생성이 표시되지 않습니다.
wal2json 고려 사항 및 팁
-
논리적 디코딩을 수행하려면 PostgreSQL에 추가 데이터가 필요하므로
wal_level을logical로 설정하면 WAL 파일의 크기가 증가합니다.wal2json을 사용하지 않는 경우wal_level을 기본값으로 둡니다. WAL 파일이 클수록 더 많은 디스크 공간이 필요할 수 있습니다. 쓰기 처리량은 고가용성 및 읽기 전용 복제본에 영향을 주는 복제 지연과 함께 감소하고 백업에서 복원 시간이 길어질 수 있습니다. -
논리적 디코딩에는 복제하는 내용에 대한 일련의 제한사항이 있습니다. 일부에는 스키마/DDL, 순서, TRUNCATE 및 대형 오브젝트가 포함됩니다.
-
제어된 HA 스위치오버가 발생하면, 복제 이벤트가 두 번 이상 전달될 수 있습니다. 다운스트림 애플리케이션은 두 번 이상 전달되는 이벤트를 처리할 수 있어야 합니다.
-
논리 복제 슬롯을 작성하며 이용자가 연결되지 않고 변경사항을 이용 중인 경우 배치의 디스크 공간이 부족해질 위험이 있습니다. 복제 슬롯이 이용자에게 필요한 변경사항이 있는 모든 트랜잭션 로그를 보존하도록 PostgreSQL에 알립니다. 해당 변경사항이 이용하는 것이 없으면 PostgreSQL은 디스크 공간이 부족할 때까지 계속 수집합니다. IBM Cloud® Monitoring 통합을 통해 디스크 공간을 모니터할 수 있습니다. 공간이 부족한 경우 데이터베이스를 시작할 수 있도록 디스크를 스케일링할 수 있습니다. 그런 다음 변경사항을 이용하기 시작하거나 슬롯을 삭제할 수 있습니다.
-
특정 복제 슬롯에서 사용 중인 디스크 공간의 양과 이 복제 슬롯에 활성 이용자가 있는지 여부를 확인할 수 있습니다.
admin사용자를 사용하여 다음 명령 중 하나를 실행하십시오.PostgreSQL 10.x 이상
SELECT slot_name, pg_size_pretty(pg_wal_lsn_diff(pg_current_wal_lsn(),restart_lsn)) AS lag, active from pg_replication_slots WHERE slot_type='logical';PostgreSQL 9.x
SELECT slot_name, pg_size_pretty(pg_xlog_location_diff(pg_current_xlog_location(),restart_lsn)) AS lag, active FROM pg_replication_slots WHERE slot_type='logical';
배포에서 예상보다 높은 디스크 사용량이 표시되면 복제 슬롯에 소비자가 있고 디스크 공간이 부족하여 배포를 실행하고 있지 않은지 확인하여 문제를 해결하세요.