English {#english}
DB and Redis placement rules and scaling procedures. Covers db_host/redis_host from workflow and Ansible, region default DB, per-server tenant cap, and manual scaling steps. Ref: tenant-onboard-resource-allocation-flow-plan §6.7 (R7), provision-tenant-pipeline, redis-migration. Full details: see Korean section below.
한국어 {#korean}
Runbook: DB·Redis 증설·배치 정책 (R7)
목적: DB 서버·Redis 리소스의 배치 규칙과 증설 시 수동 절차를 정리.
참조: tenant-onboard-resource-allocation-flow-plan §6.7 (R7), provision-tenant-pipeline, redis-migration.
1. 현재 동작
- db_host: 프로비저닝 워크플로에서 resolve-server 출력(
db_server_ip) 또는 varsPREGO_DB_SERVER_IP로 결정. region별 기본 DB 서버는 Pulumi stack output 또는 워크플로/Ansible vars로 관리. - redis_host: Ansible 인벤토리·vars 또는 Redis 분리 시 redis-migration.md 절차에 따름.
- Control Plane은 현재 DB 노드 풀·Redis 노드 풀을 관리하지 않음. 테넌트별 db_host/redis_host는 워크플로·인벤토리에서만 사용.
2. 정책 (권장)
| 항목 | 내용 |
|---|---|
| Region별 기본 DB | region(sg/us/eu)마다 기본 db_host 1대를 vars 또는 Pulumi output으로 정의. 신규 테넌트는 해당 region 기본 DB에 배치. |
| DB 서버당 상한 | DB 서버 1대당 테넌트 수(또는 연결 수) 상한 M을 정하고, 초과 시 아래 증설 절차 수행. (M은 운영 정책으로 확정.) |
| 플랜별 분리(선택) | Enterprise 전용 DB 풀 등이 필요하면 별도 기획(saas-db-separation) 후 Control Plane GET /internal/db-host?region=&plan_tier= 또는 워크플로 확장으로 반영. |
| Redis | redis-migration.md 및 redis-separation 기획에 따라 전용 Redis 서버 증설·redis_host 배치. Redis 메모리/연결 수 기준 증설 트리거는 별도 Runbook 또는 기획으로 정의. |
3. DB 증설 절차 (수동)
- 상한 초과 확인: 해당 region의 DB 서버에 붙은 테넌트 수(또는 연결 수)를 확인하고, 정책 상한 M을 초과했는지 판단.
- 새 DB 서버 프로비저닝: Pulumi(또는 기존 인프라 절차)로 해당 region에 DB 서버 1대 추가. 백업·보안 그룹 등은 기존 Runbook 따름.
- 워크플로/Ansible 반영: 새 db_host를 워크플로 vars(예:
PREGO_DB_SERVER_IP_2) 또는 인벤토리/그룹으로 추가. 신규 테넌트만 새 DB로 보내려면 Placement와 유사하게 “이 region의 DB 풀에서 여유 있는 db_host 선택” 로직을 vars 또는 Control Plane API(미구현 시 수동 매핑)로 정의. - 기존 테넌트 이전: 기존 테넌트를 새 DB로 이전하는 것은 별도 마이그레이션 기획·Runbook 필요.
4. Redis 증설·배치
- Redis 전용 서버 추가·redis_host 배치는 redis-migration.md 및 redis-separation 기획 참고.
- Redis 메모리/연결 수 기준 “증설 트리거” 및 자동화는 별도 기획으로 정의.
5. GET /internal/db-host (R7, 구현됨)
- 엔드포인트:
GET /internal/db-host?region=sg(optional:plan_tier— 추후 확장용). Bearer INTERNAL_API_KEY 필요. - 동작: Control Plane이 region(sg/us/eu)에 따라 env DB_HOST_SG, DB_HOST_US, DB_HOST_EU 중 해당 값을 반환.
{ "db_host": "10.0.0.1" }. 미설정 시 503. - 설정:
wrangler secret put DB_HOST_SG등 또는 vars로 region별 DB 호스트 설정. - 워크플로 연동:
provision-tenant.yml의 resolve-server job에서 Fetch db_host from Control Plane (R7) 단계가GET /internal/db-host?region=<inputs.region>을 호출하고, 200이면 해당 값을db_server_ip로 사용한다. Control Plane에 region별 DB_HOST_*가 설정되어 있으면 Pulumi 출력·vars보다 우선한다.
추후 선택: DB 노드 풀 테이블(D1 db_nodes), plan_tier별 전용 DB 등은 별도 기획 후 확장.