Redis 성능 튜닝 및 모니터링

Redis 성능 튜닝 및 모니터링

6.1 Redis 성능 최적화 전략 (메모리 사용량 줄이기, maxmemory 정책)

Redis는 인메모리 데이터베이스로, 빠른 성능을 제공하지만 메모리 사용량에 제한이 있습니다. 성능 최적화를 위해서는 메모리 사용량을 줄이고, maxmemory 정책을 적절히 설정하는 것이 중요합니다.

1. 메모리 사용량 줄이기

  • 데이터 타입 최적화: Redis는 다양한 데이터 타입을 제공하는데, 각 데이터 타입은 메모리를 다르게 사용합니다. 예를 들어, String 데이터 타입은 상대적으로 적은 메모리를 사용하고, List, Set, Hash 등은 그보다 더 많은 메모리를 소비할 수 있습니다. 따라서 데이터 타입을 신중히 선택하여 메모리 사용을 최적화할 수 있습니다.

  • 데이터 압축: 큰 데이터를 저장할 때는 압축 기법을 사용할 수 있습니다. 예를 들어, 문자열 데이터를 압축하여 메모리 사용량을 줄일 수 있습니다.

  • 불필요한 데이터 삭제: 사용되지 않는 데이터를 삭제하거나 TTL(Time To Live)을 설정하여 데이터를 자동으로 만료시키는 방법이 있습니다.

2. maxmemory 정책 설정

maxmemory는 Redis가 사용할 수 있는 최대 메모리 양을 설정하는 옵션입니다. 메모리 초과 시, Redis는 maxmemory-policy 설정에 따라 데이터를 처리합니다.

  • redis.conf에서 maxmemorymaxmemory-policy를 설정할 수 있습니다:
maxmemory 1gb
maxmemory-policy allkeys-lru
  • maxmemory-policy 옵션:
    • noeviction: 메모리가 부족하면 새로운 데이터를 추가할 수 없고, 에러가 발생합니다.
    • allkeys-lru: 모든 키에서 Least Recently Used(LRU) 정책을 적용하여 가장 적게 사용된 데이터를 제거합니다.
    • volatile-lru: 만료 시간이 설정된 키에 대해서만 LRU를 적용합니다.
    • allkeys-random: 무작위로 키를 삭제합니다.

메모리 사용량을 관리하고 maxmemory를 초과하지 않도록 주의하는 것이 성능에 중요한 영향을 미칩니다.

6.2 Redis Slow Log 분석 및 트러블슈팅

Redis Slow Log는 Redis 서버에서 실행된 명령어 중 시간이 오래 걸린 명령어를 기록하는 로그입니다. 이를 활용하여 성능 병목 현상을 분석하고 최적화할 수 있습니다.

1. Slow Log 활성화

Slow Log는 redis.conf에서 slowlog-log-slower-than 옵션을 통해 활성화할 수 있습니다. 이 옵션은 n 밀리초 이상 소요된 명령어를 기록합니다.

slowlog-log-slower-than 10000

위 설정은 10초(10000ms) 이상 걸린 명령어를 로그로 기록합니다.

2. Slow Log 조회

Slow Log에 기록된 명령어는 SLOWLOG GET 명령어를 사용하여 조회할 수 있습니다.

$ redis-cli SLOWLOG GET 10

위 명령어는 최근 10개의 느린 명령어를 출력합니다. 출력 예시는 다음과 같습니다:

1) 1) (integer) 1
   2) (integer) 1616584447
   3) (integer) 12345
   4) 1) "SET"
      2) "mykey"
      3) "value"

여기서 첫 번째 필드는 Slow Log ID이고, 두 번째 필드는 명령어가 실행된 타임스탬프, 세 번째는 실행 시간(마이크로초 단위), 네 번째는 실제 명령어입니다.

3. 트러블슈팅

  • 긴 실행 시간: 명령어가 오래 걸리는 경우 Redis 내부의 병목을 확인하고, 필요한 인덱스를 추가하거나 명령어를 최적화할 수 있습니다.
  • 네트워크 지연: 클라이언트와 Redis 서버 간의 네트워크 문제가 성능 저하를 일으킬 수 있으므로 네트워크 상태를 점검합니다.

6.3 MONITOR, INFO 명령어 활용법

