"CDC 없이 서비스 DB를 옮긴 이야기" ”수억 Rows를 옮긴 엔지니어링”

25.11.23 yoda


배경

회사에서 외부 증권사 서비스 RDB를 일신상 이유로 무중단 이전해야 하는 태스크가 떨어졌다.

200GB, 서비스는 24시간 운영 중. 담당자는 나 혼자. 그냥 집 가고 싶었다..

처음엔 "그냥 덤프 뜨고 올리면 되는 거 아냐?" 라고 생각했다. 그게 틀렸다는 걸 아는 데 이틀이 걸렸다.


1단계 — 단순한 생각

문제 봉착

가장 단순한 방법부터. 새벽에 풀 덤프 떠서 타겟에 올리면 끝 아닌가?

계산해봤다.

작업 소요 시간
200GB 덤프 약 4~5시간
타겟 리스토어 약 3~4시간
합계 8~9시간 서비스 중단

사수한테 얘기했더니 "새벽이라도 서비스 중단은 안 된다." 라고 바로 거절당했다.

그리고 또 다른 문제. 덤프 뜨는 동안에도 원본 DB에는 트랜잭션이 계속 들어온다. 덤프 완료 시점엔 이미 덤프 내용이 신선도가 떨어지는 데이터가 되어버린다. 어차피 중단해도 데이터가 맞지 않는 구조였다.


2단계 — 바뀐거만 다시 옮기면 되지 않나?

아이디어

풀 덤프를 한 번 뜨고, 그 이후에 변경된 데이터만 다시 옮기면 되지 않을까?

  1. 풀 덤프 도는 동안 바뀐 데이터를 한 번 더 동기화