PostgreSQL 데이터베이스 크로스 버 전 업그레이드 상용 방안 분석

upgrade
안녕하세요,저 는 기술 만 이야기 하고 머리 를 자 르 지 않 는 토 니 선생님 입 니 다.기업 의 경우 데이터베이스 시스템 을 새로운 버 전 으로 업그레이드 하면 더 좋 은 성능,더 많은 기능,최신 보안 패 치 와 오류 복구 등 을 얻 을 수 있다.따라서 본 고 는 PostgreSQL 데이터베이스 버 전 업그레이드 의 3 가지 상용 방안 을 소개 한다.
업그레이드 방안 개요
PostgreSQL 버 전 번 호 는 주요 버 전과 부차적인 버 전 으로 구성 되 어 있 습 니 다.예 를 들 어 PostgreSQL 12.4 의 12 는 주요 버 전이 고 4 는 부차적인 버 전이 다.PostgreSQL 10.0 이전 버 전 은 3 개의 숫자 로 구성 되 었 는데 예 를 들 어 9.6.19 이 고 그 중에서 9.6 은 주요 버 전 이 며 19 는 부차적인 버 전 이다.
부차적인 버 전 을 발표 하 는 것 은 메모리 의 저장 형식 을 바 꾸 지 않 기 때문에 항상 같은 주요 버 전과 호 환 됩 니 다.예 를 들 어 PostgreSQL 12.4 와 PostgreSQL 12.0 및 후속 PostgreSQL 12.x 호 환.이러한 호 환 버 전의 업 그 레이 드 는 매우 간단 합 니 다.데이터베이스 서 비 스 를 닫 고 바 이 너 리 를 교체 할 수 있 는 실행 가능 한 파일 을 설치 하고 서 비 스 를 다시 시작 하면 됩 니 다.
그 다음 에 우 리 는 주로 PostgreSQL 의 크로스 버 전 업그레이드 문 제 를 토론 합 니 다.예 를 들 어 PostgreSQL 12.x 에서 PostgreSQL 13.y 로 업그레이드 합 니 다.주요 버 전의 업 그 레이 드 는 내부 데이터 의 저장 형식 을 수정 할 수 있 으 므 로 추가 작업 이 필요 합 니 다.자주 사용 하 는 버 전 업그레이드 방법 과 적용 장면 은 다음 과 같다.
업그레이드 방법
적용 필드
정지 시간
논리 백업 및 복원
중 소형 데이터베이스,예 를 들 어 100 GB 이하
크로스 플랫폼 데이터 이전 지원
데이터베이스 크기 에 달 려 있 습 니 다.
pg_업그레이드 도구
대형 데이터베이스,예 를 들 어 100 GB 이상
본 기 계 는 현지에서 업그레이드 합 니 다.
몇 분
논리 복제
대형 데이터베이스,예 를 들 어 100 GB 이상
크로스 플랫폼 지원
몇 초
 네,그렇습니다.
📝제조 업 체 가 제공 하 는 PostgreSQL 맞 춤 형 버 전 을 사용 하면 그들 이 제공 하 는 도 구 를 통 해 버 전 업 그 레이 드 를 실현 하고 관련 문 서 를 구체 적 으로 참고 할 수 있 습 니 다.
주의사항:주요 버 전 업 그 레이 드 를 통 해 사용자 가 볼 수 있 는 불 호환성 을 초래 할 수 있 으 므 로 응용 프로그램 은 해당 하 는 수정 이 필요 할 수 있 습 니 다.구체 적 인 변 화 는 발행 설명,특히'Migration'부분의 내용 을 참고 할 수 있다.여러 주요 버 전 을 넘 어 업그레이드 하려 면 중간 버 전의 발행 설명 을 읽 어야 한다.
논리 백업 및 복원 을 통 해 업그레이드
전통 적 인 버 전 업그레이드 방법 이용 pgdump/pg_dumpall 논리 백업 으로 데이터 베 이 스 를 내 보 내 고 새 버 전에 서 pg복원이전 버 전 데이터 베 이 스 를 내 보 낼 때 새 버 전의 pg 를 추천 합 니 다.dump/pg_dumpall 도 구 는 최신 병렬 내 보 내기 와 복원 기능 을 이용 하여 데이터베이스 팽창 문 제 를 줄 일 수 있 습 니 다.
논리 백업 과 복원 은 매우 간단 하지만 속도 가 느 리 고 정지 시간 은 데이터 뱅 크 의 크기 에 달 려 있 기 때문에 중 소형 데이터 뱅 크 의 업그레이드 에 적합 하 다.
현재 PostgreSQL 소프트웨어 의 설치 디 렉 터 리 가/usr/local/pgsql 에 있 고 데이터 디 렉 터 리 가/usr/local/pgsql/data 에 있 으 면 같은 서버 에서 업 그 레이 드 됩 니 다.
논리 백업 을 실행 하기 전에 프로그램 을 중단 하고 데이터 업데이트 가 없 는 지 확인 합 니 다.백업 이 시 작 된 후 업데이트 가 내 보 내지 않 기 때 문 입 니 다.필요 하 다 면/usr/local/pgsql/data/pg 를 수정 할 수 있 습 니 다.hba.conf 파일 은 다른 사람 이 데이터베이스 에 접근 하 는 것 을 금지 합 니 다.
그리고 데이터 베 이 스 를 백업 합 니 다:

