Skip to content

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 uppulumi stack output redis_server_ip 확인
방화벽6379는 App 노드 IP만 허용, Public 차단
Redis 비밀번호Ansible Vault 또는 -e redis_requirepass=..., -e redis_password=... 준비
AOFredis_server role 기본값 redis_appendonly: yes
메모리 정책playbook 또는 role vars에서 redis_maxmemory: "4gb", redis_maxmemory_policy: noeviction

2. Redis 서버 기능 점검

2.1 App 노드에서 접속 테스트

Terminal window
# Redis 서버 IP와 비밀번호로 ping
redis-cli -h REDIS_SERVER_IP -p 6379 -a 'YOUR_PASSWORD' ping
# 응답: PONG

2.2 DB 번호 분리 동작 확인

Terminal window
redis-cli -h REDIS_SERVER_IP -p 6379 -a 'YOUR_PASSWORD' -n 1 set t 1
redis-cli -h REDIS_SERVER_IP -p 6379 -a 'YOUR_PASSWORD' -n 2 get t
# nil 이어야 정상 (DB 1과 2는 분리됨)

3. 스테이징 전환 (권장)

  1. 스테이징 인벤토리에 prego_redis_servers 추가, redis_01.ansible_host = Redis 서버 IP.
  2. 스테이징 prego_nodes group_vars에 redis_host, redis_password(또는 -e) 설정.
  3. Playbook 실행: Redis 서버 play → App 서버 play.
  4. 확인: 로그인/세션, background job, 실시간(socketio), 에러 로그에 redis connection error 없음.

4. 프로덕션 롤링 전환 절차

순서: 소비자(Worker)를 먼저 멈춘 뒤 연결 변경, 재기동.

  1. Worker 중지 (큐 소비 중단)
  2. Scheduler 중지
  3. Backend(및 SocketIO) 설정 적용 후 재시작
  4. Worker 재시작
  5. 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 트리거 후 정상 처리
캐시·opskeyspace_hits/misses, instantaneous_ops_per_sec 확인

6. 롤백

  1. 설정 원복: common_site_config.json에서 redis_cache/redis_queue/redis_socketio를 로컬 Redis URL로 되돌림 (예: redis://:password@localhost:6379/1 등).
  2. 재시작 순서: Worker/Scheduler 중지 → Backend 재시작 → Worker/Scheduler 재시작.
  3. 롤백용 설정 원복 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 등).
Help