pglogical 확장 프로그램을 사용하여 AlloyDB Omni와 다른 데이터베이스 간에 데이터를 복제하는 단계를 설명합니다.
자세한 내용은 pglogical 확장 프로그램 정보 및 pglogical 용어 및 기본 구성요소를 참고하세요.
지원되는 인증 방법
pglogical 확장 프로그램과 함께 사용되는 두 가지 주요 인증 방법은 비밀번호 및 신뢰 인증 방법입니다.
신뢰 인증 방법을 사용하는 것이 좋습니다. 자세한 내용은 지원되는 인증 방법을 참고하세요.
시작하기 전에
특정 데이터베이스 내에서 pglogical를 확장 프로그램으로 설치할 수 있습니다. 
AlloyDB Omni에 pglogical 확장 프로그램을 구현하기 전에 다음 시스템 요구사항을 충족하는지 확인하세요.
- superuser로 AlloyDB가 아닌 PostgreSQL 클러스터에 액세스
- pglogical확장 프로그램이 AlloyDB 외 PostgreSQL 클러스터에 설치되어 있습니다. 출시 및 배포 관련 설치 안내는 pglogical을 참고하세요.
- AlloyDB Omni 서버가 설치되고 구성되어 있어야 합니다. AlloyDB Omni를 설치하는 방법에 관한 안내는 AlloyDB Omni 설치를 참고하세요.
- AlloyDB가 아닌 PostgreSQL 클러스터와 AlloyDB Omni 호스트 서버의 IP 주소
- AlloyDB 외 PostgreSQL 클러스터와 AlloyDB Omni 호스트 서버 간에 설정되고 보안이 유지되는 네트워크 표준 PostgreSQL 포트 5432의 TCP 연결이 필요합니다.
AlloyDB가 아닌 공급자의 매개변수 조정
- wal_level매개변수를- logical로 설정하고- postgresql.conf파일의- shared_preload_libraries매개변수에- pglogical를 추가합니다.- pglogical확장 프로그램에는 AlloyDB가 아닌 제공업체 클러스터에 대한 최소한의 매개변수 조정이 필요합니다.- cp postgresql.conf postgresql.bak- sed -r -i "s|(\#)?wal_level\s*=.*|wal_level=logical|" postgresql.conf- sed -r -i "s|(\#)?(shared_preload_libraries\s*=\s*)'(.*)'.*$|\2'\3,pglogical'|" postgresql.conf- sed -r -i "s|',|'|" postgresql.conf
- 매개변수가 올바르게 설정되었는지 확인합니다. - grep -iE 'wal_level|shared_preload_libraries' postgresql.conf
- 파라미터 변경사항을 적용하려면 AlloyDB가 아닌 클러스터를 다시 시작합니다. - 다른 매개변수는 이미 충분한 값으로 설정되어 있거나 AlloyDB 이외의 배포 및 버전에 따라 조정해야 할 수 있습니다. - 다음 매개변수를 확인합니다. - max_worker_processes: 공급자 데이터베이스당 하나, 구독자 노드당 하나 이상 이 매개변수의 표준은 10 이상입니다.
- max_replication_slots: 제공자 노드의 노드당 하나
- max_wal_senders: 제공자 노드의 노드당 하나
- track_commit_timestamp: 마지막 또는 첫 번째 업데이트가 충돌 해결에서 승리해야 하는 경우- on로 설정합니다.
- listen_addresses: AlloyDB Omni IP 주소를 포함하거나 포괄적인 CIDR 블록을 통해 언급해야 합니다.
 
- (선택사항) AlloyDB 이외의 제공업체가 Amazon RDS 또는 Aurora인 경우 pglogical 확장 프로그램을 사용 설정하고 - cluster parameter group조정을 통해 필수 매개변수를 조정해야 합니다.- 기존 또는 새 클러스터 파라미터 그룹 내에서 다음 파라미터를 설정합니다. - rds.logical_replication~- 1
- max_replication_slots~- 50
- max_wal_senders~- 50
- max_worker_processes~- 64
- shared_preload_libraries~- pg_stat_statements, pglogical
 
- 클러스터 파라미터 그룹 조정이 적용되도록 Amazon RDS 또는 Aurora 클러스터를 다시 시작합니다. 
 
