영우
DB replication은 언제 사용할까요? 본문
DB Replication이란 무엇인가요?
DB Replication은 데이터베이스의 데이터를 하나 이상의 다른 위치에 복사하고 동기화하는 과정입니다. 이를 통해 데이터의 가용성 및 확장성을 향상시킬 수 있습니다.
언제 사용할까요?
- DB에 장애가 생겼을 때 문제없이 서비스를 제공하고 싶어요
- 사용자가 많아 하나의 DB로는 감당하기 힘들어요
어떻게 해결할 수 있나요?
- DB 장애 대응
- 소스-레플리카 구조를 구축하여, 소스서버에 장애가 발생할 경우 레블리카서버를 소스서버로 승격시켜 서비스를 계속 운영할 수 있도록 합니다.
- 부하 분산
- 읽기 요청은 레플리카서버로 보내고, 쓰기 요청은 소스서버로 보내어 처리해 부하를 효과적으로 분산시킵니다. 이를 통해 전체 시스템의 성능을 향상시킬 수 있습니다.
- 특히 레플리카 서버의 개수를 늘리는 스케일 아웃(수평확장)이 용이하기 때문에 갑자기 트래픽이 늘어나더라도 유연하게 대응할 수 있다.
조금 더 자세히 설명해주세요
- 어떻게 동기화를 유지하나요?
- MySQL에서 발생하는 모든 변경사항은 바이너리 로그에 기록됩니다.
- 바이너리 로그 덤프 스레드는 레플리카 서버가 소스서버에게 요청시, 소스 서버에서 생성된 바이너리로그를 레플리카 서버로 전송해 동기화를 유지합니다.
- 레플리케이션 I/O스레드가 레플리카 서버에서 바이너리 로그를 읽어 저장한 파일이 릴레이 로그입니다.
- 레플리케이션 SQL스레드가 릴레이로그를 읽고 레플리카서버에 실행합니다.
주의할 점이 있을까요?
- Replication는 데이터가 소스서버에 WRITE되었다고 레플리카서버에 SELECT 했을때 동기화되어 있는것을 보장하지 않습니다.
- 소스서버에서 실행되는데 1시간걸리는 쿼리가 있으면, STATEMENT 포맷의 바이너리 로그를 사용할경우 레플리카서버에서도 쿼리를 실행시켜야하기 때문에 1시간걸릴것입니다.
- STATEMENT 포맷은 SQL명령을 저장합니다.
- 이 경우, 소스서버에서 WRITE되었다고 SELECT를 바로 할 경우 데이터 불일치가 발생할 수 있습니다.
- 이를 해결하기 위해 ROW포맷을 사용하면 SELECT하는 시간을 줄일 수 있기 때문에 더 빠르게 처리할 수 있습니다.
- ROW 포맷은 바뀐 데이터의 목록을 저장합니다.
- 바이너리 로그의 크기가 더 큰 단점이 있습니다.
- 소스서버에서 실행되는데 1시간걸리는 쿼리가 있으면, STATEMENT 포맷의 바이너리 로그를 사용할경우 레플리카서버에서도 쿼리를 실행시켜야하기 때문에 1시간걸릴것입니다.
출처
- REAL MySQL 8.0
- https://junghyungil.tistory.com/177
'CS > 데이터베이스' 카테고리의 다른 글
RealMySQL 8.0 스터디 회고 (0) | 2024.04.05 |
---|---|
이중화(DB) (1) | 2024.03.29 |
데이터 베이스에 완전한 한글 문자만 저장하는 방법이 있을까?(’ㅇ’, ‘ㅏ’ 같은 문자는 저장하기 싫음!) (0) | 2024.03.15 |
MySQL Full-Text Search (0) | 2024.03.08 |
CTE란 무엇인가요? (2) | 2024.02.29 |