MongoDB에서의 샤딩과 복제의 차이점


77

샤딩과 복제가 어떻게 작동하는지 혼동하고 있습니다.

복제 : MongoDB의 복제 세트는 동일한 데이터 세트를 유지 보수하는 mongod 프로세스 그룹입니다.

샤딩 : 샤딩은 여러 머신에 데이터를 저장하는 방법입니다.

75GB의 데이터가있는 경우 복제 (3 서버)에 대한 내 이해에 따르면 각 서버에 75GB 데이터를 저장한다는 것은 서버 1에 75GB, 서버 2에 75GB, 서버 3에 75GB를 의미합니다. 내가 틀렸다면) .. 그리고 샤딩에 의해 서버 -1에 25GB 데이터, 서버 -2에 25Gb 데이터 및 서버 -3에 25GB 데이터로 저장됩니다. (오른쪽?) ...하지만이 줄을 발견했습니다. 튜토리얼

샤드는 데이터를 저장합니다. 프로덕션 샤드 클러스터에서 고 가용성 및 데이터 일관성을 제공하기 위해 각 샤드는 복제 세트입니다.

복제 세트는 75GB이지만 샤드는 25GB이므로 어떻게 동등 할 수 있습니까? 이로 인해 많은 혼란이 생깁니다 ... 이것 좀 도와주세요.

답변:


111

복제-설정은 각이 서로의 모든 데이터를 미러링하여 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 라우터 및 구성 서버는 중복되어 자체 서버에 있어야합니다.


2
세부 답변에 대한 많은 감사 ... 하나 더 많은 질문 ... 쓰기 또는 읽기 작업이 수행되는 동안 기본이 다운되면 .1) 보조에서 기본을 선택하는 지연은 무엇입니까? 그 지연 시간 동안 데이터가 임시로 어디에 저장됩니까?
Saad Saadi

4
@SaadSaadi 기본 선거 과정은 문서에 설명되어 있습니다 . 보조 서버가 기본 서버가 다운되었음을 알기까지 10 초에서 12 초가 걸립니다. 예비 선거 자체는 보통 밀리 초 만 걸립니다. 기본 세트가없는 동안 복제 세트는 읽기 전용입니다. 이 시간 동안 응용 프로그램에서 데이터를 쓰려고하면 실패합니다.
Philipp

1
@Philipp : 두 개의 주석 만 : (1) 샤드 키를 수정할 수없고 (즉, 다른 키를 사용하여 샤드 할 수 없음) (2) 복제 세트의 보조 노드에서 읽을 수 있지만 일관성은 쓰기 문제 ( 일관성을 유지하려면 w 옵션은 복제 세트 sth와 동일해야합니다. 복제 세트 sth는 각 샤드가 의도적으로 또는 노드 장애로 인해 다른 복제 세트 크기를 가질 수 있기 때문에 실행 불가능합니다.
Mike Argyriou

@Philipp dba.stackexchange.com/questions/208482/…에 대한 추가 후속 질문에 답변 해 시겠습니까?
user3198603

18
  • 샤딩 은 데이터 세트를 개별 부품으로 분할합니다.
  • 복제 는 데이터 세트를 복제합니다.

이 두 가지가 다르기 때문에 쌓을 수 있습니다. 두 가지를 모두 사용하면 여러 복제본 그룹에서 데이터 세트를 분할 할 수 있습니다. 다시 말하면 샤드를 복제하는 것입니다. 샤드가없는 데이터 세트는 단일 '샤드'입니다.

3 개의 샤드와 3 개의 복제본이있는 Mongo 클러스터에는 9 개의 노드가 있습니다.

  • 3 세트의 3 노드 복제본.
  • 각 복제 세트에는 단일 샤드가 있습니다.

하나의 큰 파일의 경우 하나의 샤드 또는 여러 샤드에 저장됩니까 (따라서 노드 전체에)?
Tony

MongoDB 3.4 이상에서는 구성을 위해 mongoDB 서버와 mongos 라우터 역할을하는 추가 서버가 필요합니다. 이를 통해 예제의 총 3x3 클러스터가 총 13 대의 서버가됩니다.
dthrasher

9

으로 샤딩 , 여러 부분으로 컬렉션을 분할합니다. 데이터베이스를
복제 한다는 것은 데이터 세트를 미러링한다는 의미입니다.


4

제공되는 기능 측면에서. 샤딩은 확장 성과 병렬성을 제공합니다. 복제는 가용성을 제공합니다


아니, 복제는 읽기보다 쓰기가 훨씬 더 빈번하다는 점에서 확장 성과 병렬성을 제공합니다.
Kristóf Szalay
당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.