복제 및 논리 디코딩에 대해 설명

완료됨

wal_level 매개 변수를 사용하여 로그에 기록해야 하는 정보의 양을 정의할 수 있습니다. LOGICAL 또는 REPLICA의 두 가지 옵션이 있습니다. REPLICA가 기본값입니다. 이 매개 변수는 서버가 시작될 때 설정됩니다.

고가용성

고가용성은 Azure Database for PostgreSQL 서비스로, 라이브 서버에 장애가 있는 경우 인수할 준비가 되어 있는 대기 서버를 제공합니다. Azure Database for PostgreSQL 유연한 서버의 고가용성은 복제를 사용하여 자동으로 대기 서버를 데이터 변경 내용으로 업데이트합니다.

Azure Database for PostgreSQL 유연한 서버에 고가용성을 구성하면 서버가 한 가용성 영역에 배치되고 대기 서버가 다른 가용성 영역에 만들어집니다. 데이터는 동기 모드에서 PostgreSQL 스트리밍 복제를 사용하여 주 서버에서 대기 서버로 복제됩니다.

각 가용성 영역은 하나 이상의 데이터 센터로 구성됩니다. 가용성 영역은 자체 전원 공급 장치, 냉각 시스템, 네트워크 인프라 등을 보유하여 서로 독립적입니다. 3개의 데이터 파일 복사본과 WAL(미리 쓰기 로그) 파일은 각 가용성 영역 내의 로컬 중복 스토리지에 저장되어 기본 서버와 대기 서버 간에 물리적 격리를 제공합니다. 한 가용성 영역이 실패하면 다른 두 가용성 영역이 계속 작동할 수 있습니다. 한 지역 내의 가용성 영역은 왕복 대기 시간이 2밀리초 미만인 고속 파이버 네트워크에 의해 연결됩니다.

지역 내의 가용성 영역이 빠른 파이버 네트워크에 의해 연결되어 있음을 보여 주는 스크린샷.

참고

모든 지역에 가용성 영역이 있는 것은 아닙니다.

고가용성을 구성하면 데이터베이스가 사용 중일 때마다 데이터가 중복되어 원본의 최신 복사본을 제공합니다. 크래시가 발생할 경우 원본 대신 복제본을 사용할 수 있습니다. 복제에는 서버와 대기 서버가 있습니다. 서버는 WAL 로그 파일을 보내고 대기 서버는 WAL 로그 파일을 받습니다.

대기 서버는 기록된 마지막 미리 쓰기 로그, 디스크에 플러시된 마지막 위치 등의 정보를 사용하여 주 서버에 다시 보고합니다. WAL 수신기가 보고서를 다시 보낼 최소 빈도를 정의하려면 wal_receiver_status_interval 매개 변수를 설정합니다. max_replication_slots 매개 변수는 서버가 지원할 수 있는 최대 복제 슬롯 수를 정의합니다. wal_level이 REPLICA로 설정된 경우 max_replication_slots는 1 이상이어야 하지만 허용되는 값 범위는 2~262,143입니다.

max_wal_senders 매개 변수는 WAL 송신자 프로세스의 최대 수를 설정합니다.

개념 영역 중복 고가용성 아키텍처를 보여 주는 스크린샷.

주 서버 및 대기 서버의 상태가 지속적으로 모니터링되며 대기 서버로 장애 조치(failover)를 트리거하는 등의 문제를 해결하기 위해 적절한 작업이 수행됩니다. 다음은 영역 중복 고가용성 상태를 나열합니다.

  • 초기화 중 - 새 대기 서버를 만드는 중입니다.
  • 복제 중 - 데이터 복제가 정상 상태이며 정상입니다.
  • 정상 - 대기 서버가 주 서버에 의해 업데이트되고 있습니다.
  • 장애 조치(failover) 중 - 주 데이터베이스 서버가 대기 서버로 장애 조치(failover)하는 중입니다.
  • 대기 제거 중 - 대기 서버를 삭제하는 중입니다.
  • 사용 안 함 - 영역 중복 고가용성을 사용하지 않습니다.

기존 데이터베이스 서버에 대해 고가용성을 추가할 수 있습니다. 라이브 서버에서 고가용성을 사용하거나 사용하지 않도록 설정하는 경우 활동이 거의 없을 때 작업을 수행합니다.