pg_dumpall > outputfile
새 버 전의 PostgreSQL 이 설치 되 어 있다 면 새 버 전의 pg 를 사용 할 수 있 습 니 다.dumpall 명령 으로 이전 버 전 데이터 베 이 스 를 백업 합 니 다.
이전 버 전의 배경 서 비 스 를 중단 합 니 다:

pg_ctl stop
다른 방식 으로 백 스테이지 서 비 스 를 중단 하거나
설치 디 렉 터 리 에 특정 버 전 표지 가 포함 되 어 있 지 않 으 면 디 렉 터 리 이름 을 바 꿀 수 있 고 필요 할 때 다시 수정 할 수 있 습 니 다.다음 과 같은 명령 으로 디 렉 터 리 이름 을 바 꿀 수 있 습 니 다.

mv /usr/local/pgsql /usr/local/pgsql.old
새 버 전의 PostgreSQL 소프트웨어 를 설치 합 니 다.설치 디 렉 터 리 가/usr/local/pgsql 이면.
새로운 데이터베이스 클 러 스 터 를 초기 화 하려 면 데이터베이스 전용 사용 자 를 사용 해 야 합 니 다(보통 postgres 입 니 다.업그레이드 버 전이 라면 이 사용자 가 이미 존재 할 것 입 니 다)실행 작업:

/usr/local/pgsql/bin/initdb -D /usr/local/pgsql/data
이전 버 전 프로필 pghba.conf 와 postgresql.conf 등의 변경 사항 은 해당 하 는 새 프로필 에서 다시 수정 합 니 다.
데이터베이스 전용 사용자 로 새 버 전의 배경 서 비 스 를 시작 합 니 다:

 /usr/local/pgsql/bin/postgres -D /usr/local/pgsql/data
마지막 으로 새 버 전의 psql 명령 을 이용 하여 데 이 터 를 복원 합 니 다:

/usr/local/pgsql/bin/psql -d postgres -f outputfile
정지 시간 을 줄 이기 위해 새 버 전의 PostgreSQL 을 다른 디 렉 터 리(예:/usr/local/pgsql-13)에 설치 하고 서로 다른 포트 로 서 비 스 를 시작 할 수 있 습 니 다.그리고 데이터베이스 내 보 내기 와 가 져 오 기 를 동시에 실행 합 니 다:

pg_dumpall -p 5432 | psql -d postgres -p 5433
상기 작업 을 수행 할 때 신 구 버 전의 백 스테이지 서 비 스 는 동시에 실행 되 고 새 버 전 은 5433 포트 를 사용 하 며 구 버 전 은 5432 포트 를 사용 합 니 다.
pg 이용upgrade 도구 업그레이드
pg_upgrade 도 구 는 PostgreSQL 크로스 버 전의 현지 업 그 레이 드 를 지원 할 수 있 으 며 내 보 내기 와 가 져 오기 작업 을 수행 할 필요 가 없습니다.pg_upgrade 는 PostgreSQL 8.4.X 에서 최신 버 전의 업 그 레이 드 를 지원 할 수 있 습 니 다.스냅 샷 버 전과 테스트 버 전 을 포함 합 니 다.
pg_upgrade 는 업그레이드 전의 호환성 검사(-c 또는--check 옵션)기능 을 제공 합 니 다.플러그 인,데이터 형식 이 호 환 되 지 않 는 등 문 제 를 발견 할 수 있 습 니 다.--link 옵션 이 지정 되면 새 버 전 서 비 스 는 복사 가 필요 없 이 기 존 데이터베이스 파일 을 직접 사용 할 수 있 습 니 다.보통 몇 분 안에 업그레이드 작업 을 완료 할 수 있 습 니 다.
현재 PostgreSQL 소프트웨어 의 설치 디 렉 터 리 가/usr/pgsql-12/에 있 고 데이터 디 렉 터 리 가/var/lib/pgsql/12/data/에 있 으 면 PostgreSQL 13 로 업그레이드 합 니 다.
클 라 이언 트 가 접근 하지 않 은 것 을 확인 한 후 데이터 베 이 스 를 백업 하고 이전 버 전의 배경 서 비 스 를 중단 합 니 다.예 를 들 어 CentOS 는 다음 명령 을 수행 할 수 있 습 니 다.

