PostgreSQL 업그레이드
Mattermost는 PostgreSQL 커뮤니티 버전 정책을 따르며, 메이저 버전당 5년의 지원을 제공합니다. PostgreSQL을 업그레이드할 때는 종합적인 안내를 위해 공식 PostgreSQL 업그레이드 문서를 참조하십시오.
Mattermost는 PostgreSQL 커뮤니티 버전 정책을 따르며, 메이저 버전당 5년의 지원을 제공합니다. PostgreSQL 버전이 지원 종료(end-of-life)에 도달하면, Mattermost는 이후 릴리즈에서 해당 버전에 대한 지원을 중단합니다. 현재 지원되는 PostgreSQL 버전은 소프트웨어 및 하드웨어 요구사항 문서를 참고하십시오.
PostgreSQL을 업그레이드할 때는 종합적인 안내를 위해 공식 PostgreSQL 업그레이드 문서를 참조하십시오. 이 페이지는 Mattermost 배포 환경에 특화된 절차를 다룹니다.
시작하기 전에#
- 데이터베이스를 백업하십시오. 업그레이드 전에 항상 전체 데이터베이스 백업을 수행하십시오. 백업 및 재해 복구 문서를 참고하십시오.
- 지원 버전을 확인하십시오. 대상 PostgreSQL 버전이 현재 Mattermost 릴리즈에서 지원되는지 확인하십시오. 소프트웨어 및 하드웨어 요구사항을 참고하십시오.
- Mattermost를 중지하십시오. 데이터베이스 업그레이드 중 데이터 쓰기가 발생하지 않도록 업그레이드를 시작하기 전에 Mattermost 서버를 종료하십시오.
베어메탈 PostgreSQL 서버 업그레이드#
베어메탈 또는 가상 머신에서 PostgreSQL을 업그레이드하는 두 가지 주요 방법이 있습니다:
- pg_upgrade (인플레이스): 더 빠른 방법으로, 전체 덤프/복원 사이클 없이 데이터 디렉터리를 업그레이드합니다. 대용량 데이터베이스에 권장합니다.
- pg_dump / pg_restore (논리적): 크로스 머신 마이그레이션이나 인플레이스 업그레이드가 불가능한 경우에 더 간단하고 안전합니다.
pg_upgrade 사용#
pg_upgrade를 사용하면 전체 내보내기 없이 PostgreSQL 메이저 버전 간 업그레이드가 가능합니다. 기존 버전과 새 버전의 PostgreSQL이 모두 나란히 설치되어 있어야 합니다.
- 패키지 매니저를 사용하여 기존 버전 옆에 새 PostgreSQL 버전을 설치합니다.
- 기존 PostgreSQL 서비스를 중지합니다:
postgres사용자로pg_upgrade를 실행하여 두 버전의 바이너리 및 데이터 디렉터리를 지정합니다.<old_version>과<new_version>을 적절한 버전 번호로 교체하십시오 (예:15와16):- 기본적으로 새 PostgreSQL 버전이 시작되도록 시스템을 업데이트한 후 서비스를 시작합니다:
sudo systemctl stop postgresql
sudo -u postgres /usr/lib/postgresql/<new_version>/bin/pg_upgrade \
--old-datadir /var/lib/postgresql/<old_version>/main \
--new-datadir /var/lib/postgresql/<new_version>/main \
--old-bindir /usr/lib/postgresql/<old_version>/bin \
--new-bindir /usr/lib/postgresql/<new_version>/bin
sudo systemctl start postgresql
전체 pg_upgrade 참고 자료는 공식 pg_upgrade 문서를 참조하십시오.
pg_dump와 pg_restore 사용#
이 방법은 전체 데이터베이스를 내보내고, 새 PostgreSQL 버전을 설치한 후 데이터를 복원합니다. 더 간단하지만 데이터베이스 크기에 비례한 다운타임이 필요합니다.
- Mattermost 데이터베이스를 내보냅니다 (
mattermost는 데이터베이스 이름으로,mmuser는 데이터베이스 사용자로 교체): - 새 PostgreSQL 버전을 설치하고 데이터베이스 사용자와 데이터베이스를 생성합니다:
- 새 PostgreSQL 인스턴스에 데이터베이스를 복원합니다:
pg_dump -U mmuser -Fc mattermost > mattermost_backup.dump
sudo -u postgres psql -c "CREATE USER mmuser WITH PASSWORD 'your_password';"
sudo -u postgres psql -c "CREATE DATABASE mattermost OWNER mmuser;"
pg_restore -U mmuser -d mattermost mattermost_backup.dump
Docker에서 PostgreSQL 업그레이드#
아래 단계는 공식 Mattermost Docker 배포를 기준으로 작성되었습니다. 커스텀 Docker 설정을 사용하는 경우, 컨테이너 및 볼륨 이름을 적절히 수정하십시오.
Docker에서 PostgreSQL을 실행할 때는 pg_dump/pg_restore 방식이 권장 업그레이드 방법입니다. 인플레이스 pg_upgrade는 컨테이너에서 구버전과 신버전 바이너리가 모두 필요하므로 복잡합니다.
- Mattermost 컨테이너를 중지합니다:
- 실행 중인 PostgreSQL 컨테이너에서 데이터베이스를 덤프합니다 (
mattermost,mmuser,db를 각각 데이터베이스 이름, 사용자, 컨테이너 이름으로 교체): - 기존 PostgreSQL 컨테이너를 중지합니다:
.env파일에서POSTGRES_IMAGE_TAG를 새 버전으로 업데이트합니다. 예:.env의 새 이미지 태그가 적용되도록 PostgreSQL 컨테이너를 재생성합니다:- 새 컨테이너에서 데이터베이스 사용자와 데이터베이스를 재생성한 후 복원합니다:
docker stop mattermost
docker exec postgres pg_dump -U mmuser -Fc mattermost > mattermost_backup.dump
docker stop postgres
POSTGRES_IMAGE_TAG=16-alpine
docker compose up -d --force-recreate postgres
Note볼륨에 이미 구버전의 데이터가 있는 경우, PostgreSQL이 시작을 거부할 수 있습니다. 이 경우 새 컨테이너를 위한 새 명명 볼륨을 생성한 후 다음 단계에서 덤프로부터 복원하십시오.
docker exec -i postgres psql -U postgres -c "CREATE USER mmuser WITH PASSWORD 'your_password';"
docker exec -i postgres psql -U postgres -c "CREATE DATABASE mattermost OWNER mmuser;"
docker exec -i postgres pg_restore -U mmuser -d mattermost < mattermost_backup.dump
업그레이드 후#
PostgreSQL 업그레이드 후, Mattermost 데이터베이스에서 ANALYZE VERBOSE를 실행하십시오. 이렇게 하면 PostgreSQL이 최적의 쿼리 계획을 생성하는 데 사용하는 pg_statistics 테이블이 다시 채워집니다. 이 단계를 건너뛰면 데이터베이스 성능이 저하될 수 있습니다.
sudo -u postgres psql -d mattermost -c "ANALYZE VERBOSE;"
완료 후 Mattermost를 재시작합니다:
sudo systemctl start mattermost