- 모든 매개변수 값이 관련성이 있는지 확인합니다. - SELECT name, setting FROM pg_catalog.pg_settings WHERE name IN ('listen_addresses', 'wal_level', 'shared_preload_libraries', 'max_worker_processes', 'max_replication_slots', 'max_wal_senders', 'track_commit_timestamp') ORDER BY name;
AlloyDB Omni가 아닌 제공업체 클러스터에 대한 호스트 기반 인증 조정
pglogical는 제공업체 데이터베이스에 로컬 TCP 연결을 만듭니다. 따라서 호스트 서버의 IP 주소를 AlloyDB Omni DATA_DIR/pg_hba.conf 파일에 추가해야 합니다. 여기서 DATA_DIR은 데이터 디렉터리의 파일 시스템 경로입니다(예: /home/$USER/alloydb-data).
- 새 - pglogical_replication사용자에 맞게 로컬 서버의 신뢰 인증 항목을- DATA_DIR/pg_hba.conf파일에 추가합니다.- 또한 구독자 노드는 제공자 노드에 대해 인증할 수 있어야 합니다. 각 구독자 노드의 IP 주소 또는 적절한 CIDR 블록 IP 범위를 - DATA_DIR/pg_hba.conf파일에 추가합니다.- echo -e "# pglogical entries: host all pglogical_replication samehost trust host all pglogical_replication SERVER_IP_ADDRESS/32 trust " | column -t | sudo tee -a DATA_DIR/pg_hba.conf- SERVER_IP_ADDRESS를 복제할 기본 AlloyDB Omni 인스턴스의 IP 주소로 바꿉니다.
- 항목이 올바른지 확인합니다. - tail -3 DATA_DIR/pg_hba.conf
- 파라미터 변경사항을 적용하려면 AlloyDB가 아닌 클러스터를 다시 시작합니다. 
AlloyDB Omni 구독자 클러스터의 매개변수 조정
pglogical를 사용하려면 AlloyDB Omni 구독자 클러스터에서도 최소한의 매개변수 조정이 필요합니다. DATA_DIR/postgresql.conf 파일의 shared_preload_libraries 매개변수에 pglogical를 추가해야 합니다. 클러스터 내 데이터베이스가 제공자 데이터베이스 역할을 하는 경우 제공자 데이터베이스에 필요한 매개변수 변경사항을 적용합니다.
- 매개변수를 조정합니다. - sudo sed -r -i "s|(shared_preload_libraries\s*=\s*)'(.*)'.*$|\1'\2,pglogical'|" DATA_DIR/postgresql.conf
- 매개변수가 올바르게 설정되었는지 확인합니다. - grep -iE 'shared_preload_libraries' DATA_DIR/postgresql.conf
- 파라미터 변경사항을 적용하려면 AlloyDB Omni를 다시 시작하세요. - Docker- docker container restart CONTAINER_NAME- CONTAINER_NAME을 AlloyDB Omni 컨테이너를 시작할 때 할당한 이름으로 바꿉니다.- Podman- podman container restart CONTAINER_NAME- CONTAINER_NAME을 AlloyDB Omni 컨테이너를 시작할 때 할당한 이름으로 바꿉니다.
- 다른 제공자 데이터베이스 매개변수에 대한 AlloyDB Omni 기본값을 설정합니다. - max_worker_processes: 공급자 데이터베이스당 하나, 구독자 노드당 하나
- track_commit_timestamp: 마지막/첫 번째 업데이트가 충돌 해결에서 우선해야 하는 경우- on로 설정합니다.
 
