주:

Pglogical Extension을 사용하여 OCI 데이터베이스와 PostgreSQL의 리전 간 동기화

소개

Pglogical 확장을 사용하면 PostgreSQL 인스턴스를 통해 여러 OCI(Oracle Cloud Infrastructure) 데이터베이스에서 논리적 복제를 수행할 수 있습니다. 버전 간 PostgreSQL 복제를 지원하며 OCI 내의 지역 및 로컬 가용성 도메인에 배포된 데이터베이스 간 데이터 동기화를 용이하게 합니다. 또한 클라우드에서 실행하든 온프레미스에서 실행하든 관계없이 다중 클라우드 공급업체의 관리형 PostgreSQL 서비스와 자체 관리형 커뮤니티 PostgreSQL 인스턴스에 호스팅되는 데이터베이스 간 복제를 통해 매우 유연하고 상호 운용 가능한 복제 솔루션을 제공할 수 있습니다.

pglogical은 게시-구독 모델을 활용하여 논리적 스트리밍 복제를 통해 게시자에서 가입자로의 테이블, 시퀀스 및 기타 객체에 대한 변경 사항을 복제할 수 있습니다. 이 확장 기능은 다음과 같은 다양한 사용 사례에 이상적입니다.

제한사항

pglogical 확장은 다음과 같은 제한으로 인해 특정 사용 사례에 적합하지 않을 수 있습니다.

자세한 내용은 제한 및 제한을 참조하십시오.

목표

필수 조건

작업 1: 데이터베이스 간의 통신 설정

여러 지역의 DB 시스템에 연결하려면 VCN 피어링을 설정해야 합니다.

DRG(동적 경로 지정 게이트웨이)를 사용하여 VCN 피어링을 생성하려면 하위 태스크를 따릅니다.

작업 1.1: DRG를 VCN에 연결

  1. 요구사항에 따라 소스 영역 및 대상 영역에 VCN을 생성합니다.

  2. 요구사항에 따라 소스 및 대상 영역에서 DRG(동적 경로 지정 게이트웨이)를 생성합니다.

  3. VCN에 DRG를 연결하려면 소스 영역에서 DRG를 선택합니다. VCN 연결가상 클라우드 네트워크 연결 생성을 누릅니다.

  4. VCN 연결 생성 페이지에서 연결 이름을 입력하고 VCN-A(소스 지역 VCN)를 선택한 다음 VCN 연결 생성을 누릅니다.

  5. 동일한 단계를 반복하여 대상 VCN을 연결합니다.

자세한 내용은 동적 경로 지정 게이트웨이를 참조하십시오.

작업 1.2: RPC(원격 피어링 연결) 생성

  1. 소스 영역 RPC(SOR-RPC)를 만듭니다.

  2. SOURCE DRG 세부정보 페이지로 이동하고 원격 피어링 접속 첨부 파일을 누릅니다.

  3. 원격 피어링 접속 생성을 누릅니다.

  4. 원격 피어링 접속 생성 페이지에서 접속 이름을 입력하고 컴파트먼트를 선택한 다음 원격 피어링 접속 생성을 누릅니다.

  5. 대상 영역 RPC(TAR-RPC)를 만들려면 위에서 수행한 것과 동일한 절차를 반복하여 대상 영역 RPC를 만듭니다.

작업 1.3: RPC 연결 설정

SOR-RPC 연결을 통해 소스 영역에서 대상 영역으로의 연결을 설정합니다.

  1. SOURCE DRG 세부정보 페이지로 이동하고 원격 피어링 접속 첨부 파일을 누릅니다.

  2. 원격 피어링 접속 열에서 접속 이름을 눌러 SOR-RPC의 세부정보를 확인합니다.

  3. 접속 세부정보 페이지에서 접속 설정을 누르고 접속 이름을 입력한 다음 컴파트먼트를 선택합니다.

  4. 접속 설정 페이지에서 대상 영역 이름 영역을 선택하고 대상 RPC의 OCID(TAR-RPC)를 입력합니다. 연결이 설정되면 RPC의 상태가 PEERED로 변경됩니다.

    따라서 TAR-RPC 피어링 상태도 PEERED로 변경됩니다.

