Meta DB Backup Guide(KR) - cloud-barista/cb-spider GitHub Wiki

Meta DB λ°±μ—… 및 볡ꡬ κ°€μ΄λ“œ

Language: English | ν•œκ΅­μ–΄

1. κ°œμš”

  • CB-SpiderλŠ” λͺ¨λ“  관리 메타데이터(CSP μ—°κ²° μ„€μ •, μžμ› IID λ“±)λ₯Ό 단일 SQLite3 λ°μ΄ν„°λ² μ΄μŠ€ 파일(meta_db/cb-spider.db)에 μ €μž₯ν•œλ‹€.
  • 이 파일이 ν›Όμ†λ˜κ±°λ‚˜ μ‹€μˆ˜λ‘œ μ‚­μ œλ˜λ©΄, Spiderκ°€ μ—¬λŸ¬ CSP 및 Regionμ—μ„œ 관리 쀑인 μžμ›μ˜ 식별 및 관리가 맀우 μ–΄λ €μ›Œμ§„λ‹€.
  • μ΄λŸ¬ν•œ μœ„ν—˜μ„ μ™„ν™”ν•˜κΈ° μœ„ν•΄ CB-SpiderλŠ” SQLite3의 VACUUM INTOλ₯Ό ν™œμš©ν•œ μžλ™ λ°±κ·ΈλΌμš΄λ“œ λ°±μ—… κΈ°λŠ₯을 μ œκ³΅ν•œλ‹€.
β”Œβ”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”
β”‚                   CB-Spider Meta DB Backup                    β”‚
β”‚                                                               β”‚
β”‚  meta_db/                                                     β”‚
β”‚  β”œβ”€β”€ cb-spider.db                     ← 운영 Meta DB           β”‚
β”‚  └── backups/                         ← λ°±μ—… 디렉토리            β”‚
β”‚      β”œβ”€β”€ cb-spider_backup_20260305_060000.db                  β”‚
β”‚      β”œβ”€β”€ cb-spider_backup_20260305_120000.db                  β”‚
β”‚      β”œβ”€β”€ cb-spider_backup_20260305_180000.db                  β”‚
β”‚      └── ...  (MaxCountκΉŒμ§€ μœ μ§€, 였래된 것뢀터 λ‘œν…Œμ΄μ…˜)             β”‚
β””β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”˜

2. λ°±μ—… μ •μ±…

2.1 온라인 λ°±μ—… (VACUUM INTO)

  • SQLite3의 VACUUM INTO λͺ…령을 μ‚¬μš©ν•˜μ—¬ 백업을 μˆ˜ν–‰ν•œλ‹€.
  • μ™„μ „ν•œ 온라인 μž‘μ—…μœΌλ‘œ, λ°±μ—… 쀑에도 Meta DB에 λŒ€ν•œ 읽기/μ“°κΈ°κ°€ μ •μƒμ μœΌλ‘œ κ³„μ†λœλ‹€.
  • λ°±μ—… νŒŒμΌμ€ μ‹€ν–‰ μ‹œμ μ˜ λ°μ΄ν„°λ² μ΄μŠ€μ— λŒ€ν•œ μ΅œμ ν™”λœ 일관성 μžˆλŠ” μŠ€λƒ…μƒ·μ΄λ‹€.

2.2 λ°±μ—… μ£ΌκΈ°

ν•­λͺ© κΈ°λ³Έκ°’ μ„€λͺ…
μ‹œμž‘ μ‹œ λ°±μ—… 항상 Spider μ„œλ²„ μ‹œμž‘ μ‹œ μ¦‰μ‹œ λ°±μ—… μˆ˜ν–‰
주기적 λ°±μ—… λ§€ 6μ‹œκ°„ μ„€μ •λœ κ°„κ²©μœΌλ‘œ λ°±κ·ΈλΌμš΄λ“œ μŠ€μΌ€μ€„λŸ¬ μ‹€ν–‰
μ΅œμ†Œ 간격 1λΆ„ 1λΆ„ 미만 값은 μžλ™μœΌλ‘œ 1λΆ„μœΌλ‘œ μ‘°μ •

