마이그레이션논리 복제 클러스터기존 논리 복제 클러스터의 모든 멤버가 버전 17.0 이상인 경우에만 가능합니다.
pg_upgrade논리 슬롯을 마이그레이션하려는 시도. 이를 통해 새 게시자의 동일한 논리 슬롯을 수동으로 정의 할 필요가 없습니다. 논리 슬롯의 마이그레이션은 이전 클러스터가 버전 17.0 이상인 경우에만 지원됩니다. 버전 17.0 이전의 클러스터의 논리 슬롯은 조용히 무시됩니다.
게시자 클러스터 업그레이드를 시작하기 전에 가입이 일시적으로 비활성화되어 있는지 확인하여구독 변경 ... 비활성화
. 업그레이드 후 구독을 다시 활성화합니다.
전제 조건이 있습니다.pg_upgrade논리 슬롯을 업그레이드 할 수 있습니다. 이것들이 충족되지 않으면 오류 가보고됩니다.
새 클러스터에는Wal_level
as논리
.
새 클러스터에는max_replication_slots
이전 클러스터에 존재하는 슬롯 수와 같은 값으로 구성되었습니다.
이전 클러스터의 슬롯에서 참조 된 출력 플러그인은 새 PostgreSQL 실행 파일 디렉토리에 설치해야합니다.
이전 클러스터는 모든 트랜잭션과 논리적 디코딩 메시지를 가입자에게 복제했습니다.
이전 클러스터의 모든 슬롯을 사용할 수 있어야합니다. 즉, 슬롯이 없습니다젠 토토 PostgreSQL : 문서.충돌
true
.
새 클러스터에는 영구적 인 논리 슬롯이 없어야합니다. 즉, 슬롯이 없어야합니다젠 토토 PostgreSQL : 문서.임시
isfalse
.
설정가입자 구성새 가입자에서.pg_upgrade구독 의존성을 마이그레이션하려는 시도는 가입의 종속성을 포함 시켜서젠 토토 : 문서 : 18 : 52시스템 카탈로그 및 구독의 복제 원점. 이를 통해 새 가입자의 논리적 복제는 이전 구독자가 최대의 위치에서 계속 될 수 있습니다. 구독 종속성의 마이그레이션은 이전 클러스터가 버전 17.0 이상인 경우에만 지원됩니다. 버전 17.0 이전의 클러스터에 대한 구독 종속성은 조용히 무시됩니다.
몇 가지 전제 조건이 있습니다pg_upgrade구독을 업그레이드 할 수 있습니다. 이것들이 충족되지 않으면 오류 가보고됩니다.
기존 가입자의 모든 구독 테이블은 상태에 있어야합니다i
(초기화) 또는r
(준비). 이것은 확인하여 확인할 수 있습니다젠 토토 : 문서 : 18 : 52.srsubstate
.
각 구독에 해당하는 복제 원본 항목은 이전 클러스터에 존재해야합니다. 확인을 통해 찾을 수 있습니다사설 토토 사이트 : 문서 :and토토 사이트 순위 : 문서 : 18 :시스템 테이블.
새 클러스터에는max_active_replication_origins
이전 클러스터에 존재하는 구독 수와 같은 값으로 구성되었습니다.
가입자를 업그레이드하는 동안 게시자에서 쓰기 작업을 수행 할 수 있습니다. 가입자 업그레이드가 완료되면 이러한 변경 사항이 가입자에게 복제됩니다.
논리적 복제 제한은 논리적 복제 클러스터 업그레이드에도 적용됩니다. 보다와이즈 토토 : 문서 : 18 : 29.8. 제한자세한 내용.
게시자 업그레이드의 전제 조건은 논리 복제 클러스터 업그레이드에도 적용됩니다. 보다섹션 29.13.1자세한 내용.
가입자 업그레이드의 전제 조건은 논리 복제 클러스터 업그레이드에도 적용됩니다. 보다섹션 29.13.2자세한 내용.
논리적 복제 클러스터 업그레이드는 다양한 노드에서 여러 단계를 수행해야합니다. 모든 작업이 트랜잭션이 아니기 때문에 사용자는에 설명 된대로 백업을 수행하는 것이 좋습니다.섹션 25.3.2.
다음 논리적 복제 클러스터를 업그레이드하는 단계는 다음과 같습니다.
지정된 단계에 따라섹션 29.13.3.12 노드 논리 복제 클러스터를 업그레이드하려면
지정된 단계에 따라섹션 29.13.3.2계단식 논리 복제 클러스터를 업그레이드하려면
지정된 단계에 따라섹션 29.13.3.32 노드 원형 논리 복제 클러스터를 업그레이드하려면
게시자가되었다고 가정 해 봅시다node1
가입자가node2
. 가입자node2
구독sub1_node1_node2
|node1
.
모든 구독 비활성화node2
에서 변경 사항을 구독하는node1
사용하여구독 변경 ... 비활성화
, 예 :
/ * node2 # */ Alter 구독 sub1_node1_node2 비활성화;
게시자 서버 중지에서node1
, 예 :
PG_CTL -D/OPT/스포츠 토토 베트맨/DATO1 STOP
초기화data1_upgraded
필요한 최신 버전을 사용하여 인스턴스.
게시자 업그레이드node1
의 서버에 필요한 최신 버전의 서버 (예 :
pg_upgrade -old-datadir "/opt/postgresql/postgres/17/data1" -New-datadir "/opt/postgresql/postgres/18/data1_upgraded" --old-bindir "/opt/postgresql/postgres/17/bin" -New-Bindir "/opt/postgresql/postgres/18/bin"
업그레이드 된 게시자 서버 시작node1
, 예 :
pg_ctl -d/opt/postgresql/data1_upgraded -l logfile
가입자 서버 중지에서node2
, 예 :
pg_ctl -d/opt/스포츠 토토 베트맨/dato2 stop
초기화data2_upgraded
필요한 최신 버전을 사용하여 인스턴스.
가입자 업그레이드node2
의 서버가 필요한 새 버전으로의 서버 (예 :
pg_upgrade -old-datadir "/opt/postgresql/postgres/17/date2" -New-datadir "/opt/postgresql/postgres/18/data2_upgraded" --old-bindir "/opt/postgresql/postgres/17/bin" -New-Bindir "/opt/postgresql/postgres/18/bin"
업그레이드 된 가입자 서버 시작node2
, 예 :
pg_ctl -d/opt/postgresql/data2_upgraded -l logfile
onnode2
, 업그레이드 된 게시자에서 생성 된 테이블을 만듭니다node1
서버 간1 단계그리고 지금, 예 :
/ * node2 # */ 테이블 분배기 생성 (정수 기본 키, 이름 varchar (40));
모든 구독 활성화node2
|node1
사용하여구독 변경 ... 활성화
, 예 :
/ * node2 # */ Alter Sub1_node1_node2 enable;
새로 고침node2
구독의 간행물 사용구독 변경 ... 새로 고침 출판
, 예 :
/ * node2 # */ Alter 구독 sub1_node1_node2 새로 고침;
위에서 설명한 단계에서 게시자는 먼저 업그레이드 한 다음 가입자가 이어집니다. 또는 사용자는 유사한 단계를 사용하여 구독자를 먼저 업그레이드 한 다음 게시자를 업그레이드 할 수 있습니다.
계단식 논리 복제 설정이 있다고 가정 해 봅시다node1
-node2
-node3
. 여기node2
에서 변경 사항을 구독하고 있습니다node1
andnode3
에서 변경 사항을 구독하고 있습니다node2
. 그만큼node2
구독sub1_node1_node2
|node1
. 그만큼node3
구독sub1_node2_node3
|node2
.
모든 구독 비활성화node2
에서 변경 사항을 구독하는node1
사용하여구독 변경 ... 비활성화
, 예 :
/ * node2 # */ Alter 구독 sub1_node1_node2 비활성화;
서버 중지에서node1
, 예 :
pg_ctl -d/opt/스포츠 토토 베트맨/dato1 stop
초기화data1_upgraded
필요한 최신 버전을 사용하여 인스턴스.
업그레이드node1
의 서버가 필요한 새로운 버전으로의 서버 (예 :
pg_upgrade -old-datadir "/opt/postgresql/postgres/17/data1" -New-datadir "/opt/postgresql/postgres/18/data1_upgraded" --old-bindir "/opt/postgresql/postgres/17/bin" -New-Bindir "/opt/postgresql/postgres/18/bin"
업그레이드 된 서버 시작node1
, 예 :
pg_ctl -d/opt/postgresql/data1_upgraded start -l logfile
모든 구독 비활성화node3
에서 변경 사항을 구독하는node2
사용하여구독 변경 ... 비활성화
, 예 :
/ * node3 # */ Alter Subscription sub1_node2_node3 비활성화;
서버 중지에서node2
, 예 :
pg_ctl -d/opt/스포츠 토토 베트맨/dato2 stop
초기화data2_upgraded
필요한 최신 버전을 사용하여 인스턴스
업그레이드node2
의 서버에 필요한 새 버전 (예 :
pg_upgrade -old-datadir "/opt/postgresql/postgres/17/date2" -New-datadir "/opt/postgresql/postgres/18/data2_upgraded" --old-bindir "/opt/postgresql/postgres/17/bin" -New-Bindir "/opt/postgresql/postgres/18/bin"
업그레이드 된 서버 시작node2
, 예 :
pg_ctl -d/opt/postgresql/data2_upgraded start -l logfile
onnode2
, 업그레이드 된 게시자에서 작성된 테이블을 만듭니다node1
Server 간1 단계그리고 지금, 예 :
/ * node2 # */ 테이블 분배기 생성 (정수 기본 키, 이름 varchar (40));
모든 구독 활성화node2
|node1
사용하여구독 변경 ... 활성화
, 예 :
/ * node2 # */ Alter 구독 sub1_node1_node2 enable;
새로 고침node2
구독의 간행물 사용구독 변경 ... 새로 고침 출판
, 예 :
/ * node2 # */ Alter Subscription sub1_node1_node2 새로 고침;
서버 중지에서node3
, 예 :
pg_ctl -d/opt/스포츠 토토 베트맨/data3 stop
초기화data3_upgraded
필요한 최신 버전을 사용하여 인스턴스.
업그레이드node3
의 서버에 필요한 새 버전 (예 : 서버
pg_upgrade -old-datadir "/opt/postgresql/postgres/17/data3" -New-datadir "/opt/postgresql/postgres/18/data3_upgraded" --old-bindir "/opt/postgresql/postgres/17/bin" -New-Bindir "/opt/postgresql/postgres/18/bin"
업그레이드 된 서버 시작node3
, 예 :
pg_ctl -d/opt/postgresql/data3_upgraded start -l logfile
onnode3
, 업그레이드 된 상태에서 생성 된 테이블을 만듭니다node2
사이6 단계그리고 지금, 예 :
/ * node3 # */ 테이블 분배기 생성 (정수 기본 키, 이름 varchar (40));
모든 구독 활성화node3
|node2
사용하여구독 변경 ... 활성화
, 예 :
/ * node3 # */ Alter Subscription sub1_node2_node3 enable;
새로 고침node3
구독의 간행물 사용구독 변경 ... 새로 고침 출판
, 예 :
/ * node3 # */ Alter Subscription sub1_node2_node3 새로 고침 출판;
원형 논리 복제 설정이 있다고 가정 해 봅시다node1
-node2
andnode2
-node1
. 여기node2
에서 변경 사항을 구독하고 있습니다node1
andnode1
|node2
. 그만큼node1
구독sub1_node2_node1
|node2
. 그만큼node2
구독sub1_node1_node2
이 변경 사항을 구독하는node1
.
모든 구독 비활성화node2
에서 변경 사항을 구독하는node1
사용하여구독 변경 ... 비활성화
, 예 :
/ * node2 # */ Alter 구독 sub1_node1_node2 비활성화;
서버 중지node1
, 예 :
pg_ctl -d/opt/스포츠 토토 베트맨/data1 stop
초기화data1_upgraded
필요한 최신 버전을 사용하여 인스턴스.
업그레이드node1
의 서버에 필요한 최신 버전 (예 :
pg_upgrade -old-datadir "/opt/postgresql/postgres/17/data1" -New-datadir "/opt/postgresql/postgres/18/data1_upgraded" --old-bindir "/opt/postgresql/postgres/17/bin" -New-Bindir "/opt/postgresql/postgres/18/bin"
업그레이드 된 서버 시작node1
, 예 :
PG_CTL -D/OPT/스포츠 토토 베트맨/DATA1_UPGRADED 시작 -L LOGFILE
모든 구독 활성화node2
에서 변경 사항을 구독하는node1
사용하여구독 변경 ... 활성화
, 예 :
/ * node2 # */ Alter 구독 sub1_node1_node2 enable;
onnode1
,에서 만들어진 테이블 만들기node2
사이1 단계그리고 지금, 예 :
/ * node1 # */ 테이블 분배기 생성 (정수 기본 키, 이름 varchar (40));
새로 고침node1
초기 테이블 데이터를 복사하기위한 구독의 간행물node2
사용구독 대체 ... 새로 고침 출판
, 예 :
/ * node1 # */ Alter Subscription sub1_node2_node1 새로 고침 출판;
모든 구독 비활성화node1
|node2
사용하여구독 변경 ... 비활성화
, 예 :
/ * node1 # */ Alter Subscription sub1_node2_node1 비활성화;
서버 중지에서node2
, 예 :
PG_CTL -D/OPT/스포츠 토토 베트맨/DATE2 STOP
초기화data2_upgraded
필요한 최신 버전을 사용하여 인스턴스.
업그레이드node2
의 서버에 필요한 새 버전 (예 :
pg_upgrade -old-datadir "/opt/postgresql/postgres/17/date2" -New-datadir "/opt/postgresql/postgres/18/data2_upgraded" --old-bindir "/opt/postgresql/postgres/17/bin" -New-Bindir "/opt/postgresql/postgres/18/bin"
업그레이드 된 서버 시작node2
, 예 :
pg_ctl -d/opt/postgresql/data2_upgraded start -l logfile
모든 구독 활성화node1
에서 변경 사항을 구독하는node2
사용하여구독 변경 ... 활성화
, 예 :
/ * node1 # */ Alter Sub1_node2_node1 enable;
onnode2
, 업그레이드 된 상태에서 작성된 테이블을 만듭니다node1
사이9 단계그리고 지금, 예 :
/ * node2 # */ 테이블 분배기 생성 (정수 기본 키, 이름 varchar (40));
새로 고침node2
초기 테이블 데이터를 복사하기위한 구독의 간행물node1
사용구독 변경 ... 새로 고침 출판
, 예 :
/ * node2 # */ Alter Subscription sub1_node1_node2 새로 고침 출판;