Azure 포털에서 다음을 수행합니다.

  1. Azure Database for PostgreSQL 서버로 이동합니다.
  2. 개요 섹션에서 현재 구성을 선택합니다. 컴퓨팅 + 스토리지 섹션이 표시됩니다.
  3. 고가용성 아래에서 고가용성(영역 중복) 확인란을 선택하여 고가용성을 사용하도록 설정합니다. 버스트 가능 계층에는 고가용성이 지원되지 않습니다.

고가용성은 재해 복구 옵션이라는 점에 유의해야 합니다. 읽기 전용 데이터베이스에 대한 액세스 허용과 같은 다른 용도로는 대기 서버를 사용할 수 없습니다. 그러나 게시자 및 구독자 모델을 사용하여 두 Azure Database for PostgreSQL 서버 간에 복제를 구성할 수 있습니다. 이 구성은 두 서버 간에 복제되는 데이터를 사용하여 두 서버를 유지 관리합니다. 그러면 구독자 서버에 대한 모든 권한이 있으며 데이터베이스를 모든 용도로 사용할 수 있습니다. 이 모듈의 끝부분에 있는 연습에서 이 구성을 연습합니다.

논리 디코딩

논리 디코딩은 미리 쓰기 로그로 전송된 데이터도 사용합니다. 이름에서 알 수 있듯이 미리 쓰기 로그의 항목을 이해할 수 있도록 디코드합니다. 모든 INSERT, UPDATE 및 DELETE 변경 내용은 논리 디코딩에 사용할 수 있습니다.

논리 디코딩은 감사, 분석 또는 기타 변경 내용 및 시기를 파악해야 하는 이유로 사용될 수 있습니다.

논리 디코딩은 데이터베이스의 모든 테이블에서 변경 내용을 추출합니다. 이러한 변경 내용을 다른 PostgreSQL 인스턴스에 보낼 수 없다는 점에서 복제와 다릅니다. 대신 변경 내용을 스트리밍하는 플러그 인인 PostgreSQL 확장이 있습니다.

논리 디코딩을 사용하면 미리 쓰기 로그의 내용을 이해하기 쉬운 형식으로 디코드할 수 있습니다. 이 형식은 데이터베이스 구조에 대한 지식 없이 해석할 수 있습니다. Azure Database for PostgreSQL은 논리 디코딩과 Azure Database for Postgres 서버에 설치되는 wal2json 플러그 인을 지원합니다.

논리 스트리밍 복제를 허용하는 pglogical 확장과 같은 다른 확장을 사용할 수 있습니다.

논리 디코딩을 사용하려면 서버 매개 변수에서 다음을 설정합니다.

  • wal_level = LOGICAL
  • max_replication_slots = 10
  • max_wal_senders = 10

이렇게 변경한 후 서버를 다시 시작해야 합니다.

Azure Portal에서 pglogical 확장을 사용하려면

  1. Azure Database for PostgreSQL 서버로 이동합니다.
  2. 서버 매개 변수를 선택하고 shared_preload_libraries를 검색합니다. 드롭다운 상자에서 pglogical을 선택합니다.
  3. azure.extensions를 검색합니다. 드롭다운 상자에서 pglogical을 선택합니다.
  4. 변경 내용을 적용하려면 서버를 다시 시작합니다.

또한 관리 사용자에게 복제에 대한 권한을 부여해야 합니다.

ALTER ROLE <adminname> WITH REPLICATION;

자세한 내용은 pglogical 확장 설명서 온라인 설명서를 검토하세요.

논리 디코딩은 논리 복제 슬롯이라는 스트림으로 데이터 변경 내용을 출력합니다.

  1. 각 슬롯에는 하나의 출력 플러그 인이 있고 사용자가 정의할 수 있습니다.
  2. 각 슬롯은 하나의 데이터베이스의 변경 내용만 제공하지만 한 데이터베이스에 여러 슬롯이 있을 수 있습니다.
  3. 각 데이터 변경은 일반적으로 슬롯당 한 번 내보내집니다.
  4. PostgreSQL이 다시 시작되면 슬롯이 변경 내용을 다시 내보낼 수 있습니다. 그러면 클라이언트가 이를 처리해야 합니다.
  5. 슬롯은 모니터링해야 합니다. 미사용 슬롯은 해당 미사용 변경 내용에 대한 모든 WAL 파일을 유지합니다. 이 경우 스토리지 전체 또는 트랜잭션 ID 래핑이 발생할 수 있습니다.