Notice
Recent Posts
Recent Comments
Link
«   2025/04   »
1 2 3 4 5
6 7 8 9 10 11 12
13 14 15 16 17 18 19
20 21 22 23 24 25 26
27 28 29 30
Tags
more
Archives
Today
Total
관리 메뉴

영우

DB replication은 언제 사용할까요? 본문

CS/데이터베이스

DB replication은 언제 사용할까요?

duddn 2024. 3. 22. 07:39

DB Replication이란 무엇인가요?

DB Replication은 데이터베이스의 데이터를 하나 이상의 다른 위치에 복사하고 동기화하는 과정입니다. 이를 통해 데이터의 가용성 및 확장성을 향상시킬 수 있습니다.

언제 사용할까요?

  • DB에 장애가 생겼을 때 문제없이 서비스를 제공하고 싶어요
  • 사용자가 많아 하나의 DB로는 감당하기 힘들어요

어떻게 해결할 수 있나요?

  • DB 장애 대응
    • 소스-레플리카 구조를 구축하여, 소스서버에 장애가 발생할 경우 레블리카서버를 소스서버로 승격시켜 서비스를 계속 운영할 수 있도록 합니다.
  • 부하 분산
    • 읽기 요청은 레플리카서버로 보내고, 쓰기 요청은 소스서버로 보내어 처리해 부하를 효과적으로 분산시킵니다. 이를 통해 전체 시스템의 성능을 향상시킬 수 있습니다.
    • 특히 레플리카 서버의 개수를 늘리는 스케일 아웃(수평확장)이 용이하기 때문에 갑자기 트래픽이 늘어나더라도 유연하게 대응할 수 있다.

조금 더 자세히 설명해주세요

  • 어떻게 동기화를 유지하나요?
    • MySQL에서 발생하는 모든 변경사항은 바이너리 로그에 기록됩니다.
    • 바이너리 로그 덤프 스레드는 레플리카 서버가 소스서버에게 요청시, 소스 서버에서 생성된 바이너리로그를 레플리카 서버로 전송해 동기화를 유지합니다.
    • 레플리케이션 I/O스레드가 레플리카 서버에서 바이너리 로그를 읽어 저장한 파일이 릴레이 로그입니다.
    • 레플리케이션 SQL스레드가 릴레이로그를 읽고 레플리카서버에 실행합니다.

주의할 점이 있을까요?

  • Replication는 데이터가 소스서버에 WRITE되었다고 레플리카서버에 SELECT 했을때 동기화되어 있는것을 보장하지 않습니다.
    • 소스서버에서 실행되는데 1시간걸리는 쿼리가 있으면, STATEMENT 포맷의 바이너리 로그를 사용할경우 레플리카서버에서도 쿼리를 실행시켜야하기 때문에 1시간걸릴것입니다.
      • STATEMENT 포맷은 SQL명령을 저장합니다.
    • 이 경우, 소스서버에서 WRITE되었다고 SELECT를 바로 할 경우 데이터 불일치가 발생할 수 있습니다.
    • 이를 해결하기 위해 ROW포맷을 사용하면 SELECT하는 시간을 줄일 수 있기 때문에 더 빠르게 처리할 수 있습니다.
      • ROW 포맷은 바뀐 데이터의 목록을 저장합니다.
      • 바이너리 로그의 크기가 더 큰 단점이 있습니다.

출처