복제-설정은 각이 서로의 모든 데이터를 미러링하여 MongoDB의 여러 인스턴스를 가지고 있다는 것을 의미한다. 복제 세트는 하나의 마스터 ( "기본"이라고도 함)와 하나 이상의 슬레이브 (일명 보조)로 구성됩니다. 읽기 작업은 모든 슬레이브에서 제공 될 수 있으므로 복제 세트에 더 많은 슬레이브를 추가하여 읽기 성능을 향상시킬 수 있습니다 (클라이언트 응용 프로그램이 실제로 다른 세트 멤버를 사용할 수있는 경우). 그러나 쓰기 작업은 항상 복제본 세트의 마스터에서 발생하여 슬레이브로 전파되므로 슬레이브를 더 추가해도 쓰기 속도가 빨라지지 않습니다.
복제 세트는 내결함성을 제공합니다. 복제 세트 구성원 중 하나가 중단되면 다른 구성원이 대신합니다. 주인이 추락하면 노예는 새로운 주인을 선출합니다. 이러한 이유로 생산적인 배치에서는 MongoDB를 항상 최소 3 대의 서버 복제본 세트로 사용 하는 것이 좋습니다. 그 중 2 대는 데이터를 보유하고 있습니다. 노예 중 하나가 무너짐).
분산됩니다 클러스터 (또는 복제 - 설정 될 수있다) 각 클러스터 샤드 데이터의 일부분을 담당한다는 것을 의미한다. 읽기와 쓰기의 각 요청은 데이터가 상주하는 클러스터에 의해 제공됩니다. 이는 클러스터에 샤드를 더 추가하여 읽기 및 쓰기 성능을 모두 향상시킬 수 있음을 의미합니다. 샤드가있는 문서는 각 컬렉션 의 샤드 키로 결정됩니다 . 데이터가 모든 클러스터에 균등하게 분배되고 샤드 키가있는 가장 일반적인 쿼리에 대해 명확하게 선택되어야합니다 (예 : 자주 쿼리 할 때 user_name
샤드 키에는 필드는 user_name
각각의 질의는) 그 문서를 가지고 오직 하나 개의 파편에 위임 할 수 있습니다.
단점은 내결함성이 있다는 것입니다. 클러스터의 샤드 하나가 중단되면 클러스터의 모든 데이터에 액세스 할 수 없습니다. 이러한 이유로 클러스터의 각 구성원은 복제본 세트 여야합니다. 필요하지 않습니다. 고 가용성에 관심이없는 경우 샤드는 복제없이 단일 mongod 인스턴스가 될 수도 있습니다 . 그러나 프로덕션 환경에서는 항상 복제를 사용해야합니다 .
그래서 그것은 당신의 예에서 무엇을 의미합니까?
Sharded Cluster
/ | \
Shard A Shard B Shard C
/ \ / \ / \
+-------+ +---------+ +-------+ +---------+ +-------+ +---------+
|Primary| |Secondary| |Primary| |Secondary| |Primary| |Secondary|
| 25GB |=| 25GB | | 25 GB |=| 25 GB | | 25GB |=| 25GB |
+-------+ +---------+ +-------+ +---------+ +-------+ +---------+
75GB의 데이터를 각각 25GB의 3 개의 샤드로 분할하려면 3 개의 복제본 세트로 구성된 최소 6 개의 데이터베이스 서버가 필요합니다. 각 복제 세트는 동일한 25GB의 데이터를 가진 두 서버로 구성됩니다.
또한 3 개의 복제 세트의 중재자를위한 서버와 몽고 라우터 및 클러스터의 구성 서버가 필요합니다. 중재자는 매우 가벼우 며 복제본 세트 멤버가 다운 될 때만 필요하므로 일반적으로 다른 하드웨어와 동일한 하드웨어를 공유 할 수 있습니다. 그러나 Mongos 라우터 및 구성 서버는 중복되어 자체 서버에 있어야합니다.