Haru Utils

REDIS HEALTH

Redis 연결·메모리·eviction 장애

Connection refused·timeout·NOAUTH와 OOM·evicted_keys를 분리하고 INFO·CONFIG GET으로 메모리 여유와 정책을 확인한 뒤 데이터 성격에 맞는 조치만 적용합니다.
Redis connection refusedRedis timeout NOAUTHOOM command not allowedmaxmemory-policyevicted_keysRedis memory fragmentation
환경Redis Open Source 7.2·7.4 및 지원 중인 8.x 최신 patch · redis-cli RESP2/RESP3 · standalone/replica 기준
분류데이터베이스
검토일2026-09-02
진행5단계 · 조회 우선

SAFE OPERATING BOUNDARY

중단·복구 기준부터 확인하세요

STOP CONDITIONS

여기서는 멈추세요

  • Redis가 권위 데이터인지 캐시인지, 백업·replica와 허용 가능한 키 손실 범위를 확인하지 못했다면 maxmemory·eviction 정책을 변경하지 않습니다.
  • ACL 비밀번호를 CLI 인자·shell history·문서에 평문으로 넣어야 하거나 TLS 검증을 꺼야 한다면 작업을 중단합니다.
  • evicted_keys가 이미 증가했고 복구 원본이 없거나 persistence가 실패 중이면 추가 eviction 전에 데이터 소유자와 복구 담당자를 호출합니다.
ROLLBACK

복구 기준

CONFIG SET 전 기록한 maxmemory와 maxmemory-policy를 같은 승인된 연결로 원복하고 INFO memory·stats를 다시 확인합니다. 정책 원복은 이미 evict된 키를 되살리지 않으므로 백업·권위 데이터 원본에서 복구해야 합니다. 영구 설정은 작업 전 백업과 배포 관리 소스를 사용하고 CONFIG REWRITE를 즉흥적으로 실행하지 않습니다.

ESCALATION PACK

담당자에게 전달할 자료

  • 민감정보를 제거한 연결 오류 원문, DNS·TCP·TLS·ACL WHOAMI 결과
  • INFO memory·stats·clients·persistence와 CONFIG GET maxmemory·maxmemory-policy 전후 값
  • host 메모리·OOM 로그, evicted_keys·latency·hit/miss 변화와 데이터 복구 가능 여부
2026년 9월 2일 기준 upstream 공식 문서와 현재 지원 버전을 대조했습니다. 먼저 읽기 전용 명령으로 사실을 확인하고, 변경 명령은 영향·백업·복구 경로를 확인한 뒤 승인된 대상에만 적용하세요. <...> 자리표시자는 승인된 리터럴 값으로 직접 치환하고 외부 입력으로 shell 명령을 조립하거나 eval하지 마세요.

BEFORE YOU START

이런 증상에서 시작합니다

  • Connection refused, timeout 또는 connection reset 발생
  • NOAUTH Authentication required 또는 NOPERM 오류 발생
  • OOM command not allowed when used memory > maxmemory 발생
  • evicted_keys 증가, hit rate 저하 또는 redis-server가 OS OOM으로 종료됨

CHECK THE BRANCH

놓치기 쉬운 원인 분기

01

Connection refused인 경우

주소·포트가 맞다면 Redis 프로세스와 listen socket, bind·protected mode, 컨테이너 포트 매핑을 확인합니다. 외부 노출을 위해 bind를 전체 주소로 넓히지 않습니다.

02

timeout 또는 간헐적 지연인 경우

네트워크 단절 외에 blocking command, 느린 fork·persistence, swap, 큰 client output buffer를 확인합니다. 재시도 횟수만 늘리면 부하가 증폭될 수 있습니다.

03

NOAUTH·NOPERM인 경우

자격증명이 틀렸거나 ACL user의 command/key pattern 권한이 부족할 수 있습니다. default user 활성화나 광범위 +@all로 우회하지 말고 최소 ACL을 검토합니다.

04

OOM 또는 eviction 증가인 경우

used_memory와 maxmemory뿐 아니라 mem_not_counted_for_evict, RSS, fragmentation, client buffer, persistence fork 여유를 함께 봅니다. 캐시와 영구 데이터는 eviction 정책을 다르게 선택해야 합니다.

