English {#english}
Switch from in-app local Redis to a dedicated Redis server: prepare (Pulumi Redis VM, firewall 6379, redis_requirepass, AOF), verify Redis from app node, then update Ansible inventory and common_site_config. Rollback: point back to local Redis. Ref: redis-separation-pulumi-ansible-plan. Full details: see Korean section below.
한국어 {#korean}
Runbook: Redis 서버 분리 전환·검증·롤백
목적: App 서버 내 로컬 Redis에서 전용 Redis 서버로 전환하는 절차, 검증, 롤백 방법.
Ref: redis-separation-pulumi-ansible-plan.
1. 전환 전 준비
| 항목 | 확인 |
|---|---|
| Redis 서버(전용 VM) 생성 | Pulumi pulumi up 후 pulumi stack output redis_server_ip 확인 |
| 방화벽 | 6379는 App 노드 IP만 허용, Public 차단 |
| Redis 비밀번호 | Ansible Vault 또는 -e redis_requirepass=..., -e redis_password=... 준비 |
| AOF | redis_server role 기본값 redis_appendonly: yes |
| 메모리 정책 | playbook 또는 role vars에서 redis_maxmemory: "4gb", redis_maxmemory_policy: noeviction |
2. Redis 서버 기능 점검
2.1 App 노드에서 접속 테스트
# Redis 서버 IP와 비밀번호로 pingredis-cli -h REDIS_SERVER_IP -p 6379 -a 'YOUR_PASSWORD' ping# 응답: PONG2.2 DB 번호 분리 동작 확인
redis-cli -h REDIS_SERVER_IP -p 6379 -a 'YOUR_PASSWORD' -n 1 set t 1redis-cli -h REDIS_SERVER_IP -p 6379 -a 'YOUR_PASSWORD' -n 2 get t# nil 이어야 정상 (DB 1과 2는 분리됨)3. 스테이징 전환 (권장)
- 스테이징 인벤토리에
prego_redis_servers추가,redis_01.ansible_host= Redis 서버 IP. - 스테이징
prego_nodesgroup_vars에redis_host,redis_password(또는 -e) 설정. - Playbook 실행: Redis 서버 play → App 서버 play.
- 확인: 로그인/세션, background job, 실시간(socketio), 에러 로그에 redis connection error 없음.
4. 프로덕션 롤링 전환 절차
순서: 소비자(Worker)를 먼저 멈춘 뒤 연결 변경, 재기동.
- Worker 중지 (큐 소비 중단)
- Scheduler 중지
- Backend(및 SocketIO) 설정 적용 후 재시작
- Worker 재시작
- Scheduler 재시작
Ansible으로 전환 시: 인벤토리·group_vars에 redis_host·redis_password 반영 후 playbook 실행. 기존 로컬 Redis 컨테이너/서비스는 compose 또는 수동으로 제거(또는 1~2일 롤백 대비 유지).
5. 전환 후 검증
| 항목 | 확인 방법 |
|---|---|
| Redis 연결 수 | Redis 서버에서 redis-cli -a '...' info clients → connected_clients 증가 |
| App 로그 | redis connection error 0건 |
| Job 실행 | 간단한 background job 트리거 후 정상 처리 |
| 캐시·ops | keyspace_hits/misses, instantaneous_ops_per_sec 확인 |
6. 롤백
- 설정 원복:
common_site_config.json에서 redis_cache/redis_queue/redis_socketio를 로컬 Redis URL로 되돌림 (예:redis://:password@localhost:6379/1등). - 재시작 순서: Worker/Scheduler 중지 → Backend 재시작 → Worker/Scheduler 재시작.
- 롤백용 설정 원복 PR/commit을 미리 준비해 두는 것을 권장.
7. 운영 요건 (공유 Redis 사용 시)
- 테넌트별 Throttling·Rate Limiting: 중앙 Redis를 여러 테넌트가 공유하므로, 특정 테넌트가 시스템 전체 리소스를 점유하지 않도록 테넌트별 API 호출 제한을 설정할 것. Zuplo·API Gateway 정책 또는 애플리케이션 레벨에서 적용. 기획서 §8.4 참조.
- Health Check: App 컨테이너는 상태 체크 엔드포인트를 노출할 것. 향후 L7 로드밸런서(Nginx/HAProxy) 도입 시 장애 노드 라우팅 제외에 사용.
8. Production 전환 체크리스트 요약
- Redis 서버 생성·방화벽·6379 App CIDR만 허용
- requirepass·AOF·maxmemory 정책 설정
- App 노드에서 redis-cli 접속·DB 1/2/3 분리 확인
- 스테이징에서 먼저 전환·검증
- 프로덕션: Worker 중지 → Scheduler 중지 → Backend/SocketIO 재시작 → Worker/Scheduler 재시작
- 전환 후 connected_clients·에러 로그·Job·캐시 확인
- 롤백용 설정/코드 준비
- (권장) 테넌트별 Rate Limiting·Throttling 정책 적용
- (선택) 전환 안정화 후 Redis conf 튜닝 적용 — resource-optimization-safe-adoption-plan §2.1 (maxmemory·allkeys-lru 등).