Skip to content

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) 또는 vars PREGO_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별 기본 DBregion(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= 또는 워크플로 확장으로 반영.
Redisredis-migration.md 및 redis-separation 기획에 따라 전용 Redis 서버 증설·redis_host 배치. Redis 메모리/연결 수 기준 증설 트리거는 별도 Runbook 또는 기획으로 정의.

3. DB 증설 절차 (수동)

  1. 상한 초과 확인: 해당 region의 DB 서버에 붙은 테넌트 수(또는 연결 수)를 확인하고, 정책 상한 M을 초과했는지 판단.
  2. 새 DB 서버 프로비저닝: Pulumi(또는 기존 인프라 절차)로 해당 region에 DB 서버 1대 추가. 백업·보안 그룹 등은 기존 Runbook 따름.
  3. 워크플로/Ansible 반영: 새 db_host를 워크플로 vars(예: PREGO_DB_SERVER_IP_2) 또는 인벤토리/그룹으로 추가. 신규 테넌트만 새 DB로 보내려면 Placement와 유사하게 “이 region의 DB 풀에서 여유 있는 db_host 선택” 로직을 vars 또는 Control Plane API(미구현 시 수동 매핑)로 정의.
  4. 기존 테넌트 이전: 기존 테넌트를 새 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 등은 별도 기획 후 확장.

Help