FOLLOW THE FLOW

순서대로 확인하기

1
조회시스템을 변경하지 않는 확인 단계

1분 점검: 연결·역할·메모리 핵심 지표

APPROVED_REDIS_CLI는 TLS와 --askpass 또는 로컬 socket을 적용한 조직 표준 redis-cli 명령으로 바꿉니다. 비밀번호를 명령행에 직접 넣지 않습니다.

응답 확인
<APPROVED_REDIS_CLI> PING
서버·역할
<APPROVED_REDIS_CLI> INFO server
<APPROVED_REDIS_CLI> INFO replication
메모리 핵심 지표
<APPROVED_REDIS_CLI> INFO memory
eviction·연결 통계
<APPROVED_REDIS_CLI> INFO stats
<APPROVED_REDIS_CLI> INFO clients
결과 읽기

PING 실패는 연결/인증 분기입니다. PING 성공 뒤 used_memory가 maxmemory에 가깝거나 evicted_keys·rejected_connections가 증가하면 메모리/부하 분기로 이동합니다.

다음 판단

INFO 출력의 run_id, 주소, replica 정보는 외부 공유 전에 마스킹합니다.

2
조회시스템을 변경하지 않는 확인 단계

DNS·포트·TLS·ACL 연결 경로 확인

애플리케이션과 같은 호스트·네트워크에서 이름 해석과 TCP/TLS를 확인하고 Redis ACL identity를 읽습니다.

이름 해석
getent ahosts <REDIS_HOST>
TCP 포트
nc -vz -w 3 <REDIS_HOST> <REDIS_PORT>
TLS 인증서 검증
openssl s_client -connect <REDIS_HOST>:<TLS_PORT> -servername <REDIS_HOST> -verify_return_error </dev/null
TLS를 사용하지 않는 승인된 로컬 socket 구성이라면 생략합니다. -verify 0이나 인증서 무시 옵션을 쓰지 않습니다.
현재 ACL 사용자
<APPROVED_REDIS_CLI> ACL WHOAMI
결과 읽기

TCP부터 실패하면 listen/방화벽/경로, TLS만 실패하면 CA·이름·시간, PING에서 NOAUTH/NOPERM이면 ACL 분기입니다.

다음 판단

네트워크 개방과 ACL 확대를 동시에 하지 말고 실패 계층 하나만 수정안으로 준비합니다.

3
조회시스템을 변경하지 않는 확인 단계

maxmemory·policy·메모리 구성 확인

runtime 설정과 메모리 통계를 조회해 dataset, allocator, client, replication/persistence buffer를 구분합니다.

메모리 제한과 eviction 정책
<APPROVED_REDIS_CLI> CONFIG GET maxmemory
<APPROVED_REDIS_CLI> CONFIG GET maxmemory-policy
상세 메모리
<APPROVED_REDIS_CLI> MEMORY STATS
키 공간과 만료
<APPROVED_REDIS_CLI> INFO keyspace
지연 진단
<APPROVED_REDIS_CLI> LATENCY DOCTOR
결과 읽기

noeviction은 한도 도달 시 쓰기 오류, allkeys/volatile 정책은 조건에 맞는 키 제거를 의미합니다. evicted_keys가 늘면 데이터가 이미 제거됐으므로 단순 설정 원복으로 복구되지 않습니다.

다음 판단

캐시인지 권위 데이터인지, TTL 적용률과 허용 가능한 eviction을 데이터 소유자와 확인합니다.

4
주의서버 부하나 권한을 고려할 단계

OS·persistence·client 압박 확인

Redis 호스트에서 RSS, swap, OOM, fork/persistence 상태와 큰 client buffer를 확인합니다. CLIENT KILL이나 FLUSH 명령은 실행하지 않습니다.

