pg_createsubscriber

pg_createsubscriber — 물리적 복제본을 새로운 논리적 롤 토토본으로 변환

시놉시스

pg_createsubscriber [옵션...] { -d | --데이터베이스 }db이름 { -D | --pgdata }datadir { -P | --게시자-서버 }connstr

설명

pg_createsubscriber물리적 대기 서버에서 새 논리적 롤 토토본을 생성합니다. 지정된 데이터베이스의 모든 테이블은에 포함됩니다.PostgreSQL : 문서 : 18 : 29 장. 논리적 스포츠 토토설정. 각 데이터베이스에 대해 한 쌍의 게시 및 구독 개체가 생성됩니다. 대상 서버에서 실행되어야 합니다.

성공적인 실행 후 대상 서버의 상태는 새로운 논리적 롤 토토 설정과 유사합니다. 논리적 롤 토토 설정과의 주요 차이점은 다음과 같습니다.pg_createsubscriber데이터 동기화가 수행되는 방식입니다.pg_createsubscriber초기 테이블 데이터를 복사하지 않습니다. 각 테이블이 동기화된 상태가 되도록 보장하는 동기화 단계만 수행합니다.

pg_createsubscriber논리적 롤 토토 설정에서 대부분의 시간이 초기 데이터 복사에 소비되기 때문에 대규모 데이터베이스 시스템을 대상으로 합니다. 또한 데이터를 동기화하는 데 이렇게 오랜 시간이 걸리면 일반적으로 적용할 변경 사항(초기 데이터 복사 중에 생성됨)이 많아져 논리적 롤 토토본을 사용할 수 있는 시간이 훨씬 더 늘어납니다. 소규모 데이터베이스의 경우 초기 데이터 동기화를 통해 논리적 롤 토토를 설정하는 것이 좋습니다. 자세한 내용은 다음을 참조하세요.구독 작성 copy_data옵션.

옵션

pg_createsubscriber다음 명령줄 인수를 허용합니다:

-a
--모두

대상 서버의 데이터베이스당 하나의 구독을 생성하십시오. 템플릿 데이터베이스와 연결을 허용하지 않는 데이터베이스는 예외입니다. 모든 데이터베이스 목록을 검색하려면에 지정된 데이터베이스 이름을 사용하여 원본 서버에 연결합니다.--게시자-서버연결 문자열 또는 지정되지 않은 경우포스트그레데이터베이스가 사용되거나 데이터베이스가 존재하지 않는 경우,템플릿1사용됩니다. 이 옵션을 지정하면 구독, 게시 및 복제 슬롯에 대해 자동으로 생성된 이름이 사용됩니다. 이 옵션은와 함께 사용할 수 없습니다.--데이터베이스, --출판, --롤 토토 슬롯또는--구독.

-ddb이름
--데이터베이스=DB이름

구독을 생성할 데이터베이스의 이름. 여러 데이터베이스를 작성하여 여러 데이터베이스를 선택할 수 있습니다-d스위치. 이 옵션은와 함께 사용할 수 없습니다.-a. 만일-d옵션이 제공되지 않았습니다. 데이터베이스 이름은 다음에서 가져옵니다.-P옵션. 데이터베이스 이름이 다음 중 하나에 지정되지 않은 경우-d옵션 또는-P옵션 및-a옵션이 지정되지 않으면 오류가 보고됩니다.

-D디렉토리
--pgdata=디렉토리

물리적 롤 토토본의 클러스터 디렉터리를 포함하는 대상 디렉터리.

-n
--시험 실행

실제로 대상 디렉토리를 수정하는 것을 제외한 모든 작업을 수행하십시오.

-p포트
--구독자-포트=포트

대상 서버가 연결을 수신하고 있는 포트 번호입니다. 의도하지 않은 클라이언트 연결을 방지하기 위해 기본적으로 포트 50432에서 대상 서버를 실행합니다.

-Pconnstr
--게시자-서버=connstr

게시자에 대한 연결 문자열입니다. 자세한 내용은 참조섹션 32.1.1.

-sdir
--socketdir=dir

대상 서버의 포스트마스터 소켓에 사용할 디렉토리. 기본값은 현재 디렉터리입니다.

-t
--복구-시간 초과=

복구가 끝날 때까지 기다리는 최대 시간(초)입니다. 0으로 설정하면 비활성화됩니다. 기본값은 0입니다.

-T
--2단계 활성화

