복제 = 데이터를 여러 위치에 중복 저장해서 안정성 높이는거
샤딩 = 대규모 데이터베이스를 작은 단위(샤드)로 나누어 각각을 별도의 서버에서 다루는 방식
즉, 복제본 세트를 여러 샤드로 나누어 관리하게 된다.
복제본 세트는 하나의 주서버와 여러개의 보조 서버로 이루어짐. 주 서버는 모든 쓰기 작업을 담당, 데이터 변경사항을 oplog 에 저장. 보조 서버는 oplog를 참조해 동일한 작업 수행해 데이터 일관성 유지. 주 서버 장애시 자격을 갖춘 보조 서버가 주서버로 선출되는 과정 시작.
몽고 DB는 분산 시스템의 데이터 일관성 보장을 위해 RAFT 합의 알고리즘 사용. 이 알고리즘에 투표 매커니즘 포함되어있음. 투표는 당므 상황에서 발생
•
복제본 세트의 서버 추가 또는 제거
•
복제본 세트 초기화
•
주 서버와 보조 서버 간 하트비트 지연이 제한을 넘긴 경우(자체 호스팅 = 10초, 몽고 DB 아틀라스 = 5초)
애플리케이션은 자동 장애 조치와 선거 상황에 대응할 수 있도록 설계되어야함.
선거가 완료된 이후에는 일정 시간동안 새로운 선거를 시작할 수 없는 동결 기간 적용 = 연속적인 선거로 시스템이 불안정 상태에 오래 돌입되는 것을 막기 위한 것.
복제본 세트는 새로운 주 서버가 선출되기 전까지 쓰기 작업 불가. 보조 서버에서 읽기가 설정된 경우 읽기는 가능. 일반적으로 주 서버 선출은 평균 12초 이내 소요
복제본 세트에서 주 서버가 모든 작업을 oplog에 기록하고 보조 서버가 이를 비동기적으로 복제해사 각 보조 서버에 사본을 보관해 최신상태를 유지하는거 까지는 알겠어. 복제본 세트의 각 구성 요소가 하트비트를 주고받고, 다른 구성원으로부터 oplog 항목을 가져올 수 있다 → 주 서버가 아닌 다른 구성원으로부터 oplog 를 가져와??
복제본 세트 구성에는 예산상의 제약으로 추가적인 보조 서버를 구축할 수 없는 경우 투표에만 참여하는 중재자(arbiter) 도입할 수 있다.
쓰기 보장 수준