호스트 메모리
free -h
ps -C redis-server -o pid,user,%cpu,%mem,rss,vsz,etime,cmd
Redis 서비스 로그
sudo journalctl -u redis-server.service --since '-30 min' --no-pager
배포판에서 실제 unit 이름을 확인해 바꿉니다. 로그의 key·client·내부 주소·경로는 외부 공유 전 마스킹합니다.
커널 OOM 로그
sudo journalctl -k --since '-30 min' --no-pager | grep -E 'redis|Out of memory|Killed process'
-k는 kernel transport만 조회하므로 -u redis-server.service와 결합하지 않습니다. 출력이 없다는 grep 종료 코드는 OOM 증거가 없다는 뜻일 수 있습니다.
persistence 상태
<APPROVED_REDIS_CLI> INFO persistence
client buffer 요약
<APPROVED_REDIS_CLI> CLIENT LIST TYPE NORMAL
client name·address가 포함됩니다. 외부 공유 전 마스킹하고 출력량이 큰 환경에서는 운영 도구의 집계 화면을 우선 사용합니다.
결과 읽기

RSS가 used_memory보다 큰 이유를 fragmentation·allocator·fork·client buffer로 나눕니다. rdb/aof 작업 실패나 OS OOM이면 eviction 정책만 바꿔서는 해결되지 않습니다.

다음 판단

백업·replica 상태, 여유 메모리, 데이터 성격을 확인한 뒤 용량·TTL·정책·client 제한 중 하나의 변경을 승인받습니다.

5
변경데이터·서비스 상태가 달라질 수 있는 단계

승인된 임시 메모리 한도·정책 적용과 검증

CONFIG SET은 즉시 동작을 바꾸며 정책에 따라 키가 제거될 수 있습니다. 기존 값과 백업·replica를 기록하고 데이터 소유자가 승인한 경우에만 한 분기씩 적용합니다.

변경 단계입니다. 실행 전 대상 이름과 경로, 서비스 중단 영향, 복구 방법을 다시 확인하세요.
변경 전 runtime 값 보관
<APPROVED_REDIS_CLI> CONFIG GET maxmemory
<APPROVED_REDIS_CLI> CONFIG GET maxmemory-policy
<APPROVED_REDIS_CLI> INFO memory
<APPROVED_REDIS_CLI> INFO persistence
A. 승인된 maxmemory 적용
<APPROVED_REDIS_CLI> CONFIG SET maxmemory <APPROVED_BYTES>
현재 used_memory와 복제·AOF/RDB·client buffer 여유를 뺀 호스트 메모리보다 낮게 잡지 않습니다. 값을 낮추면 즉시 eviction이 발생할 수 있습니다.
B. 승인된 eviction 정책 적용
<APPROVED_REDIS_CLI> CONFIG SET maxmemory-policy <APPROVED_POLICY>
A와 B를 한 번에 실행하지 않습니다. 권위 데이터에는 캐시용 eviction 정책을 적용하지 말고, 정책 변경은 이미 제거된 키를 복구하지 않습니다.
적용 후 추적
<APPROVED_REDIS_CLI> CONFIG GET maxmemory
<APPROVED_REDIS_CLI> CONFIG GET maxmemory-policy
<APPROVED_REDIS_CLI> INFO memory
<APPROVED_REDIS_CLI> INFO stats
결과 읽기

OOM 오류가 멈추고 latency·evicted_keys·keyspace hit/miss와 host available memory가 허용 범위여야 합니다. eviction이 예상보다 빠르면 즉시 추가 변경을 멈춥니다.

다음 판단

runtime 변경은 재시작 후 사라질 수 있으므로 검증 뒤 소스 관리 설정에 동일 값을 백업·리뷰 절차로 반영합니다. 실패하면 기록한 이전 CONFIG SET 값으로 원복하되 제거된 키는 백업·원본 시스템에서 복구하고, 재발 방지를 위해 메모리·eviction·client buffer·persistence 경보를 둡니다.

PRIMARY REFERENCES

공식 문서

배포판과 버전에 따라 옵션·로그 위치가 다를 수 있습니다. 실행 전 서버의 --help와 로컬 매뉴얼을 함께 확인하세요.

도구 빠른 검색

최근 사용한 도구를 다시 열거나, 이름과 기능으로 검색하세요.

검색어와 도구의 입력·결과는 저장하지 않습니다.

↑↓ 이동 · Enter 열기 · Esc 닫기