Mattermost 업그레이드 준비
대부분의 경우 Mattermost 서버 업그레이드 는 몇 분 내에 완료할 수 있습니다. Mattermost는 일반적으로 비잠금, 하위 호환 마이그레이션을 목표로 합니다. 업그레이드가 지연된 경우, 가장 가까운 ESR 버전으로 먼저 업그레이드한 후 다음 ESR로 업그레이드하는 것을 권장합니다.
대부분의 경우 Mattermost 서버 업그레이드 는 몇 분 내에 완료할 수 있습니다. 그러나 설치 규모와 복잡성, 업그레이드할 버전에 따라 시간이 더 걸릴 수 있습니다. 업그레이드를 계획할 때는 현재 데이터베이스 및 운영 체제 버전이 여전히 지원되는지 확인하는 것이 좋습니다. 자세한 내용은 소프트웨어 및 하드웨어 요구사항 페이지에서 확인할 수 있습니다.
업그레이드 모범 사례#
Mattermost는 일반적으로 비잠금, 하위 호환 마이그레이션을 목표로 합니다. 이 하위 호환성 보장은 마지막 ESR 버전에만 적용됩니다. 예를 들어, ESR1, ESR2, ESR3의 세 가지 ESR 버전이 있는 경우, ESR1에서 ESR2로, 그리고 ESR2에서 ESR3로 업그레이드하면 하위 호환성이 보장되지만, ESR1에서 ESR3로 직접 업그레이드하는 경우에는 보장되지 않습니다.
업그레이드가 지연된 경우, 가장 가까운 ESR 버전으로 먼저 업그레이드한 후 다음 ESR로 업그레이드하는 것을 권장합니다. 클러스터의 이전 버전 노드와의 하위 호환성이 깨질 수 있으므로 최신 버전으로 직접 업그레이드를 시도하지 마세요.
Mattermost v7.1로 업그레이드#
Mattermost v7.1은 새 컬럼 및 인덱스 형태의 스키마 변경을 도입합니다. 스키마 변경에 대한 테스트 결과는 다음과 같습니다:
- PostgreSQL 12M Posts, 2.5M Reactions - ~1분 18초 (인스턴스: db.r5.2xlarge)
Reactions 테이블에 잠금을 걸기 전에 다음 SQL 쿼리를 실행할 수 있습니다. 이 시간 동안 사용자가 게시한 반응은 마이그레이션이 완료될 때까지 데이터베이스에 반영되지 않습니다. 이것은 완전히 하위 호환됩니다.
연결 데이터 정렬과 테이블 데이터 정렬이 다른 경우, `Illegal mix of collations` 오류가 발생할 수 있습니다. 이 오류를 해결하려면 연결과 테이블 모두에 동일한 데이터 정렬을 설정하세요. 연결, 데이터베이스, 테이블, 컬럼 등 다양한 수준에서 서로 다른 데이터 정렬이 있을 수 있으며, 데이터베이스 관리자는 다른 객체에 대해 다른 데이터 정렬 수준을 설정하도록 선택할 수 있습니다.
ALTER TABLE reactions ADD COLUMN IF NOT EXISTS channelid varchar(26) NOT NULL DEFAULT '';
UPDATE reactions SET channelid = COALESCE((select channelid from posts where posts.id = reactions.postid), '') WHERE channelid='';
CREATE INDEX CONCURRENTLY IF NOT EXISTS idx_reactions_channel_id on reactions (channelid);
Mattermost v6.7로 업그레이드#
Mattermost v6.7은 새 인덱스 형태의 스키마 변경을 도입합니다. 스키마 변경에 대한 테스트 결과는 다음과 같습니다:
- Postgres 7M Posts - ~9초 (인스턴스: db.r5.xlarge)
CREATE INDEX CONCURRENTLY IF NOT EXISTS idx_posts_create_at_id on posts(createat, id);
이것은 완전히 하위 호환되며 테이블 잠금을 획득하거나 테이블의 기존 작업에 영향을 미치지 않습니다.
Mattermost v6.0으로 업그레이드#
Mattermost 서버 v6.0 업그레이드는 데이터셋 크기에 따라 시작 시간이 길어질 수 있는 중요한 데이터베이스 스키마 변경을 실행합니다. v6.0에서는 제로 다운타임이 불가능하지만, 마이그레이션 프로세스 중에 기울이는 노력에 따라 최소화할 수 있습니다.
업그레이드 전에 쿼리를 실행하면 일부 다운타임을 절약할 수 있습니다. 그러나 일부 쿼리는 여전히 전체 테이블 잠금을 유발하고 쿼리 기간 동안 Mattermost를 읽기 전용 모드로 전환해야 할 수 있습니다.
다음 사항을 강력히 권장합니다:
- 마이그레이션 영향을 최소화하기 위해 업무 시간 외에 유지보수 창을 설정하세요.
- 필요한 경우 이전 데이터베이스 스냅샷을 로드할 수 있도록 데이터베이스 백업을 유지하세요.
- Mattermost v6.0 업그레이드를 시도하기 전에 먼저 최신 확장 지원 릴리즈(ESR) 로 업그레이드하세요.
Mattermost Server v10.11 확장 지원 릴리즈 에 대한 지원은 2026년 8월 15일에 수명 주기가 종료될 예정입니다. Mattermost Server v11.7 확장 지원 릴리즈 이상으로 업그레이드를 권장합니다. 이전 확장 지원 릴리즈에서 최신 확장 지원 릴리즈로의 업그레이드가 지원됩니다. 업그레이드에 영향을 줄 수 있는 마이그레이션을 인지하고 있는지 확인하기 위해 중간 버전에 대한 important-upgrade-notes 를 검토하세요.
v6.0 데이터베이스 스키마 마이그레이션#
Mattermost v6.0은 데이터베이스 및 애플리케이션 성능을 모두 향상시키기 위한 여러 데이터베이스 스키마 변경을 도입합니다. 업그레이드는 데이터셋 크기에 따라 시작 시간이 길어질 수 있는 중요한 데이터베이스 스키마 변경을 실행합니다. 1,000만 개 이상의 게시물과 7,200만 개 이상의 게시물로 구성된 현실적인 데이터셋을 사용하여 지원되는 PostgreSQL 데이터베이스 드라이버에 대한 광범위한 테스트를 수행했습니다.
마이그레이션 프로세스 중에 실행되는 다음 쿼리는 쿼리 기간 동안 데이터베이스 CPU 사용량과 쓰기 작업 제한에 상당한 영향을 미칩니다:
ALTER TABLE posts ALTER COLUMN props TYPE jsonb USING props::jsonb; (~ 11분)
PostgreSQL 쿼리와 그 영향 및 지속 시간에 대한 자세한 분석은 Mattermost v6.0 DB 스키마 마이그레이션 분석 을 참조하세요.
v5.35보다 오래된 릴리즈에서 업그레이드#
v5.35 이전 Mattermost 릴리즈에서 업그레이드하는 고객은 v5.35에서 도입된 백엔드 데이터베이스 아키텍처로 인해 v6.0으로 업그레이드할 때 다운타임이 길어질 것으로 예상해야 합니다. 이 업그레이드 경로는 대규모 설치에는 권장되지 않습니다. Mattermost v6.0으로 업그레이드하기 전에 먼저 최신 확장 지원 릴리즈(ESR) 로 업그레이드하는 것을 권장합니다. 추가 세부정보는 지원되지 않는 레거시 릴리즈 문서를 참조하세요.
Mattermost v5.0 이전 버전에서 업그레이드하는 경우 v6.0으로 직접 업그레이드할 수 없습니다. 대신, v5.0 릴리즈에서 도입된 바이너리 변경 사항과 함께 작동하도록 서비스 파일도 수정해야 합니다. 실행 디렉터리는 Mattermost 기본 디렉터리(예: /opt/mattermost)를 가리켜야 하며, 바이너리는 mattermost 바이너리(예: /opt/mattermost/bin/mattermost)를 가리켜야 합니다.
업그레이드에 영향을 줄 수 있는 마이그레이션을 인지하고 있는지 확인하기 위해 중간 릴리즈 버전에 대한 important-upgrade-notes 를 검토하세요.
권장 업그레이드 프로세스를 따라 v5.35보다 오래된 릴리즈에서 업그레이드하는 고객은 v6.0으로 업그레이드 중에 다음 오류가 발생할 수 있습니다:
Failed to alter column type. It is likely you have invalid JSON values in the column. Please fix the values manually and run the migration again.","caller":"sqlstore/store.go:854","error":"pq: unsupported Unicode escape sequence
문제 해결을 돕기 위해, SqlSettings.Trace 를 활성화하여 업그레이드 중에 어떤 테이블과 컬럼이 문제를 일으키는지 좁혀볼 수 있습니다. 다음 쿼리는 PostgreSQL에서 컬럼을 JSONB 형식으로 변환합니다. 유니코드 문제가 있는 테이블과 컬럼을 찾으려면 v5.39 개발 데이터베이스에 대해 다음을 실행하세요:
ALTER TABLE posts ALTER COLUMN props TYPE jsonb USING props::jsonb;
ALTER TABLE channelmembers ALTER COLUMN notifyprops TYPE jsonb USING notifyprops::jsonb;
ALTER TABLE jobs ALTER COLUMN data TYPE jsonb USING data::jsonb;
ALTER TABLE linkmetadata ALTER COLUMN data TYPE jsonb USING data::jsonb;
ALTER TABLE sessions ALTER COLUMN props TYPE jsonb USING props::jsonb;
ALTER TABLE threads ALTER COLUMN participants TYPE jsonb USING participants::jsonb;
ALTER TABLE users ALTER COLUMN props TYPE jsonb USING props::jsonb;
ALTER TABLE users ALTER COLUMN notifyprops TYPE jsonb USING notifyprops::jsonb;
ALTER TABLE users ALTER COLUMN timezone TYPE jsonb USING timezone::jsonb;
영향을 받는 테이블을 식별한 후, 다음 SELECT 쿼리를 사용하여 `\u0000` 의 유효하지 않은 발생 횟수를 확인하세요:
SELECT COUNT(*) FROM TableName WHERE ColumnName LIKE '%\u0000%';
그런 다음 그에 따라 행을 선택하고 수정하세요. 원한다면 다음 UPDATE 쿼리를 사용하여 특정 테이블이나 컬럼의 모든 발생을 한 번에 수정할 수도 있습니다:
UPDATE TableName SET ColumnName = regexp_replace(ColumnName, '\\u0000', '', 'g') WHERE ColumnName LIKE '%\u0000%';</code></pre>
<h2 id="고가용성-클러스터-기반-배포-업그레이드">고가용성 클러스터 기반 배포 업그레이드</h2>
<p><a href="https://docs.mattermost.com/administration-guide/scale/high-availability-cluster-based-deployment" target="_blank" rel="noopener noreferrer" class="doc-ref">고가용성 클러스터 기반</a> 환경에서는 v6.0 업그레이드를 위해 다운타임을 예약해야 합니다. 데이터베이스 크기와 설정에 따라 v6.0으로의 마이그레이션은 상당한 시간이 걸릴 수 있으며, 게시물 테이블을 잠가 마이그레이션이 완료될 때까지 사용자가 메시지를 게시하거나 받지 못할 수도 있습니다.
특정 버전에서 업그레이드하기 전후에 수행해야 할 작업을 알고 있는지 확인하기 위해 고가용성 클러스터 기반 배포 업그레이드 가이드 와 important-upgrade-notes 를 반드시 검토하세요.
Important클러스터에서 두 가지 다른 버전의 Mattermost를 실행하는 것은 업그레이드 시나리오 외에는 해서는 안 됩니다. important-upgrade-notes 제품 문서에 명시된 바와 같이 v6.0의 클러스터링 코드에 대한 근본적인 변경으로 인해 다른 버전의 노드를 실행할 수 없습니다.
v6.0 릴리즈는 데이터베이스 스키마 변경도 도입하며 더 긴 마이그레이션 시간이 예상됩니다.
