Dev/DevOps

Redis 성능 향상 방법

newtype 2022. 10. 13. 09:38

Redis 성능 향상 방안에 대해 조사하고, 테스트 한 내용입니다.

성능 향상 방안

스케일 up

  • 스케일 up은 CPU 성능을 올려 redis 성능을 올리는 방법입니다. Redis는 싱글 스레드로 구현되어 있어서, core가 많은 장비보다 core당 속도가 높은 것이 유리합니다.

스케이일 out

  • 스케이일 out은 Redis를 멀티 cluster로 구성해서 성능을 올리는 방법입니다.

cluster 구성방법 변경

  • 샤딩: 데이터를 나눠서 저장하는 방법으로 get/set의 성능이 향상됩니다.
  • 리플리케이션: 데이터를 복제하는 방법으로 master 하나에 slave 여러개로 구성하여, app 에서 master에는 set 하고 slave 에는 get 하는 방식으로 read/write 채널이 분리되어야 합니다. 이 방법은 get의 성능이 향상됩니다.
  • cluster 설정은 이전 포스트(Redis Cluster 구성)를 참고

테스트

테스트 조건
  • node 스팩: CPU 2 mhz 4 core, RAM 16 GB
  • node를 3 ~ 6개로 구성해서 redis-benchmark를 사용해서 밴치마킹했고, 5번씩 테스트한 평균값으로 결과를 취합했습니다.
  • node별로 샤딩 하여 구성하였고, 현업에서는 데이터 유실방지를 위해 HA 구성을 하므로 node하나에 master-slave로 리플리케이션 구성하였습니다.
  • client를 300개로 테스트했습니다. (-c 300)
  • data 크기를 25,000 bytes로 테스트했습니다. (-d 25000)
테스트 결과
redis-benchmark -h 127.0.0.1 -c 300 -d 25000 -q --cluster
  • node 수가 늘어날 수록 성능도 선형적으로 증가하는 것을 확인하였습니다.

node 개수별 Redis 성능 테스트 결과

시스템 설정

somaxconn

  • linux 기본값은 128이고, 65535로 수정합니다.
즉시 설정
sysctl -w net.core.somaxconn=65535
영구 설정
echo "net.core.somaxconn=65535" >> /etc/sysctl.conf

overcommit_memory

  • linux 기본값은 0이고, 1로 수정합니다.
즉시 설정
sysctl -w vm.overcommit_memory=1
영구 설정
echo "vm.overcommit_memory=1" >> /etc/sysctl.conf

transparent_hugepage

  • 기본값은 always고 naver로 설정합니다.

Redis 설정

aof

  • 파일로 데이터를 저장 해야 할 경우에는 Disk I/O를 줄이기 위해 1초마다(everysec) 저장하도록 설정합니다.
  • 데이터 저장이 필요없으면 aof를 no로 설정합니다.
appendfasync everysec
appendfasync no

maxmemory

  • 최대 메모리 제한을 줍니다.
  • key에는 TTL 설정을 합니다.
  • key에 TTL 설정을 할 수 없는 경우는 삭제 정책을 설정합니다.
maxmemory 1000000000
maxmemory-policy allkeys-lru
반응형