2.3 보관 μ •μ±… (λ‘œν…Œμ΄μ…˜)

  • μ΅œλŒ€ 보관 개수(MaxCount)만 μ μš©λœλ‹€.
  • λ°±μ—… 파일 μˆ˜κ°€ MaxCountλ₯Ό μ΄ˆκ³Όν•˜λ©΄ κ°€μž₯ 였래된 νŒŒμΌλΆ€ν„° μ‚­μ œλœλ‹€.
  • μ‹œκ°„ 기반 λ§Œλ£ŒλŠ” μ—†μœΌλ©°, μˆœμˆ˜ν•˜κ²Œ 개수 기반으둜 λ³΄κ΄€ν•œλ‹€.
ν•­λͺ© κΈ°λ³Έκ°’ μ„€λͺ…
μ΅œλŒ€ 보관 개수 10 μœ μ§€ν•  λ°±μ—… 파일 수

2.4 λ°±μ—… 파일 넀이밍

cb-spider_backup_YYYYMMDD_HHMMSS.db
  • μ˜ˆμ‹œ: cb-spider_backup_20260305_180000.db
  • 파일λͺ…(νƒ€μž„μŠ€νƒ¬ν”„)순으둜 μ •λ ¬λ˜μ–΄ λ‘œν…Œμ΄μ…˜λœλ‹€.

3. μ„€μ •

λͺ¨λ“  λ°±μ—… 섀정은 setup.env의 ν™˜κ²½λ³€μˆ˜λ‘œ μ„€μ •ν•œλ‹€.
λͺ¨λ“  섀정은 선택사항이닀. μ„€μ •ν•˜μ§€ μ•ŠμœΌλ©΄ 였λ₯˜ 없이 기본값이 μ μš©λœλ‹€.

ν™˜κ²½λ³€μˆ˜ κΈ°λ³Έκ°’ μ„€λͺ…
SPIDER_BACKUP_ENABLED true λ°±μ—… ν™œμ„±ν™”/λΉ„ν™œμ„±ν™” (true, false, on, off, 1, 0)
SPIDER_BACKUP_INTERVAL 6h λ°±μ—… μ£ΌκΈ°, Go duration ν˜•μ‹ (1h, 30m, 24h λ“±)
SPIDER_BACKUP_DIR $CBSPIDER_ROOT/meta_db/backups λ°±μ—… 파일 μ €μž₯ 디렉토리
SPIDER_BACKUP_MAX_COUNT 10 μ΅œλŒ€ 보관 λ°±μ—… 파일 수

3.1 μ„€μ • μ˜ˆμ‹œ

κΈ°λ³Έ μ„€μ • (별도 μ„€μ • λΆˆν•„μš”)

# λͺ¨λ“  κΈ°λ³Έκ°’ 적용: ν™œμ„±ν™”, 6μ‹œκ°„ 간격, 10개 보관
# ν™˜κ²½λ³€μˆ˜ μ„€μ • 없이 μ‚¬μš© κ°€λŠ₯

κ³ λΉˆλ„ λ°±μ—…

export SPIDER_BACKUP_INTERVAL=1h
export SPIDER_BACKUP_MAX_COUNT=24

일 1회 λ°±μ—…

export SPIDER_BACKUP_INTERVAL=24h
export SPIDER_BACKUP_MAX_COUNT=7

λ°±μ—… λΉ„ν™œμ„±ν™”

export SPIDER_BACKUP_ENABLED=false

4. 볡ꡬ 절차

Meta DB(cb-spider.db)κ°€ ν›Όμ†λ˜κ±°λ‚˜ μ‚­μ œλœ 경우, κ°€μž₯ μ΅œμ‹  λ°±μ—…μœΌλ‘œ λ³΅μ›ν•œλ‹€:

4.1 볡ꡬ 단계

Step 1.  CB-Spider μ„œλ²„λ₯Ό μ€‘μ§€ν•œλ‹€.
Step 2.  (선택) ν›Όμ†λœ DB νŒŒμΌμ„ 이동 λ˜λŠ” 이름 λ³€κ²½ν•œλ‹€:
           $ mv meta_db/cb-spider.db meta_db/cb-spider.db.corrupted