활성화two_phase구독을 커밋합니다. 여러 데이터베이스가 지정된 경우 이 옵션은 해당 데이터베이스에 생성된 모든 구독에 균일하게 적용됩니다. 기본값은거짓.

-U사용자 이름
--구독자-사용자 이름=사용자 이름

대상 서버에서 연결할 사용자 이름입니다. 기본값은 현재 운영 체제 사용자 이름입니다.

-v
--상세

상세 모드를 활성화합니다. 이로 인해 발생합니다pg_createsubscriber진행 메시지와 각 단계에 대한 자세한 정보를 표준 오류로 출력합니다. 옵션을 반복하면 표준 오류에 추가 디버그 수준 메시지가 나타납니다.

--깨끗함=객체 유형

대상 서버의 지정된 데이터베이스에서 지정된 유형의 모든 개체를 삭제합니다.

  • 출판물: 그모든 테이블에 대해이 가입자를 위해 설립된 출판물은 항상 삭제됩니다. 이 개체 유형을 지정하면 원본 서버에서 복제된 다른 모든 게시도 삭제됩니다.

삭제되도록 선택한 개체는 다음을 포함하여 개별적으로 기록됩니다.--시험 실행. 선택한 개체의 삭제에 영향을 주거나 중지할 수 있는 기회가 없으므로 다음을 사용하여 해당 개체를 백업하는 것이 좋습니다.pg_dump.

--구성 파일=파일 이름

대상 데이터 디렉토리에 대해 지정된 기본 서버 구성 파일을 사용하십시오.pg_createsubscriber내부적으로 다음을 사용합니다pg_ctl대상 서버를 시작하고 중지하는 명령입니다. 실제를 지정할 수 있습니다.postgresql.conf구성 파일이 데이터 디렉토리 외부에 저장된 경우.

--출판=이름

논리적 롤 토토를 설정하기 위한 게시 이름. 여러 출판물을 작성하여 여러 출판물을 지정할 수 있습니다--출판스위치. 게시 이름 수는 지정된 데이터베이스 수와 일치해야 합니다. 그렇지 않으면 오류가 보고됩니다. 여러 게시 이름 스위치의 순서는 데이터베이스 스위치의 순서와 일치해야 합니다. 이 옵션을 지정하지 않으면 생성된 이름이 게시 이름에 할당됩니다. 이 옵션은와 함께 사용할 수 없습니다.--모두.

--롤 토토 슬롯=이름

논리적 롤 토토를 설정하기 위한 복제 슬롯 이름입니다. 여러 개의 복제 슬롯을 작성하여 여러 개 지정할 수 있습니다.--롤 토토 슬롯스위치. 복제 슬롯 이름의 수는 지정된 데이터베이스 수와 일치해야 하며, 그렇지 않으면 오류가 보고됩니다. 다중 복제 슬롯 이름 스위치의 순서는 데이터베이스 스위치의 순서와 일치해야 합니다. 이 옵션을 지정하지 않으면 복제 슬롯 이름에 구독 이름이 할당됩니다. 이 옵션은와 함께 사용할 수 없습니다.--모두.

--구독=이름

논리적 롤 토토를 설정하기 위한 구독 이름. 여러 개의 구독을 작성하여 여러 구독을 지정할 수 있습니다.--구독스위치. 구독 이름의 수는 지정된 데이터베이스의 수와 일치해야 합니다. 그렇지 않으면 오류가 보고됩니다. 여러 구독 이름 스위치의 순서는 데이터베이스 스위치의 순서와 일치해야 합니다. 이 옵션을 지정하지 않으면 생성된 이름이 구독 이름에 할당됩니다. 이 옵션은와 함께 사용할 수 없습니다.--모두.

-V
--버전

인쇄pg_createsubscriber버전 및 종료.

-?
--도움말

다음에 관한 도움말 보기pg_createsubscriber명령줄 인수 및 종료.

참고

전제조건

다음에는 몇 가지 전제 조건이 있습니다.pg_createsubscriber대상 서버를 논리적 롤 토토본으로 변환합니다. 이러한 사항이 충족되지 않으면 오류가 보고됩니다. 원본 및 대상 서버에는 동일한 주 버전이 있어야 합니다.pg_createsubscriber. 지정된 대상 데이터 디렉터리에는 소스 데이터 디렉터리와 동일한 시스템 식별자가 있어야 합니다. 대상 데이터 디렉터리에 대해 지정된 데이터베이스 사용자는 생성 권한이 있어야 합니다.PostgreSQL : 문서 : 18 : 스포츠 토토 사이트 생성및 사용 중pg_replication_origin_advance().

