백은빈, 이성욱 님의 "Real MySQL" 책을 정리한 포스팅 입니다.
1. 싱글 레플리카
- 하나의 소스 서버에 하나의 레플리카 서버만 연결됨
- 가장 기본적인 형태
데이터 분석용
예비용
2. 멀티 레플리카
- 하나의 소스 서버에 2개 이상의 레플리카 서버를 연결
- 싱글 레플리카를 사용하다가 트래픽이 많아질 경우 사용함
트래픽 대응
- 클라이언트는 읽기 요청이 많으므로 읽기 요청 처리를 분산시키기
데이터 분석용
- 클라이언트 요청이 아닌 용도(AI, 배치, 통계 등)의 전용으로 쓰는 방법
예비용 (1대 필수)
- 예기치못한 예외로 인해 서버가 다운될 경우, 예비용이 대기하고 있어야 안정적으로 요청을 원활하게 처리할 수 있음
- 소스 서버 or 레플리카 서버의 예비용으로 활용될 수 있음
3. 체인
사용 목적
- 멀티 레플리카 복제 구성에서 레플리카 서버가 너무 많아 소스 서버의 성능에 악영향이 예상될 경우 사용
- 소스 서버는 레플리카 서버가 요청할 때마다 계속 바이너리 로그를 읽어 전달해야 하기 때문
- 서버를 업데이트 하거나 장비를 일괄 교체할 때 사용
- 새로운 그룹에서 작업을 하고, 기존에 사용하던 주소를 새로운 서버들에 바라보게끔 변경
사용 방법
- 소스 서버의 바이너리 로그 전달 역할을 담당하는 레플리카 서버 하나를 두기
- 통계, 배치, 백업 용의 레플리카들의 소스 서버 역할을 담당함
- 중간 계층에서 레플리카이자 소스 서버 역할을 하는 서버에서 바이너리 로그와 log_slave_updates 가 활성화되어야 함
4. 듀얼 소스
- 두개의 서버가 서로 소스 서버이자 레플리카 서버로 구성돼 있는 형태
- 두 서버 모두 쓰기가 가능함
- 각 서버에서 변경된 데이터는 복제를 통해 동기화됨
ACTIVE-PASSIVE
- 하나의 서버에서만 쓰기 작업이 수행되는 형태
- 승격 시, 예비 서버가 바로 쓰기가 가능해야 할 경우에 사용됨
- 예비 서버도 쓰기가 가능하기 때문에, 별도 설정 없이 승격이 가능함
ACTIVE-ACTIVE
- 두 서버 모두에 쓰기 작업을 수행하는 형태
- 지리적으로 매우 떨어진 위치에 유입되는 쓰기 요청도 원활하게 처리하기 위해 사용됨
- 두 서버는 서로 일관되지 않은 데이터를 가질 수 있음
- 양 서버에 복제가 적용되므로 동기화되지만
- 물리적으로 떨어져있어 전달된 트랜잭션이 반영되기까지 시간이 걸릴 수 있음
주의사항
- 동일한 데이터를 각 서버에서 변경할 경우
- 동일한 데이터에 대해 각 서버에 동시점에 유입되는 경우, 시점 상 나중에 처리된 트랜잭션이 최종 처리됨
- 이 경우, 예상치 못한 방향으로 데이터가 처리될 수 있음
- 동일 데이터에 대해 각 서버에 잠금이 걸리지 않기 때문
- 테이블에서 Auto-increment 키 사용
- 동일 시점에 새로운 데이터가 유입될 경우, 같은 Auto_Increment 값을 가질 수 있음
5. 멀티 소스
- 하나의 레플리카 서버가 둘 이상의 서버 소스를 갖는 형태
목적
- 여러 MySQL에 존재하는 각기 다른 데이터를 한 서버로 통합
- 여러 MySQL에 샤딩돼 있는 테이블 데이터를 하나의 테이블로 통합
- 여러 MySQL의 데이터들을 모아 하나의 서버에서 백업을 수행
주의사항
- 각 서버로부터 유입되는 변경 이벤트들이 레플리카 서버로 복제됐을 때 서로 충돌을 일으킬만한 부분이 없는지 검토 필요
'Database > Mysql' 카테고리의 다른 글
[Real MySQL] 17-2. InnoDB 클러스터: 그룹 복제 (0) | 2024.09.07 |
---|---|
[Real MySQL] 17-1. InnoDB 클러스터: 아키텍처 (0) | 2024.09.07 |
[Real MySQL] 16-4. 복제: 동기화 방식 (0) | 2024.09.07 |
[Real MySQL] 16-3. 복제: 데이터 포맷 (0) | 2024.09.07 |
[Real MySQL] 16-1. 복제: 아키텍처 (4) | 2024.09.07 |