외부 복제본 구성

이 페이지에서는 logical decoding과 함께 pglogical 확장 프로그램을 사용하여 Cloud SQL 외부의 복제본에 복제되는 Cloud SQL 인스턴스를 구성하는 방법을 설명합니다.

외부 복제본 구성에 대한 자세한 내용은 외부 복제 정보를 참조하세요.

외부 복제본 구성 설정

시작하기 전에

이 태스크를 시작하기 전에 Cloud SQL 인스턴스와 외부 복제본 요구사항을 충족하는 외부 PostgreSQL 인스턴스가 있어야 합니다.

기본 인스턴스 구성

  1. Google Cloud 콘솔의 Cloud SQL 인스턴스 페이지로 이동합니다.
  2. 기본 인스턴스에서 외부 복제본의 IP 주소에 대한 액세스를 사용 설정합니다.

    IP 액세스를 사용 설정하는 방법은 IP 연결을 위한 액세스 구성을 참조하세요.

  3. 나중에 사용할 수 있도록 기본 인스턴스의 공개 IP 주소와 공개 발신 IP 주소를 기록합니다. 인스턴스의 개요 페이지에서 이러한 값을 확인할 수 있습니다.
  4. 오른쪽 상단에 있는 Cloud Shell 아이콘()을 클릭합니다.
  5. Cloud Shell 프롬프트에서 기본 제공 PostgreSQL 클라이언트를 사용하여 기본 인스턴스에 연결합니다.
    gcloud sql connect PRIMARY_INSTANCE_NAME \
    --user=postgres
    
       
  6. 루트 비밀번호를 입력합니다. 그러면 postgres 프롬프트가 표시됩니다.
  7. REPLICATION 속성으로 PostgreSQL 사용자를 만듭니다.
    CREATE USER REPLICATION_USER WITH REPLICATION IN ROLE cloudsqlsuperuser LOGIN PASSWORD 'REPLICATION_USER_PASSWORD';
       
  8. pglogical 확장 프로그램을 설치하고 구성합니다.

    Cloud SQL 인스턴스를 수정하여 다음 플래그를 추가하고 설정합니다.

    • cloudsql.enable_pglogical
    • cloudsql.logical_decoding
    • max_replication_slots
    • max_worker_processes
    • max_wal_senders
    • 이러한 플래그에 대한 자세한 내용은 PostgreSQL 리소스 페이지를 참조하세요.

    데이터베이스를 다시 시작한 후, 로그인하고, replication_user로 변경하고, pglogical 확장 프로그램을 만듭니다.

    CREATE EXTENSION pglogical;
       
  9. pglogical 노드를 만듭니다.

    pglogical _node_는 물리적 PostgreSQL 인스턴스를 나타내며 이 인스턴스의 연결 세부정보를 저장합니다.

    SELECT pglogical.create_node(
      node_name := 'provider',
      dsn := 'host=PRIMARY_PUBLIC_IP_ADDRESS port=5432 dbname=DATABASE_NAME user=REPLICATION_USER password=REPLICATION_USER_PASSWORD'
       );
       
  10. 새 데이터베이스로 시작하는 경우 기본 인스턴스와 복제본 인스턴스 모두에 동일한 데이터베이스와 테이블을 만듭니다. 예를 들면 다음과 같습니다.
    CREATE DATABASE test;
    
    \connect test;
    
    CREATE TABLE replica_test (id SERIAL PRIMARY KEY, data text);
    INSERT INTO replica_test (data) VALUES ('apple'), ('banana'), ('cherry');
    
    CREATE EXTENSION pglogical;
  11. 기본 인스턴스에 이미 데이터베이스가 있는 경우 복제본에 동일한 데이터베이스를 만들어야 합니다. 이렇게 하려면 데이터베이스를 기본 인스턴스에서 Cloud Storage 버킷으로 내보내고 복제본으로 가져옵니다. Cloud SQL에서 Cloud Storage의 SQL 덤프 파일로 데이터 내보내기 자세히 알아보기
  12. 다른 데이터 세트를 서로 다른 대상에 복제하도록 지원하기 위해 pglogical에는 복제 세트라는 개념이 포함되어 있습니다. 예를 들어 기본 복제 세트에 테이블을 추가하려면 다음 명령어를 입력합니다.
    SELECT pglogical.replication_set_add_table('default', 'replica_test', true);
       