sudo systemctl stop postgresql-12
sudo systemctl disable postgresql-12
새 버 전의 PostgreSQL 소프트웨어 를 설치 합 니 다.예 를 들 어 PostgreSQL 13.0,설치 디 렉 터 리 는/usr/pgsql-13/에 있 습 니 다.
새 버 전의 데이터베이스 클 러 스 터 를 초기 화 합 니 다.데이터 디 렉 터 리 는/var/lib/pgsql/13/data/로 설정 되 어 있 습 니 다.
이전 버 전에 확장 모듈 이 설치 되 어 있다 면 새 버 전에 도 해당 공유 대상 파일 이나 DLL 파일 을 설치 해 야 합 니 다.단,오래된 데이터베이스 에서 업 그 레이 드 될 수 있 기 때문에CREATE EXTENSION명령 을 실행 하지 마 십시오.또한 사용자 정의 전체 텍스트 검색 파일(사전,동의어,어고,사용 중지 어)을 사용 했다 면 새로운 데이터베이스 클 러 스 터 디 렉 터 리 에 복사 해 야 합 니 다.
새 버 전의 백 스테이지 서 비 스 를 중단 합 니 다.예 를 들 어 CentOS 는 다음 명령 을 수행 할 수 있 습 니 다.

sudo systemctl stop postgresql-13
통과 pgupgrade 는 업그레이드 작업 을 수행 하고 데이터베이스 전용 사용자(보통 postgres)를 사용 하여 다음 작업 을 수행 합 니 다.

/usr/pgsql-13/bin/pg_upgrade \
 --old-datadir /var/lib/pgsql/12/data/ \
 --new-datadir /var/lib/pgsql/13/data/ \
 --old-bindir /usr/pgsql-12/bin/ \
 --new-bindir /usr/pgsql-13/bin/ \
 --check
그 중에서--check 는 업그레이드 검 사 를 실행 하고 업그레이드 작업 을 실제로 수행 하지 않 는 다 고 표시 합 니 다.검 사 를 통 해 이 매개 변 수 를 제거 하고 업 그 레이 드 를 수행 할 수 있 습 니 다:

/usr/pgsql-13/bin/pg_upgrade \
 --old-datadir /var/lib/pgsql/12/data/ \
 --new-datadir /var/lib/pgsql/13/data/ \
 --old-bindir /usr/pgsql-12/bin/ \
 --new-bindir /usr/pgsql-13/bin/ \
 --link
그 중에서--link 는 새로운 버 전의 데이터 디 렉 터 리 를 이전 버 전의 데이터 디 렉 터 리 에 하 드 링크 하고 새로운 데이터 파일 을 복사 하지 않 으 며 빠르게 업그레이드 할 수 있다 고 밝 혔 다.
이전 버 전 프로필 pghba.conf 와 postgresql.conf 등의 변경 사항 은 해당 하 는 새 프로필 에서 다시 수정 합 니 다.
새 버 전의 백 스테이지 서 비 스 를 시작 합 니 다.예 를 들 어 CentOS 는 다음 명령 을 수행 할 수 있 습 니 다.

sudo systemctl start postgresql-13
sudo systemctl enable postgresql-13
서버 에 연결 하여 데이터베이스 버 전 정보 보기:

SELECT version();
version                        |
-------------------------------------------------------------------------------------------------------|
PostgreSQL 13.0 on x86_64-pc-linux-gnu, compiled by gcc (GCC) 4.8.5 20150623 (Red Hat 4.8.5-39), 64-bit|
통계 정 보 를 수집 하 다.pg_upgrade 는 새 버 전 데이터베이스 에 대한 통계 정 보 를 만 들 지 는 않 지만 스 크 립 트 파일 을 만 들 고 이 파일 을 실행 합 니 다.

./analyze_new_cluster.sh
업그레이드 에 성공 한 것 을 확인 하면 오래된 데이터베이스 소프트웨어 와 클 러 스 터 를 삭제 하거나 유지 할 수 있 습 니 다.pg_upgrade 역시 오래된 데이터베이스 클 러 스 터 를 삭제 하 는 스 크 립 트 를 제공 합 니 다:

 ./delete_old_cluster.sh
그리고 CentOS 와 같은 이전 버 전의 PostgreSQL 소프트웨어 를 삭제 할 수 있 습 니 다.

