Database/Redis

[실전 레디스] 5-3. 레디스 운용 관리: 셋팅

noahkim_ 2025. 3. 21. 23:28

하야시 쇼고 님의 "실전 레디스" 책을 정리한 포스팅 입니다.

 

1. 고려 사항

노드 크기

분석 항목 설명
데이터 - 최대 키 개수
- 키 당 평균 크기
- 키 당 최대 크기
성능 - 실행되는 명령어 내역
- 초당 처리해야 할 키 작업 수
트래픽 네트워크 트래픽

 

레디스 클러스터

분석 항목 설명
필요 여부 확인
- 일반 레디스 서버만으로 충분한지 확인
- 사용중인 클라이언트가 레디스 클러스터를 지원하는 지 확인
요구사항 확인 - 쓰기 작업을 처리하는 경우
- 높은 가용성이 요구되는 경우
- 메모리 확장/축소가 필요한 경우
성능 확인
- 노드 증설: 최소 3개의 캐시 노드를 마스터로 설정해야 함
- 벤치마크 수행: 각 노드의 최대 처리 가능 요청 개수 분석
- 운영 안정성 체크: 헬스 체크 메시지 증가로 운영 불안정 가능성 고려
- 스케일 조정 결정: 다양한 메트릭 정보를 참고하여 스케일 아웃/인을 결정하기

 

샤딩

구분 도입 고려사항
샤드 분배 전략
- 큰 키를 적게 vs 작은 키를 많이 배치 중 선택
- 데이터 불균형 발생 시 부하 분산 어려움
자료구조 제약
- String 자료형은 샤딩 용이
- 복합 자료형은 키 단위로만 분산 가능→ 구조 내 필드 단위 분산은 불가
단일 키 크기
- 키 하나가 너무 크면 분산 자체가 어려움
노드 크기 설정
- 노드 용량이 너무 작으면 네트워크, 메모리, 처리량 병목 발생 가능
- 적절한 여유 공간 확보 필수
명령어 시간복잡도 고려
- O(N) 이상의 명령어(LRANGE, HGETALL, ZREVRANGE)는 데이터량이 많을수록 병목 발생 가능
→ 샤드 간 처리량 균형 필요

 

2. 설정 파일 (redis.conf)

  • 각종 기능의 활성화 및 튜닝에 주로 사용됨
  • config set / config get으로 설정 
  • config rewrite 설정 파일에 반영

 

지시자

카테고리 주요 지시자
네트워크 관련
bind (바인딩 IP 설정)
port (포트 설정)
protected-mode (보안 모드. 접속이 로컬호스트만 가능함)
timeout (클라이언트 연결 타임아웃)
tcp-keepalive (TCP 연결 유지 설정. 클라이언트에 ACK를 보내는 간격)
maxclients (최대 클라이언트 수)
TLS 관련
tls-port (TLS 포트 설정)
tls-cert-file (서버 인증서 경로)
tls-key-file (서버 키 파일 경로)
tls-ca-cert-file (CA 인증서 경로)
tls-auth-clients (클라이언트 인증 요구 여부)
프로세스 관리
daemonize (백그라운드 실행 여부)
pidfile (PID 파일 경로)
supervised (프로세스 감시 모드)
logfile (로그 파일 경로)
loglevel (로그 레벨)
스냅숏 (RDB) 관련
save (스냅숏 주기 설정)
stop-writes-on-bgsave-error (스냅숏 오류 시 쓰기 중단 활성화)
rdbcompression (RDB 압축 여부)
rdbchecksum (RDB 체크섬 활성화)
dbfilename (RDB 파일명)
dir (데이터 저장 경로)
AOF (Append Only File) 관련
appendonly (AOF 사용 여부)
appendfilename (AOF 파일명)
appendfsync (동기화 모드)
no-appendfsync-on-rewrite (리라이트 시 동기화 방지)
auto-aof-rewrite-percentage (리라이트 트리거 비율)
auto-aof-rewrite-min-size (리라이트 최소 크기)
레플리케이션 관련
replicaof (마스터 설정)
masterauth (마스터 인증 정보)
replica-serve-stale-data (구 데이터 제공 여부)
replica-read-only (읽기 전용 모드)
repl-diskless-sync (디스크 없는 동기화)
repl-diskless-sync-delay (동기화 지연 시간)
레디스 클러스터 관련
cluster-enabled (클러스터 모드 활성화)
cluster-config-file (클러스터 설정 파일)
cluster-node-timeout (노드 응답 타임아웃)
cluster-require-full-coverage (전체 슬롯 커버리지 요구 여부)
ACL 기능 관련
aclfile (ACL 설정 파일)
requirepass (기본 인증 비밀번호)
user (사용자별 권한 설정)
클라이언트 추적 관련
tracking-table-max-keys (클라이언트 추적 키 개수 제한)
tracking (클라이언트 추적 활성화 여부)
메모리 최대 사용량 관련
maxmemory (최대 메모리 사용량)
maxmemory-policy (메모리 부족 시 삭제 정책)
동적 단편화 제거 관련
activedefrag (메모리 단편화 제거 활성화)
active-defrag-cycle-min (최소 단편화 제거 주기)
그 외 메모리 관리 관련
lazyfree-lazy-eviction (LRU/LFU 키 제거 시 Lazy Free 적용 여부)
lazyfree-lazy-expire (만료된 키 Lazy Free 적용 여부)
타이머 이벤트 관련
hz (타이머 이벤트 주기 설정)
dynamic-hz (주기 자동 조정 여부)
Lazy Free 기능 관련
lazyfree-lazy-server-del (DEL 명령어 Lazy Free 적용 여부)
lazyfree-lazy-user-del (사용자 명령어 Lazy Free 적용 여부)
멀티스레드 관련
io-threads (I/O 작업을 위한 스레드 개수)
io-threads-do-reads (읽기 작업 멀티스레드 활성화 여부)
커널 OOM 관련
oom-score-adj (OOM 점수 조정)
oom-score-adj-values (OOM 점수 설정 값)
커널 Transparent Huge Page 
THP-enabled (Transparent Huge Page 활성화 여부)
명령어 실행 타임아웃 설정
command-timeout (명령어 실행 시간 초과 제한)
슬로우 로그 관련
slowlog-log-slower-than (기록할 명령 실행 시간 기준)
slowlog-max-len (슬로우 로그 최대 저장 개수)
지연 모니터 관련
latency-monitor-threshold (지연 감지 임계값)
지연 트래킹 기능 관련
latency-tracking-info-percentiles (지연 시간 백분위수 설정)
키 공간 알림 기능 관련
notify-keyspace-events (키 공간 이벤트 알림 설정)
내부 인코딩 기능 관련
hash-max-ziplist-entries (압축 리스트 최대 엔트리 개수)
list-max-ziplist-size (압축 리스트 최대 크기)
CPU Affinity 관련
server-cpu-affinity (서버 CPU 코어 할당 설정)
셧다운 시 동작 관련
shutdown-save (셧다운 시 RDB 저장 여부)
shutdown-nosave (셧다운 시 RDB 저장 방지)