대상 서버는 물리적 대기 서버로 사용되어야 합니다. 대상 서버에는 다음이 있어야 합니다.max_active_replication_originsmax_logical_replication_workers지정된 데이터베이스 수보다 크거나 같은 값으로 구성되었습니다. 대상 서버에는 다음이 있어야 합니다.max_worker_processes지정된 데이터베이스 수보다 큰 값으로 구성되었습니다. 대상 서버는 로컬 연결을 허용해야 합니다. 다음을 사용할 계획이라면--2단계 활성화전환하면 다음도 설정해야 합니다max_prepared_transactions적절하게.

원본 서버는 대상 서버의 연결을 수락해야 합니다. 원본 서버가 복구 중이어서는 안 됩니다. 원본 서버에는 다음이 있어야 합니다.wal_levelas논리적. 원본 서버에는 다음이 있어야 합니다.max_replication_slots지정된 데이터베이스 수에 기존 복제 슬롯을 더한 수보다 크거나 같은 값으로 구성되었습니다. 원본 서버에는 다음이 있어야 합니다.max_wal_senders지정된 데이터베이스 및 기존 WAL 발신자 프로세스 수보다 크거나 같은 값으로 구성되었습니다.

경고

만약pg_createsubscriber대상 서버가 승격된 후 실패하면 데이터 디렉토리가 복구할 수 있는 상태가 아닐 가능성이 높습니다. 이러한 경우에는 새로운 대기 서버를 생성하는 것이 좋습니다.

pg_createsubscriber일반적으로 변환 중에 다른 연결 설정으로 대상 서버를 시작합니다. 따라서 대상 서버에 대한 연결이 실패해야 합니다.

DDL 명령은 논리적 롤 토토에 의해 복제되지 않으므로 실행 중에 데이터베이스 스키마를 변경하는 DDL 명령을 실행하지 마십시오.pg_createsubscriber. 대상 서버가 이미 논리적 롤 토토본으로 변환된 경우 DDL 명령이 복제되지 않아 오류가 발생할 수 있습니다.

만약pg_createsubscriber22305_22613

롤 토토를 사용하는 경우primary_slot_name, 논리적 롤 토토 설정 후 원본 서버에서 제거됩니다.

대상 서버가 동기 롤 토토본인 경우 기본 서버의 트랜잭션 커밋은 실행 중에 롤 토토를 기다릴 수 있습니다.pg_createsubscriber.

다음이 아니면--2단계 활성화스위치가 지정되었습니다.pg_createsubscriber2단계 커밋이 비활성화된 논리적 롤 토토를 설정합니다. 이는 준비된 모든 트랜잭션이 다음 시점에 복제된다는 것을 의미합니다.커밋 준비됨, 사전 준비 없이. 설정이 완료되면 다음을 사용하여 수동으로 구독을 삭제하고 다시 만들 수 있습니다.two_phase옵션이 활성화되었습니다.

pg_createsubscriber다음을 사용하여 시스템 식별자를 변경합니다.pg_resetwal. 그러면 대상 서버가 원본 서버의 WAL 파일을 사용할 수 있는 상황을 피할 수 있습니다. 대상 서버에 대기 서버가 있는 경우 롤 토토가 중단되고 새로운 대기 서버가 생성되어야 합니다.

필요한 WAL 파일이 누락된 경우 복제 실패가 발생할 수 있습니다. 이를 방지하려면 원본 서버에서 다음을 설정해야 합니다.max_slot_wal_keep_size-1필요한 WAL 파일이 조기에 제거되지 않도록 합니다.

작동 방식

