PostgreSQL 업그레이드
Entry, Professional, Enterprise, Enterprise Advanced 플랜에서 사용할 수 있습니다.
Mattermost는 메이저 버전당 5년간 지원을 제공하는 PostgreSQL 커뮤니티 버전 관리 정책을 따릅니다. 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 서비스를 중지합니다.
sudo systemctl stop postgresqlpostgres사용자로pg_upgrade를 실행하면서 두 버전의 바이너리 디렉터리와 데이터 디렉터리를 지정합니다.<old_version>과<new_version>을 해당 버전 번호(예:15와16)로 바꾸세요.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새 PostgreSQL 버전이 기본으로 시작되도록 시스템을 갱신한 뒤 서비스를 시작합니다.
sudo systemctl start postgresql
pg_upgrade의 전체 레퍼런스는 공식 pg_upgrade 문서를 참고하세요.
pg_dump와 pg_restore 사용
이 방식은 데이터베이스 전체를 내보내고, 새 PostgreSQL 버전을 설치한 뒤 데이터를 복원합니다. 더 단순하지만 데이터베이스 크기에 비례하는 중단 시간이 필요합니다.
Mattermost 데이터베이스를 내보냅니다(
mattermost는 데이터베이스 이름으로,mmuser는 데이터베이스 사용자로 바꾸세요).pg_dump -U mmuser -Fc mattermost > mattermost_backup.dump새 PostgreSQL 버전을 설치하고 데이터베이스 사용자와 데이터베이스를 생성합니다.
sudo -u postgres psql -c "CREATE USER mmuser WITH PASSWORD 'your_password';" sudo -u postgres psql -c "CREATE DATABASE mattermost OWNER mmuser;"새 PostgreSQL 인스턴스로 데이터베이스를 복원합니다.
pg_restore -U mmuser -d mattermost mattermost_backup.dump
Docker에서 PostgreSQL 업그레이드
아래 단계는 공식 Mattermost Docker 배포를 기준으로 작성되었습니다. 사용자 정의 Docker 구성을 사용하고 있다면 컨테이너 이름과 볼륨 이름을 그에 맞게 조정하세요.
Docker에서 PostgreSQL을 실행하는 경우에는 pg_dump/pg_restore 방식의 업그레이드를 권장합니다. 인플레이스 pg_upgrade는 같은 컨테이너 안에 이전 바이너리와 새 바이너리가 모두 있어야 하므로 컨테이너 환경에서는 복잡합니다.
Mattermost 컨테이너를 중지합니다.
docker stop mattermost실행 중인 PostgreSQL 컨테이너에서 데이터베이스를 덤프합니다(
mattermost,mmuser,db를 각각 데이터베이스 이름, 사용자, 컨테이너 이름으로 바꾸세요).docker exec postgres pg_dump -U mmuser -Fc mattermost > mattermost_backup.dump기존 PostgreSQL 컨테이너를 중지합니다.
docker stop postgres.env파일의POSTGRES_IMAGE_TAG를 새 버전으로 갱신합니다. 예를 들면 다음과 같습니다.POSTGRES_IMAGE_TAG=16-alpine.env의 새 이미지 태그가 적용되도록 PostgreSQL 컨테이너를 다시 생성합니다.docker compose up -d --force-recreate postgres참고볼륨에 이전 메이저 버전의 데이터가 이미 들어 있다면 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_statistic 테이블을 다시 채웁니다. 이 단계를 건너뛰면 데이터베이스 성능이 저하될 수 있습니다.
sudo -u postgres psql -d mattermost -c "ANALYZE VERBOSE;"
완료되면 Mattermost를 다시 시작합니다.
sudo systemctl start mattermost