티스토리 뷰
728x90
Replica Set은 HA(High Availability)를 보장해 주기 때문에 내부적으로 아키텍처가 복잡해지는 트레이드오프가 있음
이로 인해 우리가 꼭 알아야 하는 것들이 생긴다
개발자 입장에서 Replication에 대한 이해가 있어야 Replica Set을 이용한 몽고디비를 잘 활용할 수 있다
Replica Set

- 3대의 MongoDB 멤버 이루어진 구조
- 1Primary, 2 Secondary
- HA(High Availability)에 대한 해결방안
- 멈춤 없이 지속적 운영이 필요한 서비스에서 필요한 최소 배포 단위
- 각 멤버는 같은 서버에 존재할 수도, 다른 서버에 존재할 수도 있다
- replica set의 목적이 HA이기 때문에 각각 다른 서버에 설치되어 있어야 목적에 맞는 효과를 볼 수 있다
- 각 멤버는 상태값이 존재
Primary
- Replica Set에서 하나만 존재할 수 있다
- read/write 요청 모두 처리 가능
- write를 처리하는 유일한 멤버
Primary
- Read 요청만 처리 가능
- 복제를 통해 Primary와 동일한 데이터셋을 유지함
- Replica Set에 여러 개가 존재할 수 있다
Replica Set Election (Fail-Over)

- primary 멤버가 죽으면 쓰기에 대한 요청 처리 불가
→ 서비스 요구사항에 따라 장애로 판단할 수 있음 - Replica Set에서 primary가 없음을 인지하면 자동으로 primary를 선출. 자동 Fail-Over 진행
- 내부적으로 각 멤버들은 서로에게 heart beat를 날려 서로 살아있는지를 수시로 체크
- Primary에게 Heart beat를 요청했는데 답변이 없을 경우 선출 알고리즘을 통해 새로운 P를 선출
- 선출 기준 예 : priority 설정값, 복제지연 없는지, 멤버 상태 등
- 과반수의 표를 얻은 멤버가 primary가 된다
- 과반수 이상 표를 받으려면 홀수로 멤버 구성하는 것을 권장
투표할 수 있는 상태
- Primary, Secondary, Arbiter


Arbiter
데이터를 들고 있지 않음
Primary 선출에만 참여하기 위한 멤버
비용 부담될 때 리소스가 적은 서버를 이용해서 Primary가 계속 살아있을 수 있다는 것을 보장하기 위해 사용하는 배포 형태
PSA 방식을 권장하지 않는 이유
- PSS에서 S가 하나 죽을 경우 모든 read가 나머지 하나의 S에 부하가 몰린다
- 그래도 P에는 부하가 늘지 않는다
- PSA에서는 S가 죽을 경우 읽기쓰기요청이 모두 P에 몰려 P에 부하 발생함
- → 서비스 장애 확률이 높아짐
⇒ 따라서 가능하면 PSA보다는 PSS를 권장
🔠 arbiter [│ɑːrbɪtə(r)] [명사] 결정권자
Replica Set Oplog

- 레플리카셋의 모든 멤버가 동일한 데이터를 유지할 수 있도록 하는 역할
- Primary에 쓰기요청이 들어오면 primary에 적용 후 local database에 있는 Oplog collection에 변경 사항을 기록
- 각 secondary는 비동기적으로 선반영되어있는 멤버의 oplog를 복사해오고 변경을 수행
- 꼭 Pimary에서만 oplog를 복사하는 것이 아니라 Secondary가 자신보다 앞서있는 다른 Secondary에서 oplog를 통해 복사해올 수도 있음
참고 : 패스트캠퍼스 백엔드 개발자를 위한 한 번에 끝내는 대용량 데이터 & 트래픽 처리 초격차 패키지 강의
728x90
'Database' 카테고리의 다른 글
[MongoDB] 샤딩 전략 - Ranged Sharding, Hash Sarding, Zone Sharding (0) | 2023.01.19 |
---|---|
[MongoDB] Sharded Cluster (0) | 2023.01.17 |
클러스터링 인덱스 (Clustering Index) (0) | 2022.11.08 |
[인덱스] B-Tree vs Hash, InnoDB vs MyISAM (0) | 2022.11.06 |
[MySQL] 정합성과 잠금, 트랜잭션, 격리 수준 간단 정리 (0) | 2022.09.26 |
댓글
300x250
공지사항
최근에 올라온 글
최근에 달린 댓글
- Total
- Today
- Yesterday
링크
TAG
- laravel
- kafka
- springboot
- php
- 카프카
- AOP
- database
- 스프링
- java
- MySQL
- kubernetes
- 대규모 데이터 처리
- Spring
- JUnit
- 쿠버네티스
- phpUnit
- NoSQL
- Container
- index
- 샤딩
- docker
- 몽고디비
- laravel 테스트코드
- devops
- 라라벨
- Infra
- mockery
- 분산처리
- k8s
- mongoDB
일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
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 |
글 보관함