본문 바로가기
C.W.K.
Stream
Lesson 05 of 05 · published

백업, 복원, 재해 복구 훈련

~18 min · chroma, operations

Level 0Scout
0 XP0/41 lessons0/10 achievements
0/120 XP to next level120 XP to go0% complete

Chroma의 디스크 형식은 SQLite와 Parquet로 이루어져

chroma_store/ 디렉터리에는 SQLite 메타데이터 DB와 컬렉션별 Parquet 파일이 있어. 백업은 쓰기 작업을 멈춘 상태에서 이 디렉터리를 복사하는 것이고, 복원은 새 PersistentClient가 복사본을 가리키게 하는 것이야.

실제 서비스에서 통하는 백업 절차

  1. 쓰기 작업을 잠시 멈춰. 멈출 수 없다면 백업 중 들어온 쓰기를 잃을 수 있음을 받아들여야 해.
  2. tar -cf chroma-$(date +%F).tar chroma_store/로 묶거나 rsync로 나란한 디렉터리에 복사해.
  3. 새 클라이언트로 복사본을 열고 문서 개수를 검증해.
  4. 압축 파일을 S3, NAS, 다른 Mac처럼 호스트 밖의 저장소로 보내.

복구 훈련

분기마다 한 번은 지난주 백업을 chroma_store_recovery/에 복원하고 스크립트가 그곳을 가리키게 한 뒤 검색이 여전히 되는지 확인해. 한 번도 복원해 보지 않은 백업은 백업이라고 믿으면 안 돼.

Code

쓰기를 멈춘 상태에서 저장소 스냅숏 만들기·text
# 1. writer 프로세스 중지 (또는 API 를 read-only 로).
# 2. snapshot:
rsync -a --delete chroma_store/ chroma_store_$(date +%F)/
# 3. off-host 위해 tar + 압축:
tar -czf chroma_$(date +%F).tar.gz chroma_store_$(date +%F)/
# 4. write 재개.
백업이 정상적으로 열리는지 검증하기·python
client_test = chromadb.PersistentClient(path='./chroma_store_2026-05-03')
for c in client_test.list_collections():
    coll = client_test.get_collection(c.name)
    print(f'{c.name}: {coll.count()} rows')
    sample = coll.peek(2)
    print(f'  sample id={sample["ids"][0] if sample["ids"] else None}')

External links

Exercise

cron, launchd, 원하는 스케줄러 가운데 하나를 골라 chroma_store/를 매일 나란한 디렉터리에 백업하게 해. 그런 다음 가장 최근 스냅숏을 새 클라이언트로 열고 쿼리 세 개를 실행해 현재 저장소의 결과와 일치하는지 확인하는 복구 훈련을 해.

Progress

Progress is local-only — sign in to sync across devices.
이 페이지에서 버그를 발견하셨거나 피드백이 있으세요?문제 신고

댓글 0

🔔 답글 알림 (로그인 필요)
로그인댓글을 남기려면 로그인해 주세요.

아직 댓글이 없어요. 첫 댓글을 남겨보세요.