yum remove postgresql12*
이전 버 전의 데이터 베 이 스 를 되 돌려 주 려 면 다른 상황 으로 나 눌 수 있 습 니 다.
  • --check 옵션 명령 만 실행 하면 업 그 레이 드 를 제대로 실행 하지 않 았 음 을 표시 하고 서 비 스 를 다시 시작 하면 됩 니 다.
  • 업그레이드 할 때--link 옵션 을 사용 하지 않 으 면 이전 버 전의 데이터베이스 클 러 스 터 가 수정 되 지 않 고 서 비 스 를 다시 시작 하면 됩 니 다.
  • 업그레이드 할 때--link 옵션 을 사용 하면 데이터베이스 파일 은 새 버 전의 클 러 스 터 에 의 해 사용 되 었 을 수 있 습 니 다.
  • pgupgrade 는 링크 작업 전에 종 료 됩 니 다.이전 버 전의 데이터베이스 클 러 스 터 는 수정 되 지 않 았 습 니 다.서 비 스 를 다시 시작 하면 됩 니 다.
  • 새 버 전의 백 스테이지 서 비 스 를 시작 하지 않 았 다 면 이전 버 전의 데이터베이스 클 러 스 터 는 수정 되 지 않 았 지만 링크 과정 은$PGDATA/global/pgcontrol 파일 이름 이$PGDATA/global/pg 로 바 뀌 었 습 니 다.control.old;이 파일 이름 의.old 접 두 사 를 지우 고 서 비 스 를 다시 시작 하면 됩 니 다.
  • 새로운 버 전의 데이터베이스 클 러 스 터 를 시작 하면 데이터베이스 파일 을 수정 하고 이전 버 전의 서 비 스 를 시작 하면 데이터 가 손 상 될 수 있 습 니 다.백업 파일 을 통 해 이전 버 전의 데이터 베 이 스 를 복원 해 야 합 니 다.
  • pg 에 대하 여upgrade 의 상세 한 사용 과 업그레이드 주의사항,예 를 들 어 스 트림 복사 구조 와 로그 전송 복사 구조 에서 예비 노드 의 업 그 레이 드 는 공식 문 서 를 참고 할 수 있 습 니 다.
    논리 복제 기능 을 사용 하여 업그레이드 하 다
    逻辑复制
    PostgreSQL 논리 복 제 는 버 전 간 의 데이터 복 제 를 지원 하고 서로 다른 플랫폼 간 의 복 제 를 지원 하기 때문에 버 전 업 그 레이 드 를 실현 하 는 데 도 사용 할 수 있 습 니 다.우 리 는 새로운 버 전의 데이터 베 이 스 를 복사 하 는 노드 로 설치 할 수 있 습 니 다.데이터 가 동기 화 되 었 을 때 메 인 전환 을 실행 한 다음 에 이전 버 전의 메 인 노드 를 닫 을 수 있 습 니 다.주로 전환 하 는 업그레이드 방법 은 보통 몇 초 만 에 완성 할 수 있 고 제3자 의 높 은 사용 가능 한 구성 요 소 를 이용 하여 정지 시간 업 그 레이 드 를 실현 할 수 있다.
    PostgreSQL 10 은 내 장 된 논리 복제 기능 을 제공 하거나 pglogical,Slony,Londiste,Bucardo 등 논리 적 복잡 도 구 를 사용 할 수 있 습 니 다.
    PostgreSQL 논리 복제 구조의 생 성과 주종 전환 에 대해 참고 할 수 있 습 니 다공식 문서 시험.
    총결산
    PostgreSQL 작은 버 전 업 그 레이 드 는 바 이 너 리 파일 만 바 꾸 면 됩 니 다.버 전 을 뛰 어 넘 는 업그레이드 방안 은 주로 3 가지 가 있 습 니 다.pgdump/pg_dumpall 논리 백업 및 복원 업그레이드,pg 이용upgrade 도 구 를 업그레이드 하고 논리 복사 기능 으로 업그레이드 합 니 다.그들의 장단 점 과 적용 장면 을 이해 하면 우리 가 가장 좋 은 업그레이드 방식 을 선택 하 는 데 도움 을 줄 수 있다.
    이 글 은 PostgreSQL 데이터베이스 의 버 전 간 업그레이드 에 관 한 일반적인 방안 분석 에 관 한 글 입 니 다.더 많은 관련 PostgreSQL 버 전 업그레이드 내용 은 우리 의 이전 글 을 검색 하거나 아래 의 관련 글 을 계속 조회 하 시기 바 랍 니 다.앞으로 많은 지원 바 랍 니 다!

    좋은 웹페이지 즐겨찾기