pg_createsubscriber

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

시놉시스

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

설명

pg_createsubscriber물리적 대기 서버에서 새 논리적 범퍼카 토토본을 생성합니다. 지정된 데이터베이스의 모든 테이블은에 포함됩니다.PostgreSQL : 문서 : 17 : 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 : 문서 : 17 : 메이저 토토 사이트 생성및 사용 중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

수정사항 제출

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