- 모든 매개변수 값이 관련성이 있는지 확인합니다. - Docker- docker exec CONTAINER_NAME psql -h localhost -U postgres -c " SELECT name, setting FROM pg_catalog.pg_settings WHERE name IN ('listen_addresses', 'wal_level', 'shared_preload_libraries', 'max_worker_processes', 'max_replication_slots', 'max_wal_senders', 'track_commit_timestamp') ORDER BY name; "- Podman- podman exec CONTAINER_NAME psql -h localhost -U postgres -c " SELECT name, setting FROM pg_catalog.pg_settings WHERE name IN ('listen_addresses', 'wal_level', 'shared_preload_libraries', 'max_worker_processes', 'max_replication_slots', 'max_wal_senders', 'track_commit_timestamp') ORDER BY name; "
AlloyDB Omni 구독자 클러스터에 대한 호스트 기반 인증 조정
pglogical는 AlloyDB Omni 구독자 데이터베이스에 로컬 TCP 연결을 만듭니다. 따라서 AlloyDB Omni DATA_DIR/pg_hba.conf 파일에 구독자의 호스트 서버 IP 주소를 추가해야 합니다.
- 새 - pglogical_replication사용자에 맞게 로컬 서버의 신뢰 인증 항목을- DATA_DIR/pg_hba.conf파일에 추가합니다.- echo -e "# pglogical entries: host all pglogical_replication samehost trust " | column -t | sudo tee -a DATA_DIR/pg_hba.conf
- 항목이 올바른지 확인합니다. - tail -2 DATA_DIR/pg_hba.conf
- 인증 변경사항이 적용되도록 AlloyDB Omni를 다시 시작합니다. - docker container restart CONTAINER_NAME
제공자 및 구독자 클러스터 모두에서 pglogical 사용자 만들기
제공자 클러스터와 구독자 클러스터 모두에서 새 사용자를 만들어야 합니다.
pglogical를 사용하려면 사용자에게 superuser 속성과 replication 속성이 모두 있어야 합니다.
- Google Cloud AlloyDB 제공업체 클러스터에서 사용자 역할을 만듭니다. - CREATE USER pglogical_replication LOGIN PASSWORD 'secret'; ALTER USER pglogical_replication WITH replication; ALTER USER pglogical_replication WITH superuser;
- (선택사항) AlloyDB 이외의 제공자가 Amazon RDS 또는 Aurora인 경우 다음 역할을 부여해야 합니다. - GRANT rds_superuser TO replication_user;
AlloyDB가 아닌 제공업체 데이터베이스에 pglogical 및 노드 추가
- 필수 권한을 부여합니다. - 각 데이터베이스에 - pglogical확장 프로그램을 설치하고 pglogical 데이터베이스 사용자에게- usage권한을 부여해야 합니다.- 예를 들어 데이터베이스가 - my_test_db인 경우 다음 명령어를 실행합니다.- CREATE EXTENSION IF NOT EXISTS pglogical; GRANT usage ON SCHEMA pglogical TO pglogical_replication;
- 제공자 데이터베이스의 - pglogical노드를 만듭니다.- node_name는 임의적이며- dsn문자열은 동일한 데이터베이스로 다시 연결되는 유효한 TCP 연결이어야 합니다.- 예를 들어 - my_test_db데이터베이스의 경우 다음 명령어를 실행합니다.- SELECT pglogical.create_node(node_name := 'provider', dsn := 'host=SERVER_IP_ADDRESS port=5432 dbname=my_test_db user=pglogical_replication password=secret');
테이블을 만들고 기본 복제 세트에 추가
테이블을 만들고 AlloyDB가 아닌 제공업체 데이터베이스의 기본 복제 세트에 추가합니다.
- 제공자 데이터베이스에 - test_table_1이라는 테스트 테이블을 만듭니다.- CREATE TABLE test_table_1 (col1 INT PRIMARY KEY); INSERT INTO test_table_1 VALUES (1),(2),(3);
- 기본 복제 세트에 테스트 테이블을 수동으로 추가합니다. 맞춤 pglogical 복제 세트를 만들거나 기본 복제 세트를 사용할 수 있습니다. 확장 프로그램을 만들 때 - default,- default_insert_only,- ddl_sql와 같은 여러 기본 복제 세트가 생성되었습니다. 복제 세트에 테이블과 시퀀스를 개별적으로 추가하거나 지정된 스키마에 대해 한 번에 모두 추가할 수 있습니다.- -- Add the specified table to the default replication set: SELECT pglogical.replication_set_add_table(set_name := 'default', relation := 'test_table_1', synchronize_data := TRUE); -- Check which tables have been added to all replication sets: SELECT * FROM pglogical.replication_set_table;
- (선택사항) - public와 같은 지정된 스키마의 모든 테이블을 추가합니다.- -- Add all "public" schema tables to the default replication set: SELECT pglogical.replication_set_add_all_tables('default', ARRAY['public']); -- Check which tables have been added to all replication sets: SELECT * FROM pglogical.replication_set_table; -- Add all "public" schema sequences to the default replication: SELECT pglogical.replication_set_add_all_sequences('default', ARRAY['public']); -- Check which sequences have been added to all replication sets: SELECT * FROM pglogical.replication_set_seq;
- default복제 세트에서 테이블을 삭제합니다. 스키마에 기본 키나 복제본 ID가 없는 테이블이 있으면- INSERT문만 복제할 수 있습니다.- replication_set_add_all_tables함수를 통해 이러한 테이블을- default복제 세트에 자동으로 추가한 경우 해당 복제 세트에서 수동으로 삭제하고- default_insert_only세트에 추가해야 합니다.- -- Remove the table from the **default** replication set: SELECT pglogical.replication_set_remove_table(set_name := 'default', relation := 'test_table_2'); -- Manually add to the **default_insert_only** replication set: SELECT pglogical.replication_set_add_table(set_name := 'default_insert_only', relation := 'test_table_2');- 원하는 경우 새로 생성된 테이블을 복제 세트에 자동으로 추가하려면 - pglogical소스에 제안된 대로- pglogical_assign_repset트리거를 추가하세요.
데이터베이스를 AlloyDB Omni 구독자 클러스터에 복사
- pg_dump유틸리티를 사용하여 소스 데이터베이스의 스키마 전용 백업을 만듭니다.
- AlloyDB Omni 구독자 서버에서 AlloyDB 외 서버의 IP 주소 또는 엔드포인트를 사용하여 - pg_dump명령어를 실행합니다.- pg_dump -h SERVER_IP_ADDRESS -U postgres --create --schema-only my_test_db > my_test_db.schema-only.sql
- 백업을 구독자 AlloyDB Omni 서버의 구독자 데이터베이스로 가져옵니다. - Docker- docker exec -i CONTAINER_NAME psql -h localhost -U postgres < my_test_db.schema-only.sql- Podman- podman exec -i CONTAINER_NAME psql -h localhost -U postgres < my_test_db.schema-only.sql
이렇게 하면 행 데이터 없이 데이터베이스와 스키마가 생성됩니다. 행 데이터는 pglogical 확장 프로그램에 의해 복제됩니다. 필요한 다른 사용자 또는 역할을 수동으로 복사하거나 다시 만듭니다.
AlloyDB Omni 구독자 데이터베이스에 노드 및 구독 만들기
- AlloyDB Omni 구독자 데이터베이스에 노드를 만듭니다. 비밀번호 인증을 사용하려면 - dsn에 비밀번호를 추가합니다.- Docker- docker exec CONTAINER_NAME psql -h localhost -U postgres -d my_test_db -c "- SELECT pglogical.create_node(node_name := 'subscriber', dsn := 'host=localhost port=5432 dbname=my_test_db user=pglogical_replication'); "- Podman- podman exec CONTAINER_NAME psql -h localhost -U postgres -d my_test_db -c "- SELECT pglogical.create_node(node_name := 'subscriber', dsn := 'host=localhost port=5432 dbname=my_test_db user=pglogical_replication'); "
- AlloyDB Omni 제공자 서버의 제공자 데이터베이스를 다시 가리키는 구독을 구독자 데이터베이스에 만듭니다. - Docker- docker exec CONTAINER_NAME psql -h localhost -U postgres -d my_test_db -c "- SELECT pglogical.create_subscription(subscription_name := 'test_sub_1', provider_dsn := 'host=SERVER_IP_ADDRESS port=5432 dbname=my_test_db user=pglogical_replication password=secret'); "- Podman- podman exec CONTAINER_NAME psql -h localhost -U postgres -d my_test_db -c "- SELECT pglogical.create_subscription(subscription_name := 'test_sub_1', provider_dsn := 'host=SERVER_IP_ADDRESS port=5432 dbname=my_test_db user=pglogical_replication password=secret'); "
- 몇 초 또는 몇 분 이내에 초기 데이터가 제공자에서 구독자로 복제됩니다. - Docker- docker exec CONTAINER_NAME psql -h localhost -U postgres -d my_test_db -c "- SELECT * FROM test_table_1 ORDER BY 1; "- Podman- podman exec CONTAINER_NAME psql -h localhost -U postgres -d my_test_db -c "- SELECT * FROM test_table_1 ORDER BY 1; "- 제공업체 데이터베이스에 추가된 추가 행도 몇 초 내에 실시간으로 복제됩니다. 
pglogical 추가 배포 고려사항
pglogical 확장 프로그램에는 이 문서에서 다루지 않는 많은 고급 기능이 있습니다. 이러한 기능 중 다수는 구현에 적용할 수 있습니다. 다음 고급 기능을 고려해 볼 수 있습니다.
- 충돌 해결 방법
- 멀티 마스터 및 양방향 복제
- 시퀀스 포함
- 전환 및 장애 조치 절차