작업 1.4: DRG 연결로 대상 트래픽을 전송하도록 VCN의 경로 테이블 구성

  1. Target-VCN 개인 서브넷 CIDR로 트래픽을 전송하도록 Source-VCN에서 경로 테이블을 구성합니다.

  2. Source-VCN 세부정보 페이지로 이동하고 경로 테이블을 누릅니다.

  3. 경로 테이블 목록에서 전용 서브넷-소스-VCN에 대한 경로 테이블을 누릅니다.

  4. 경로 테이블 페이지에서 경로 규칙 추가를 누르고 요구사항에 따라 경로 규칙 정보를 입력합니다.

  5. 소스-VCN의 프라이빗 서브넷 CIDR로 트래픽을 전송하도록 Target-VCN의 경로 테이블을 구성하려면 위에서 수행한 것과 동일한 단계를 반복하여 소스-VCN의 프라이빗 서브넷에 대한 경로 테이블을 구성합니다.

작업 1.5: DRG를 통해 VCN의 프라이빗 서브넷 간 트래픽을 허용하도록 보안 수신 규칙 추가

  1. 소스 VCN의 프라이빗 서브넷-소스-VCN에 대한 보안 목록에 수신 규칙을 추가하여 Target-VCN-private 서브넷에서 Source-VCN-private 서브넷으로 오는 트래픽 허용

  2. Source-VCN 세부정보 페이지로 이동하여 보안 목록전용 서브넷 소스-VCN에 대한 보안 목록을 누릅니다.

  3. 보안 목록 페이지에서 수신 규칙 추가를 누르고 요구사항에 따라 수신 규칙 정보를 입력합니다.

  4. Source-VCN-private 서브넷에서 Target-VCN-private 서브넷으로 들어오는 트래픽을 허용하도록 Target-VCN프라이빗 서브넷 대상-VCN에 대한 보안 목록에 수신 규칙을 추가하려면 위에서 수행한 것과 동일한 단계를 반복하여 대상-VCN에 대한 수신 규칙을 추가하지만 적절한 수신 규칙을 사용합니다.

작업 1.6: 영역 간 데이터베이스 연결 테스트 및 검증

Source-VM에 연결하여 대상 데이터베이스에 대한 연결을 확인하고 대상 VM에서 소스 데이터베이스의 연결을 동시에 검증하여 양방향 통신을 보장합니다.

작업 2: A-record 입력 구성

영역 간 데이터베이스 시스템의 FQDN(정규화된 도메인 이름)을 분석하도록 A 레코드 항목을 구성해야 합니다. 이 자습서에서는 뭄바이 지역이 대상 지역 역할을 합니다.

  1. 대상 영역(뭄바이)으로 전환하고 검색 표시줄에 DNS를 입력한 다음 개인 뷰를 선택합니다.

  2. 현재 영역에 대한 VCN 목록이 표시됩니다. DRG가 이미 구성된 VCN을 선택합니다.

  3. 뭄바이에 있는 데이터베이스 시스템의 FQDN을 포함하여 DNS 영역 목록이 나타납니다.

  4. 원격 데이터베이스 시스템에 대한 항목을 추가합니다.

    1. 영역 만들기를 누릅니다.

      이미지

    2. 영역 이름에 다른 영역(애슈번)에 있는 데이터베이스 시스템의 FQDN을 입력합니다.

    3. 새 영역 항목을 추가하려면 생성을 누릅니다.

  5. A-record 항목을 구성합니다.

    1. 새로 생성된 구역을 열고 레코드 관리를 누른 다음 레코드 추가를 선택합니다.

    2. 다음 정보를 입력합니다.

      • 이름: 이름을 입력합니다.

      • 유형: A(IPv4 주소)를 선택합니다.

      • TTL: 3600초를 입력합니다(애플리케이션 요구사항에 따라 수정).

      • RDATA 모드: 기본을 선택합니다.

      • 주소: 다른 영역에 있는 데이터베이스 시스템의 기본 끝점 IP 주소를 입력합니다.

  6. 변경사항 저장, 변경사항 게시 순으로 눌러 구성을 적용합니다.

    이 설정을 통해 이제 데이터베이스 시스템 B(뭄바이)가 FQDN을 사용하여 데이터베이스 시스템 A(애슈번)를 해결하고 연결할 수 있으므로 원활한 리전 간 데이터베이스 통신이 가능합니다.