Redis는 두 가지 주요 명령어를 통해 실시간으로 데이터를 모니터링하고 성능을 점검할 수 있습니다: **MONITOR**와 INFO 명령어입니다.

1. MONITOR 명령어

MONITOR 명령어는 Redis 서버에서 실행되는 모든 명령어를 실시간으로 출력합니다. 이 명령어는 성능 테스트나 디버깅을 할 때 유용합니다.

$ redis-cli MONITOR

출력 예시:

1616584450.000000 [0 127.0.0.1:6379] "SET" "mykey" "value"

MONITOR는 실시간으로 모든 명령어를 출력하므로, 프로덕션 환경에서는 성능에 영향을 미칠 수 있으니 주의해서 사용해야 합니다.

2. INFO 명령어

INFO 명령어는 Redis 서버의 상태, 메모리 사용량, 연결된 클라이언트 수 등 다양한 정보를 출력합니다.

$ redis-cli INFO

출력 예시:

# Server
redis_version:6.0.9
redis_git_sha1:00000000
redis_git_dirty:0
os:Linux 4.15.0-1067-generic x86_64
arch_bits:64
uptime_in_seconds:123456
uptime_in_days:1

다양한 정보를 INFO <section> 형식으로 세분화하여 볼 수 있습니다. 예를 들어, INFO memory를 입력하면 메모리 관련 정보만 출력됩니다.

6.4 redis-benchmark 를 이용한 성능 테스트

redis-benchmark는 Redis 서버의 성능을 테스트하는 데 사용되는 도구입니다. 이 명령어를 사용하면 초당 처리할 수 있는 요청 수를 측정할 수 있습니다.

1. 벤치마크 실행 예시

기본적으로 redis-benchmark는 Redis 서버에 다양한 명령어를 전송하여 성능을 측정합니다.

$ redis-benchmark -h <Redis_IP> -p <Redis_Port> -c 50 -n 100000
  • -h: Redis 서버의 IP
  • -p: Redis 서버의 포트
  • -c: 동시 클라이언트 수
  • -n: 총 요청 수

예시:

$ redis-benchmark -h 127.0.0.1 -p 6379 -c 50 -n 100000

이 명령어는 50개의 클라이언트를 동시에 실행하여 Redis 서버에 100,000개의 요청을 보내고 성능을 측정합니다.

2. 벤치마크 결과 해석

실행 후 결과는 초당 처리할 수 있는 요청 수를 보여줍니다. 예를 들어, SET 명령어가 초당 100,000번 처리된다면, Redis는 해당 부하를 충분히 처리할 수 있다고 판단할 수 있습니다.

6.5 Redis Prometheus & Grafana 모니터링 구축

Prometheus와 Grafana를 사용하여 Redis의 성능 및 상태를 실시간으로 모니터링할 수 있습니다. Prometheus는 데이터를 수집하고, Grafana는 데이터를 시각화합니다.

1. Redis Exporter 설치

Redis Exporter는 Prometheus에서 Redis 데이터를 수집할 수 있게 해주는 도구입니다. Redis Exporter를 설치하고 실행하여 Prometheus가 Redis 데이터를 수집하도록 설정할 수 있습니다.

$ wget https://github.com/oliver006/redis_exporter/releases/download/v1.17.0/redis_exporter-v1.17.0.linux-amd64.tar.gz
$ tar xvfz redis_exporter-v1.17.0.linux-amd64.tar.gz
$ ./redis_exporter

Redis Exporter가 실행되면, Prometheus에서 데이터를 수집할 수 있는 엔드포인트가 열립니다.

2. Prometheus 설정

Prometheus의 prometheus.yml 파일에 Redis Exporter의 엔드포인트를 추가합니다.

scrape_configs:
  - job_name: 'redis'
    static_configs:
      - targets: ['<Redis_Exporter_IP>:9121']

3. Grafana 대시보드 설정

Grafana에서 Prometheus 데이터를 시각화하려면, Redis Dashboard를 설정합니다. Grafana에서 Redis 대시보드를 가져오고, Prometheus 데이터를 시각화하여 Redis 서버의 상태와 성능을 모니터링할 수 있습니다.

이를 통해 Redis 성능을 실시간으로 모니터링하고, 장애를 조기에 감지할 수 있습니다.

RSS Feed
마지막 수정일자