Redis
Enterprise Advanced 플랜에서 사용할 수 있습니다.
Redis는 데이터베이스, 캐시, 메시지 브로커, 스트리밍 엔진으로 사용되는 오픈 소스 인메모리 데이터 구조 저장소입니다. Mattermost는 대규모 환경에서 성능을 높이기 위해 Redis를 외부 캐시로 사용합니다. 적절히 구성하면 Redis는 효율적인 캐싱으로 성능을 개선해 사용자 100,000명이 넘는 Mattermost 설치 환경을 지원하는 데 도움이 됩니다.
배포 가이드
Mattermost와 함께 Redis를 배포하는 과정은 Redis 서버 설정과 Mattermost에서 Redis 구성의 두 단계로 이루어집니다.
Redis 서버 설정
- Redis 7.x의 최신 릴리스를 다운로드해 설치합니다. 운영 체제별 설치 세부 사항은 Redis 문서를 참고하세요.
- 환경에 맞게 Redis를 구성합니다. Redis가 보호되고 신뢰할 수 있는 시스템에서만 접근할 수 있도록 하세요.
- 고가용성 배포에서는 안정성과 성능을 높이기 위해 Redis를 클러스터 구성으로 설정하는 것을 고려하세요.
Mattermost에서 Redis 구성
Mattermost가 Redis 서버를 사용하도록 구성하려면 다음 단계를 따르세요.
- System Console > Environment > Cache(시스템 콘솔 > 환경 > 캐시)로 이동합니다.
- Redis 전용 설정을 활성화하려면 Cache Type을
redis로 설정합니다. - Redis 서버 연결 정보를 설정합니다.
- 앞서 설정한 Redis 서버의 Redis Address를 입력합니다(예:
redis.example.com:6379). - (선택) Redis 서버에 인증이 필요하면 Redis Password를 입력합니다.
- (선택) 사용할 Redis 데이터베이스를 지정하려면 Redis Database를 입력합니다(기본값 -1이며, 이 경우 Redis의 기본 데이터베이스를 사용합니다).
- 앞서 설정한 Redis 서버의 Redis Address를 입력합니다(예:
- 구성을 저장하고 Mattermost 서버를 재시작합니다.
또는 config.json 파일에서 Redis를 구성할 수도 있습니다.
"CacheSettings": {
"CacheType": "redis",
"RedisAddress": "redis.example.com:6379",
"RedisPassword": "",
"RedisCachePrefix": "",
"RedisDB": -1,
"DisableClientCache": false
}
AWS ElastiCache로 배포
엔터프라이즈 규모 배포에서는 AWS ElastiCache for Redis가 완전 관리형 Redis 서비스를 제공하여 배포, 운영, 확장을 간소화합니다.
Mattermost를 AWS ElastiCache와 함께 배포할 때는 다음을 따르세요.
- ElastiCache for Redis 인스턴스를 생성하고 Redis OSS 버전 7.1 이상을 선택합니다.
- 부하 테스트 결과에 따라, 사용자 100,000명 이상을 지원하는 배포에서는
cache.m7g.2xlarge인스턴스로 시작할 것을 권장합니다. - Mattermost 서버가 ElastiCache 엔드포인트에 연결하도록 구성합니다.
- Redis는 단일 스레드로 동작하여 성능 병목이 대체로 메모리가 아닌 CPU에서 발생하므로, CPU 사용률을 면밀히 모니터링합니다.
성능 고려 사항
Mattermost에서 Redis를 사용할 때는 다음 성능 관련 사항을 고려하세요.
- 현재 부하 테스트에 따르면 Redis의 메모리 사용량은 비교적 낮으며, Redis가 단일 스레드로 동작하기 때문에 CPU가 주된 병목입니다.
- Redis 배포를 계획할 때는 확장 결정의 주요 지표로 CPU 사용률을 사용하세요.
구현 세부 사항
Mattermost는 더 널리 쓰이는 go-redis 대신 rueidis 라이브러리를 사용합니다. 주된 이유는 rueidis가 다음을 포함해 기본적으로 더 많은 성능 최적화를 제공하기 때문입니다.
- 동시 쿼리의 자동 파이프라이닝
- 클라이언트 측 캐싱
- MaxFlushDelay 같은 추가 성능 튜닝 옵션
주요 구현 파일은 다음과 같습니다.
platform/services/cache/provider.go- 라이브러리 초기화 코드가 들어 있습니다platform/services/cache/redis.go- 캐시 인터페이스 구현이 들어 있습니다
자주 묻는 질문(FAQ)
Redis를 꼭 사용해야 하나요?
규모가 작은 Mattermost 배포에서는 Redis가 필수는 아니지만, 대규모 설치 환경에서는 사용을 강력히 권장합니다.
- 설치 환경의 사용자가 100K명을 넘는다면 Redis 사용을 강력히 권장합니다. Redis는 데이터베이스 부하를 줄이고 자주 발생하는 작업을 최적화하여 성능을 크게 개선합니다.
- 설치 환경의 사용자가 100K명 미만이라면 Redis는 권장하지 않습니다.
캐시 무효화가 발생하는 비율을 나타내는 sum(rate(mattermost_cache_mem_invalidation_total[5m])) 지표를 주시할 것을 권장합니다. 캐시 무효화가 한 번 발생하면 HA 클러스터의 모든 노드로 메시지가 전달되어 모든 노드에서 데이터베이스 호출이 일어납니다. 따라서 이 지표를 클러스터의 노드 수와 함께 고려해 Redis를 도입할 적절한 시점을 판단해야 합니다.
예를 들어 클러스터에 노드가 10개를 넘고 무효화 비율이 10을 넘어선다면, Redis 추가를 반드시 검토해야 합니다.
Redis를 Mattermost 서버와 같은 머신에 설치해야 하나요?
프로덕션 배포에서는 Mattermost 서버와 별도의 머신에서 Redis를 운영할 것을 권장합니다. 이렇게 분리하면 리소스를 더 잘 배분할 수 있고 시스템 안정성도 향상됩니다.
어떤 Redis 지표를 모니터링해야 하나요?
Mattermost와 함께 Redis를 운영할 때는 다음 지표를 모니터링하세요.
- CPU 사용률(주요 병목)
- 메모리 사용량
- 연결된 클라이언트 수
- 캐시 적중률
- 작업 지연 시간
cache_name과operation레이블이 붙은 Mattermost의mattermost_db_cache_timeGrafana 지표. Redis의 성능을 더 자세히 모니터링하는 데 사용할 수 있습니다