작업 3: 영역 전체에서 데이터베이스 시스템 생성

OCI의 여러 리전에 PostgreSQL 데이터베이스를 배포하여 강력한 재해 복구(DR) 전략을 수립합니다. OCI에서 PostgreSQL 데이터베이스 생성에 대한 자세한 내용은 데이터베이스 시스템 생성을 참조하십시오.

작업 4: 영역 전체에서 pglogical 확장 사용

이 자습서에서는 애슈번을 소스 영역으로, 뭄바이를 대상 영역으로 지정하여 DR 구현을 보여줍니다.

  1. 애슈번 지역에서 OCI 콘솔에 로그인하고, PostgreSQL 데이터베이스로 이동하고, 데이터베이스 시스템을 선택하고, 구성 파일에 액세스하여 구성 설정을 수정합니다.

    이미지

  2. 전체 구성 파일로 재지정됩니다. 계속하려면 구성 복사를 선택합니다. 그러면 다음 페이지가 표시됩니다.

    이미지

  3. 사양을 기준으로 필요한 정보를 입력합니다. 그런 다음 사용자 변수(읽기/쓰기)로 이동하고 다른 변수 추가를 누른 다음 변수 이름을 각각 wal_leveltrack_commit_timestamp으로, 변수 값을 각각 logical1으로 선택합니다.

  4. 확장 구성에서 pglogicalPostgreSQL 확장으로 선택합니다.

  5. 생성을 누르면 구성 파일이 생성됩니다.

    이미지

  6. 데이터베이스 시스템으로 이동하고 구성에서 편집을 선택한 다음 이전에 생성된 구성을 데이터베이스 시스템에 적용합니다.

  7. 데이터베이스 시스템에 Updating 상태가 표시됩니다. 계속하기 전에 Active가 될 때까지 기다립니다.

  8. 활성 상태인 경우 다음 질의를 사용하여 데이터베이스 시스템에 로그인하고 사용으로 설정된 확장을 확인합니다.

    SHOW oci.admin_enabled_extensions;
    
  9. 다음 명령을 사용하여 언어 확장을 만듭니다.

    CREATE EXTENSION pglogical;
    

    다음은 해당 명령의 샘플 출력입니다.

    pglogical_source=> show oci.admin_enabled_extensions ;
    oci.admin_enabled_extensions
    ------------------------------
    pglogical
    (1 row)
    
    pglogical_source=> create extension pglogical;
    CREATE EXTENSION
    
  10. 다른 (뭄바이) 지역 데이터베이스에서 동일한 절차를 반복하여 언어 확장을 활성화합니다.

작업 5: 소스 데이터베이스 구성

다음 질의를 실행하여 소스 데이터베이스에 논리적 복제를 사용으로 설정할 수 있는 권한을 부여합니다.

alter role psql with replication;
grant EXECUTE on FUNCTION pg_catalog.pg_replication_origin_session_reset() to psql ;
grant EXECUTE on FUNCTION pg_catalog.pg_replication_origin_session_setup to psql ;
grant all on FUNCTION pg_catalog.pg_replication_origin_session_setup to psql;

'psql'은 데이터베이스 설정 프로세스 중에 생성된 샘플 사용자입니다.

작업 6: 소스 데이터베이스에서 일반 확장 복제 설정

  1. 소스 데이터베이스에 게시자 노드를 만듭니다.

    SELECT pglogical.create_node(node_name := 'provider1',dsn :='host=primary.xxxxxxxxx.postgresql.us-ashburn-1.oci.oraclecloud.com port=5432 user=xxxx password=xxxxx dbname=pglogical_source');
    
    • node_name: 소스 데이터베이스에 만들 게시자의 이름을 지정합니다.
    • host: 소스 데이터베이스의 FQDN(정규화된 도메인 이름)을 입력합니다.
    • port_number: 소스 데이터베이스가 실행 중인 포트를 제공합니다.
    • database_name: 게시가 생성될 데이터베이스를 지정합니다.
  2. 공용 스키마의 모든 테이블을 기본 복제 세트에 포함합니다.

    SELECT pglogical.replication_set_add_all_tables('default', ARRAY['public']);
    

작업 7: 대상 데이터베이스 구성

