InfoGrab DocsInfoGrab Docs

새 Redis 인스턴스 추가

GitLab에서 새로운 Redis 인스턴스를 추가하고 기존 데이터를 마이그레이션하는 방법을 설명합니다.

GitLab은 여러 Redis 인스턴스 를 활용할 수 있습니다. 이러한 인스턴스들은 기능적으로 분리되어 있어서, 예를 들어 CI 트레이스 청크 를 하나의 Redis 인스턴스에 저장하고 세션은 다른 인스턴스에 저장할 수 있습니다. 때로는 새 Redis 인스턴스를 추가해야 할 수 있습니다. 일반적으로 이는 캐시나 공유 상태와 같은 기존 인스턴스 중 하나에서 기능적으로 분리되는 형태로 진행됩니다. 이 문서는 기존 데이터를 처리하는 새 Redis 인스턴스를 추가하기 위한 접근 방식을 설명하며, 이전 사례를 바탕으로 합니다: Trace Chunk 스토리지용 전용 Redis 인스턴스 . Rate Limiting 데이터용 전용 Redis 인스턴스 생성 . 이 문서는 새 Redis 인스턴스를 준비하고 설정하는 운영 측면을 자세히 다루지는 않지만, 예시 에픽에는 이전 접근 방식에 대한 정보가 포함되어 있습니다. Step 1: 새 인스턴스 설정 지원 # 새 인스턴스로 기능을 전환하기 전에, 코드베이스에서 새 인스턴스를 설정하고 참조할 수 있어야 합니다. 주요 설치 유형을 모두 지원해야 합니다: Self-compiled 설치 (개발 환경 포함) - 예시 머지 리퀘스트 Linux 패키지 설치 - 예시 머지 리퀘스트 Helm charts - 예시 머지 리퀘스트 폴백 인스턴스 # 애플리케이션 코드에서, 새 인스턴스가 설정되지 않은 경우를 위한 폴백 인스턴스를 정의해야 합니다. 예를 들어, GitLab 인스턴스가 이미 별도의 공유 상태 Redis를 설정했고 공유 상태 Redis에서 데이터를 분리하는 경우, 새 인스턴스의 설정은 해당 인스턴스가 없을 때 공유 상태 Redis의 설정을 기본값으로 사용해야 합니다. 그렇지 않으면 새 Redis 인스턴스가 사용 가능해지는 즉시, 이를 설정하지 않은 인스턴스가 중단될 수 있습니다. 모든 Redis 인스턴스의 기본 클래스인 Gitlab::Redis::Wrapper 에 .config_fallback 메서드를 정의 하여 이 인스턴스가 설정되지 않은 경우에 사용할 인스턴스를 정의할 수 있습니다. SharedState 로 폴백해야 하는 Foo 인스턴스를 추가하는 경우, 다음과 같이 할 수 있습니다: module Gitlab module Redis class Foo < ::Gitlab::Redis::Wrapper # The data we store on Foo used to be stored on SharedState. def self.config_fallback SharedState end end end end 또한 이 폴백이 올바르게 작동하는지 확인하기 위해 trace_chunks_spec.rb 와 같은 스펙을 추가해야 합니다. Step 2: 새 인스턴스에 쓰기 및 읽기 지원 # 새 인스턴스로 마이그레이션할 때, 데이터가 다음 위치에 있는 경우를 처리해야 합니다: '기존' (원본) 인스턴스. 방금 지원을 추가한 새 인스턴스. 따라서 어떤 조건에 따라 두 인스턴스 모두에서 읽고 쓰는 것을 지원해야 할 수 있습니다. 사용할