Step 3.  μ΅œμ‹  λ°±μ—… νŒŒμΌμ„ 운영 DB둜 λ³΅μ‚¬ν•œλ‹€:
           $ cp meta_db/backups/cb-spider_backup_20260305_180000.db meta_db/cb-spider.db
Step 4.  CB-Spider μ„œλ²„λ₯Ό μž¬μ‹œμž‘ν•œλ‹€.

μ€‘μš”: SQLiteκ°€ 파일 μˆ˜μ€€ μž κΈˆμ„ μ‚¬μš©ν•˜λ―€λ‘œ, DB 파일 ꡐ체 전에 λ°˜λ“œμ‹œ μ„œλ²„λ₯Ό 쀑지해야 ν•œλ‹€.

4.2 μ΅œμ‹  λ°±μ—… 확인

# μ‹œκ°„μˆœμœΌλ‘œ λ°±μ—… λͺ©λ‘ 확인 (μ΅œμ‹ μ΄ λ§ˆμ§€λ§‰)
$ ls -lt meta_db/backups/

파일λͺ…에 ν¬ν•¨λœ νƒ€μž„μŠ€νƒ¬ν”„κ°€ κ°€μž₯ 졜근인 파일이 μ΅œμ‹  백업이닀.

5. λ‘œκΉ…

λͺ¨λ“  λ°±μ—… μž‘μ—…μ€ cb-logλ₯Ό 톡해 [MSB] (Meta Store Backup) μ ‘λ‘μ–΄λ‘œ 둜그λ₯Ό κΈ°λ‘ν•œλ‹€:

둜그 레벨 λ©”μ‹œμ§€ μ„€λͺ…
INFO [MSB] Meta DB Backup Scheduler started. μŠ€μΌ€μ€„λŸ¬ μ΄ˆκΈ°ν™”
INFO [MSB] Starting meta DB backup... λ°±μ—… μ£ΌκΈ° μ‹œμž‘
INFO [MSB] Meta DB backup completed: <경둜> (took <μ†Œμš”μ‹œκ°„>) λ°±μ—… 성곡
INFO [MSB] Deleted old backup: <파일λͺ…> λ‘œν…Œμ΄μ…˜ 정리
WARN [MSB] Meta DB file not found: <경둜>. Skipping backup. 원본 DB μ—†μŒ
ERROR [MSB] Meta DB backup failed: <μ—λŸ¬> λ°±μ—… μ‹€νŒ¨
ERROR [MSB] Backup rotation failed: <μ—λŸ¬> λ‘œν…Œμ΄μ…˜ μ‹€νŒ¨

6. μ•„ν‚€ν…μ²˜

apiserver.go (main)
    β”‚
    β”œβ”€β”€ LoadBackupConfig()         ← ν™˜κ²½λ³€μˆ˜ 읽기 (backup_config.go)
    β”‚
    └── StartBackupScheduler()     ← λ°±κ·ΈλΌμš΄λ“œ goroutine μ‹œμž‘ (backup_scheduler.go)
            β”‚
            β”œβ”€β”€ μ„œλ²„ μ‹œμž‘ μ‹œ μ¦‰μ‹œ λ°±μ—…
            β”‚
            └── 주기적 반볡 (time.Ticker)
                    β”‚
                    β”œβ”€β”€ BackupMetaDB()      ← VACUUM INTO (backup.go)
                    β”‚
                    └── RotateBackups()     ← MaxCount 초과 μ‹œ 였래된 것 μ‚­μ œ (backup.go)
μ†ŒμŠ€ 파일 μ„€λͺ…
info-store/backup_config.go μ•ˆμ „ν•œ 기본값을 κ°€μ§„ μ„€μ • νŒŒμ‹±
info-store/backup.go 핡심 λ°±μ—… 둜직 (VACUUM INTO) 및 λ‘œν…Œμ΄μ…˜
info-store/backup_scheduler.go Graceful shutdown을 μ§€μ›ν•˜λŠ” λ°±κ·ΈλΌμš΄λ“œ μŠ€μΌ€μ€„λŸ¬
⚠️ **GitHub.com Fallback** ⚠️