다음 질의를 실행하여 대상 데이터베이스에 논리적 복제를 사용으로 설정할 수 있는 권한을 부여합니다.

alter role psql with replication;
grant EXECUTE on FUNCTION pg_catalog.pg_replication_origin_session_reset() to psql ;
grant EXECUTE on FUNCTION pg_catalog.pg_replication_origin_session_setup to psql ;
grant all on FUNCTION pg_catalog.pg_replication_origin_session_setup to psql;

'psql'은 데이터베이스 설정 프로세스 중에 생성된 샘플 사용자입니다.

필요한 권한을 부여한 후 원본 데이터베이스 구조와 일치하도록 Target Database의 모든 필수 객체를 복제합니다.

작업 8: 대상 데이터베이스에서 pglogical 복제 설정

  1. 대상 데이터베이스에 가입자 노드를 생성합니다.

    SELECT pglogical.create_node(node_name := 'subscriber1',dsn :='host=primary.xxxxxxx.postgresql.ap-mumbai-1.oci.oraclecloud.com port=5432 user=xxxx password=xxxxx dbname=pglogical_target');
    
    • node_name: 대상 데이터베이스에서 가입자 이름을 정의합니다.
    • host: 대상 데이터베이스의 FQDN(정규화된 도메인 이름)을 입력합니다.
    • port_number: 대상 데이터베이스가 실행 중인 포트를 입력합니다.
    • database_name: 가입이 생성될 데이터베이스의 이름을 제공합니다.
  2. 구독자 노드에서 구독을 생성하여 백그라운드 동기화 및 복제 프로세스를 시작합니다.

    SELECT pglogical.create_subscription(subscription_name := 'subscription1',provider_dsn := 'host=primary.xxxxxxxx.postgresql.us-ashburn-1.oci.oraclecloud.com port=5432 user=xxxx password=xxxxxx dbname=pglogical_source sslmode=verify-full sslrootcert=/etc/opt/postgresql/ca-bundle.pem');
    
    SELECT pglogical.wait_for_subscription_sync_complete('subscription1');
    
    • subscription_name: 구독 이름을 제공합니다.
    • host: 소스 데이터베이스의 FQDN을 제공합니다.
    • port_number: 대상 데이터베이스가 실행 중인 포트를 제공합니다.
    • database_name: 소스 데이터베이스의 이름을 제공합니다.

    주: 접속 실패를 방지하려면 구독 생성 문자열에 sslmode=verify-fullsslrootcert = /etc/opt/postgresql/ca-bundle.pem를 사용해야 합니다.

작업 9: 가입 상태 확인

다음 명령문을 실행하여 대상 데이터베이스에서 가입 상태를 확인합니다.

select * from pglogical.show_subscription_status();

작업 10: 데이터 복제가 실행 중인지 확인

다음 명령문을 실행하여 소스 데이터베이스에서 복제 상태를 확인합니다.

SELECT * FROM pg_stat_replication;

작업 11: (Optional) 복제 중지 또는 시작

참고: subscription_name에서 대상에 생성된 구독의 이름을 입력합니다.

작업 12: (선택사항) 가입 삭제

대상 데이터베이스에서 가입을 삭제하려면 다음 명령을 실행합니다.

select pglogical.drop_subscription('subscription_name');

참고: subscription_name에서 대상에 생성된 구독의 이름을 입력합니다.

문제 해결

다음 단계

이 사용지침서에서는 전체 확장 기능을 사용하여 PostgreSQL를 통해 OCI Database의 리전에 걸쳐 DR 솔루션을 구현하는 포괄적인 접근 방식을 제공합니다. 구성 프로세스, 데이터 복제 및 일반적인 문제 해결에 대해 다룹니다.

또한 이 방법을 PostgreSQL 업그레이드에 적용하여 다운타임을 최소화하고 대상 데이터베이스가 소스와 완전히 동기화되면 원활한 애플리케이션 컷오버를 수행할 수 있습니다.

승인

추가 학습 자원

docs.oracle.com/learn에서 다른 랩을 탐색하거나 Oracle Learning YouTube 채널에서 더 많은 무료 학습 콘텐츠에 액세스하세요. 또한 education.oracle.com/learning-explorer를 방문하여 Oracle Learning Explorer가 되십시오.

제품 설명서는 Oracle Help Center를 참조하십시오.