기본 아이디어는 원본 서버에서 복제 시작 지점을 갖고 이 지점에서 시작하도록 논리적 롤 토토를 설정하는 것입니다:

  1. 지정된 명령줄 옵션으로 대상 서버를 시작합니다. 대상 서버가 이미 실행 중인 경우,pg_createsubscriber오류로 인해 종료됩니다.

  2. 대상 서버를 변환할 수 있는지 확인하세요. 원본 서버에 대한 몇 가지 검사도 있습니다. 전제 조건 중 하나라도 충족되지 않는 경우,pg_createsubscriber오류로 인해 종료됩니다.

  3. 소스 서버에 지정된 각 데이터베이스에 대한 게시 및 복제 슬롯을 생성하십시오. 각 출판물은 다음을 사용하여 생성됩니다.모든 테이블에 대해. 만약--출판옵션이 지정되지 않았습니다. 게시에는 다음과 같은 이름 패턴이 있습니다.pg_createsubscriber_%u_%x(매개변수: 데이터베이스oid, 무작위int). 만약--롤 토토 슬롯옵션이 지정되지 않은 경우 복제 슬롯의 이름 패턴은 다음과 같습니다.pg_createsubscriber_%u_%x(매개변수: 데이터베이스oid, 무작위int). 이러한 복제 슬롯은 이후 단계의 구독에서 사용됩니다. 마지막 복제 슬롯 LSN은 다음에서 중지 지점으로 사용됩니다.recovery_target_lsn매개변수 및 구독을 복제 시작점으로 사용합니다. 거래가 손실되지 않음을 보장합니다.

  4. 복구 매개변수를 대상 데이터 디렉토리에 기록하고 대상 서버를 다시 시작하십시오. LSN을 지정합니다(recovery_target_lsn26778_26867홍보복구 대상에 도달한 후 서버가 수행해야 하는 작업입니다. 추가복구 매개변수일관된 상태에 도달하자마자 복구가 종료되는 등(복제 시작 위치까지 WAL이 적용되어야 함) 장애를 일으킬 수 있는 여러 복구 대상과 같은 복구 프로세스 중 예기치 않은 동작을 방지하기 위해 추가됩니다. 서버가 대기 모드를 종료하고 읽기-쓰기 트랜잭션을 수락하면 이 단계가 완료됩니다. 만일--복구 시간 초과옵션이 설정되었습니다.pg_createsubscriber주어진 시간(초)까지 복구가 종료되지 않으면 종료됩니다.

  5. 대상 서버에 지정된 각 데이터베이스에 대한 구독을 생성하십시오. 만약--구독옵션이 지정되지 않았습니다. 구독의 이름 패턴은 다음과 같습니다.pg_createsubscriber_%u_%x(매개변수: 데이터베이스oid, 무작위int). 원본 서버의 기존 데이터를 복사하지 않습니다. 복제 슬롯을 생성하지 않습니다. 대신 이전 단계에서 생성된 복제 슬롯을 사용합니다. 구독이 생성되었지만 아직 활성화되지 않았습니다. 그 이유는 복제를 시작하기 전에 복제 진행을 복제 시작점으로 설정해야 하기 때문입니다.

  6. 복제 시작 위치 이전에 생성되었기 때문에 복제된 대상 서버의 발행물을 삭제하십시오. 구독자에게는 아무 소용이 없습니다.

  7. 복제 진행률을 각 구독의 복제 시작점으로 설정합니다. 대상 서버가 복구 프로세스를 시작하면 복제 시작 지점을 따라잡습니다. 이는 각 구독의 초기 복제 위치로 사용되는 정확한 LSN입니다. 복제 원본 이름은 구독이 생성된 이후 획득됩니다. 복제 원본 이름과 복제 시작 지점이 사용됩니다.pg_replication_origin_advance()초기 롤 토토 위치를 설정합니다.

  8. 대상 서버의 지정된 각 데이터베이스에 대한 구독을 활성화합니다. 구독은 복제 시작점부터 트랜잭션 적용을 시작합니다.

  9. 대기 서버가 다음을 사용하고 있는 경우기본_슬롯_이름, 이제부터 쓸모가 없으니 버려라.

  10. 대기 서버에 다음이 포함된 경우장애 조치 롤 토토 슬롯, 더 이상 동기화할 수 없으므로 삭제하세요.

  11. 대상 서버의 시스템 식별자를 업데이트하십시오.pg_resetwal시스템 식별자를 수정하기 위해 실행됩니다. 대상 서버가 다음과 같이 중지되었습니다.pg_resetwal요구사항.

데이터베이스에 대한 논리적 롤 토토본을 생성하려면시간그리고금융실제 롤 토토본에서foo:

$ pg_createsubscriber -D /usr/local/pgsql/data -P "host=foo" -d hr -d Finance

또한 참조

pg_basebackup

수정사항 제출

문서에 올바르지 않은 내용이 있으면 일치하지 않습니다. 특정 기능에 대한 경험이 있거나 추가 설명이 필요한 경우 이용해주세요이 양식문서 문제를 보고합니다.