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 수가 늘어날 수록 성능도 선형적으로 증가하는 것을 확인하였습니다.
시스템 설정
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
반응형