"CDC 없이 서비스 DB를 옮긴 이야기" ”수억 Rows를 옮긴 엔지니어링”
25.11.23 yoda
회사에서 외부 증권사 서비스 RDB를 일신상 이유로 무중단 이전해야 하는 태스크가 떨어졌다.
200GB, 서비스는 24시간 운영 중. 담당자는 나 혼자. 그냥 집 가고 싶었다..
처음엔 "그냥 덤프 뜨고 올리면 되는 거 아냐?" 라고 생각했다. 그게 틀렸다는 걸 아는 데 이틀이 걸렸다.
가장 단순한 방법부터. 새벽에 풀 덤프 떠서 타겟에 올리면 끝 아닌가?
계산해봤다.
| 작업 | 소요 시간 |
|---|---|
| 200GB 덤프 | 약 4~5시간 |
| 타겟 리스토어 | 약 3~4시간 |
| 합계 | 8~9시간 서비스 중단 |
사수한테 얘기했더니 "새벽이라도 서비스 중단은 안 된다." 라고 바로 거절당했다.
그리고 또 다른 문제. 덤프 뜨는 동안에도 원본 DB에는 트랜잭션이 계속 들어온다. 덤프 완료 시점엔 이미 덤프 내용이 신선도가 떨어지는 데이터가 되어버린다. 어차피 중단해도 데이터가 맞지 않는 구조였다.
풀 덤프를 한 번 뜨고, 그 이후에 변경된 데이터만 다시 옮기면 되지 않을까?