Kubernetes 환경에서 Redis 데이터 조회하기: 실전 가이드

들어가며
Kubernetes 클러스터에서 운영 중인 Redis의 데이터를 조회해야 할 때가 종종 있습니다. 디버깅, 모니터링, 또는 데이터 검증을 위해 Redis 콘솔에 직접 접속해야 하는 상황에서 이 가이드가 도움이 되길 바랍니다.
Redis Pod 접속하기
1. Redis Pod 찾기
먼저 실행 중인 Redis Pod를 찾아야 합니다:
# Redis Pod 목록 확인
kubectl get pods -n <namespace> | grep redis
2. Redis CLI로 접속
두 가지 방법으로 Redis에 접속할 수 있습니다:
# 방법 1: 직접 redis-cli 실행
kubectl exec -it <redis-pod-name> -n <namespace> -- redis-cli
# 방법 2: Pod 쉘로 접속 후 redis-cli 실행
kubectl exec -it <redis-pod-name> -n <namespace> -- /bin/bash
redis-cli
패스워드가 설정된 경우:
# 패스워드와 함께 접속
kubectl exec -it <redis-pod-name> -n <namespace> -- redis-cli -a <password>
데이터 조회 명령어
기본 조회 명령어
Redis에서 자주 사용하는 데이터 조회 명령어들입니다:
# 모든 키 조회
KEYS *
# 특정 패턴의 키 조회
KEYS user:*
# 키 타입 확인
TYPE <key>
# 데이터 타입별 조회
GET <key> # String
HGETALL <key> # Hash
LRANGE <key> 0 -1 # List
SMEMBERS <key> # Set
ZRANGE <key> 0 -1 WITHSCORES # Sorted Set
⚠️ 주의: 프로덕션 환경에서KEYS *
명령은 성능 문제를 일으킬 수 있습니다. 대량의 데이터가 있는 경우SCAN
명령어 사용을 권장합니다.
TTL(Time To Live) 확인
키의 만료 시간을 확인하는 것은 캐시 관리에서 매우 중요합니다:
# 남은 수명 확인 (초 단위)
TTL <key>
# 남은 수명 확인 (밀리초 단위)
PTTL <key>
TTL 명령어 반환 값의 의미:
- 양수: 남은 시간(초)
- -1: 만료 시간이 설정되지 않음 (영구 보존)
- -2: 키가 존재하지 않음
모든 키의 TTL 일괄 확인
실무에서 유용한 스크립트입니다:
kubectl exec -it <redis-pod> -n <namespace> -- redis-cli --eval "
local keys = redis.call('keys', '*')
for i=1,#keys do
local ttl = redis.call('ttl', keys[i])
if ttl > 0 then
print(keys[i] .. ': ' .. ttl .. ' seconds')
elseif ttl == -1 then
print(keys[i] .. ': no expiry')
end
end
" 0
Redis Cluster 모드 특이사항
Redis Cluster를 사용하는 경우 몇 가지 제약사항이 있습니다:
Database 선택 불가
127.0.0.1:6379> SELECT 1
(error) ERR SELECT is not allowed in cluster mode
Redis Cluster는 오직 database 0만 사용할 수 있습니다. 만약 Spring Boot에서 spring.redis.database=1
과 같이 설정했다면, 이는 Cluster 모드와 호환되지 않습니다.
해결 방법
1. 키 네임스페이스 활용
Database를 구분하는 대신 키 prefix를 사용하여 논리적으로 분리합니다:
@Service
public class RedisService {
private static final String DB_PREFIX = "db1:";
public void set(String key, String value) {
redisTemplate.opsForValue().set(DB_PREFIX + key, value);
}
public String get(String key) {
return redisTemplate.opsForValue().get(DB_PREFIX + key);
}
}
2. 모든 노드 데이터 조회
Cluster 모드에서는 데이터가 여러 노드에 분산되어 있으므로, 전체 데이터를 보려면 모든 노드를 확인해야 합니다:
# 모든 Redis 클러스터 노드의 키 조회
for i in {0..5}; do
echo "=== Node $i ==="
kubectl exec -it my-release-redis-cluster-$i -n <namespace> -- redis-cli --scan
done
실전 팁
1. 성능을 고려한 조회
# KEYS 대신 SCAN 사용
SCAN 0 MATCH user:* COUNT 100
2. 파이프라인으로 여러 명령 실행
echo -e "INFO\nDBSIZE\nKEYS *" | kubectl exec -i <redis-pod> -n <namespace> -- redis-cli
3. 결과를 파일로 저장
kubectl exec -it <redis-pod> -n <namespace> -- redis-cli --scan > redis_keys.txt
마치며
Kubernetes 환경에서 Redis를 운영할 때는 Standalone 모드와 Cluster 모드의 차이를 이해하는 것이 중요합니다. 특히 Cluster 모드의 제약사항을 알고 있어야 예상치 못한 문제를 피할 수 있습니다.
데이터 조회 시에는 항상 프로덕션 환경에 미칠 영향을 고려하여, KEYS *
같은 무거운 명령어는 피하고 SCAN
을 사용하는 것을 권장합니다.
태그: #Kubernetes #Redis #DevOps #Database #Cluster