외부 복제본 구성

  1. 복제를 위한 특별 사용자를 만들고 복제 권한을 부여합니다.
    CREATE USER REPLICATION_USER WITH REPLICATION SUPERUSER LOGIN PASSWORD 'REPLICATION_USER_PASSWORD';
       
  2. 새 데이터베이스로 시작하는 경우 REPLICATION_USER를 사용하여 기본 인스턴스와 복제본 인스턴스 모두에 동일한 데이터베이스와 테이블을 만듭니다. 예를 들면 다음과 같습니다.
    CREATE DATABASE test;
    \connect test;
    CREATE TABLE replica_test (id SERIAL PRIMARY KEY, data text);
    INSERT INTO replica_test (data) VALUES ('apple'), ('banana'), ('cherry');
      
  3. 기본 인스턴스에서 내보낸 파일이 있는 외부 복제본 인스턴스를 시드하는 경우 Cloud Storage에서 내보낸 파일을 다운로드합니다. 외부 복제본이 Compute Engine 인스턴스에 있는 경우 gsutil 명령어를 사용하여 파일을 다운로드할 수 있습니다.
    gsutil cp gs://BUCKET_NAME/DUMP_FILE_NAME .
        
  4. 파일을 데이터베이스로 가져옵니다.
    psql --user=postgres --password < DUMP_FILE_NAME.
    
  5. OS에 따라 pglogical을 설치합니다. 예를 들어 Debian 시스템에서 PostgreSQL 버전 13, sudo apt-get install postgresql-13-pglogical을 실행합니다.
  6. replication_user로 데이터베이스에 로그인하고 다음 매개변수를 설정합니다.
    ALTER SYSTEM SET shared_preload_libraries = 'pglogical';
    ALTER SYSTEM SET max_replication_slots = #; (where # is the same as you set on the primary).
    ALTER SYSTEM SET max_worker_processes = #; (where # is the same as you set on the primary).
    # Logout of the database and restart it. For example,
    # sudo /etc/init.d/postgresql restart
    # Log back in the database as the replication_user.
    # Since the pglogical extension is created local to each database, you need to
    # execute CREATE EXTENSION pglogical in each database you create, so if you
    # haven't already done that:
    CREATE EXTENSION pglogical;
       

    For more information about these flags, see the PostgreSQL resources page.

  7. pglogical 노드를 만듭니다.
    SELECT pglogical.create_node(
      node_name := 'subscriber',
      dsn := 'host=REPLICA_PUBLIC_IP_ADDRESS port=5432 dbname=DATABASE_NAME user=REPLICATION_USER password=REPLICATION_USER_PASSWORD'
      );
      
  8. pglogical 구독을 만듭니다.
    SELECT pglogical.create_subscription(
        subscription_name := 'SUBSCRIPTION_NAME',
        provider_dsn := 'host=PRIMARY_PUBLIC_IP_ADDRESS port=5432 dbname=DATABASE_NAME user=REPLICATION_USER password=REPLICATION_USER_PASSWORD'
    );
      
  9. 구독 상태를 확인합니다.
    SELECT * FROM pglogical.show_subscription_status('SUBSCRIPTION_NAME');
       
  10. 상태가 replicating으로 표시되면 설정이 성공한 것입니다.
  11. 기본 인스턴스에 일부 데이터를 삽입하고 복제본에도 데이터가 표시되는지 확인합니다.

문제 해결

pglogical 문제 해결을 참조하세요.

다음 단계