Database/Redis

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

noahkim_ 2025. 3. 21. 23:28

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

 

1. 캐시 노드 크기 조정

크기 조정 기준

레디스 클러스터
  • 클러스터 필요 여부 판단
    • 일반 레디스 서버만으로 충분한지 확인
    • 사용중인 클라이언트가 레디스 클러스터를 지원하는 지 확인
  • 클러스터를 사용하는 경우
    • 쓰기 작업을 처리하는 경우
    • 높은 가용성이 요구되는 경우 
    • 메모리 확장/축소가 필요한 경우
  • 요구 사항
    • 최소 3개의 캐시 노드를 마스터로 설정해야 함

 

요구사항 분석
  • 처리해야 할 데이터 양
    • 전체 데이터 양
    • 최대 키 개수
    • 키 당 평균 크기 및 최대 크기
  • 성능 및 트래픽 분석
    • 초당 처리해야 할 키 작업 수
    • 네트워크 트래픽
    • 실행되는 명령어 내역

 

샤딩 고려 사항
  • 샤드 분배 전략 결정 (크게+적게 / 작게+많이 배치)
  • String 형 이외의 자료구조는 샤딩하기 어려움 (특히 Hash 자료형 분산 어려움)
  • 키 하나당 용량이 큰 경우 샤딩하기 어려움 
  • 적절한 노드 크기 설정
    • 너무 작으면 네트워크 대역폭이나 처리량 초과 위험
    • 일정 여유 공간을 확보해야 안정적 운영 가능
    • 명령어의 시간복잡도를 고려하여 효율적으로 수행해야 함

 

클러스터 성능 확인
  • 벤치마크 수행
    • 각 노드의 최대 처리 가능 요청 개수 분석
  • 운영 안정성 체크
    • 헬스 체크 메시지 증가로 운영 불안정 가능성 고려
  • 스케일 조정 결정
    • 다양한 메트릭 정보를 참고하여 스케일 아웃/인을 결정하기

 

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 저장 방지)