Docs Menu
Docs Home
/
MongoDB Cluster-to-Cluster Sync
/

샤드 클러스터 동기화

이 페이지의 내용

  • 단일 mongosync 인스턴스 구성
  • 여러 mongosync 인스턴스 구성
  • 여러 mongosync 인스턴스 시작
  • 진행 상황 확인
  • mongosync 인스턴스 일시 중지
  • 동기화 재개
  • 여러 mongosync 인스턴스에서 동기화 커밋
  • 데이터 검증
  • 동기화 방향 반전

샤딩된 클러스터 를 동기화하는 방법에는 두 가지가 있습니다. 하나의 mongosync 또는 여러 개의 mongosync 인스턴스를 사용할 수 있습니다. 크거나 로드가 많은 클러스터에서 최상의 성능을 얻으려면 소스 클러스터 의 각 샤드 에 대해 하나의 mongosync 인스턴스 를 사용하세요.

중요

소스 또는 대상 클러스터 가 샤딩된 클러스터 인 경우, 두 클러스터에서 밸런서 를 중지하고 마이그레이션 의 전체 수명 동안 moveChunk 또는 moveRange 명령을 실행 하지 마십시오. 밸런서 를 중지하려면 balancerStop 명령을 실행 하고 명령이 완료될 때까지 기다립니다.

단일 mongosync 를 구성하려면 클러스터 아키텍처에 대한 연결 지침 에 따라 클러스터 의 mongos 인스턴스 에 연결합니다.

단일 mongosync를 샤딩된 클러스터에 연결할 때 replicaSet 옵션이나 id 옵션을 사용하지 마세요.

이 페이지의 나머지 부분에서는 여러 mongosync 인스턴스를 사용하여 cluster 간 동기화에 대해 설명합니다.

mongosync 인스턴스 수는 소스 클러스터의 샤드 수와 일치해야 합니다. 모든 인스턴스 간에 동일한 버전의 mongosync 를 사용해야 합니다. 복제본 세트 소스의 경우 mongosync 인스턴스 하나만 사용할 수 있습니다.

샤드 클러스터 간에 동기화할 mongosync 인스턴스를 여러 개 구성하는 경우 각 mongosync 인스턴스에 동일한 API 엔드포인트 명령을 보내야 합니다.

여러 mongosync 인스턴스를 구성하려면 다음을 수행합니다.

  1. cluster 구성 확인

  2. 샤드 ID 결정

  3. 인스턴스 연결

1

mongosync 1.1부터 샤드 수가 다른 cluster 간에 동기화할 수 있습니다. 그러나 동기화를 되돌리려면 소스 클러스터와 대상 클러스터의 샤드 수가 동일해야 합니다.

2

샤드 ID를 얻으려면 소스 클러스터 mongos에 연결하고 listShards 명령을 실행합니다.

db.adminCommand( { listShards: 1 } )

정보는 shards 배열에 있습니다.

shards: [
{
_id: 'shard01',
host: 'shard01/localhost:27501,localhost:27502,localhost:27503',
state: 1,
topologyTime: Timestamp({ t: 1656612236, i: 2 })
},
{
_id: 'shard02',
host: 'shard02/localhost:27504,localhost:27505,localhost:27506',
state: 1,
topologyTime: Timestamp({ t: 1656612240, i: 4 })
}
]
3

이 지침에서는 일반 연결 문자열을 사용합니다. cluster 아키텍처의 연결 문자열을 수정하려면 아키텍처별 연결 세부 정보를 참조하세요.

단일 호스트 서버로 여러 개의 인스턴스를 실행할 수 mongosync 있습니다. 성능을 향상시키려면 여러 호스트 서버에서 mongosync 를 실행합니다.

첫 번째 mongosync 인스턴스를 실행합니다.

mongosync \
--cluster0 "mongodb://user:password@cluster0host:27500" \
--cluster1 "mongodb://user:password@cluster1host:27500" \
--id shard01 --port 27601

여러 mongosync 인스턴스를 실행하는 경우 인스턴스 수는 샤드 수와 같아야 합니다. 각 mongosync 인스턴스는 복제하는 샤드를 지정하려면 --id 옵션 또는 id 설정으로 시작해야 합니다.

소스 cluster의 각 샤드에 대해 새 인스턴스를 실행합니다.mongosync 각 추가 mongosync 인스턴스에 대해 --id--port 필드를 편집합니다.

mongosync \
--cluster0 "mongodb://user:password@cluster0host:27500" \
--cluster1 "mongodb://user:password@cluster1host:27500" \
--id shard02 --port 27602

--cluster0--cluster1 옵션에 대한 연결 문자열은 mongos 인스턴스를 가리켜야 합니다. 이 예제에서는 동일한 mongos 인스턴스를 사용합니다.

mongosync 인스턴스:

  • 소스 클러스터의 mongos 인스턴스에 연결합니다.

  • 대상 cluster의 mongos 인스턴스에 연결합니다.

  • --id 옵션으로 식별되는 source cluster에서 단일 샤드를 복제합니다.

  • 동기화 중에 사용할 고유 포트를 지정합니다. Cluster-to-Cluster Sync 작업 스크립팅을 간소화하기 위해 다양한 포트를 지정하는 것을 고려합니다.

또는 curl 다른 HTTP 클라이언트를 사용하여 인스턴스에 시작 명령을 실행합니다.mongosync

curl mongosync01Host:27601/api/v1/start -XPOST --data \
'{ "source": "cluster0", "destination": "cluster1", \
"reversible": false, "enableUserWriteBlocking": false }'
curl mongosync02Host:27602/api/v1/start -XPOST --data \
'{ "source": "cluster0", "destination": "cluster1", \
"reversible": false, "enableUserWriteBlocking": false }'

start 명령 옵션은 모든 mongosync 인스턴스에 대해 동일해야 합니다.

특정 샤드의 curl 동기화 진행 상황을 검토하려면 또는 다른 HTTP 클라이언트를 사용하여 mongosync 해당 샤드를 동기화하는 인스턴스에 진행률 명령을 실행합니다.

curl mongosync02Host:27602/api/v1/progress -XGET

이 명령은 mongosync02Host 에서 실행 중인 mongosync 인스턴스의 진행 상황을 확인하고 동기화에 port 27602 를 사용합니다. 다른 샤드의 진행 상황을 확인하려면 호스트와 포트 번호를 업데이트한 다음 각 mongosync 인스턴스에 대해 API 호출을 반복합니다.

pause 명령은 단일 샤드에서 동기화 프로세스를 일시적으로 중지합니다. 실행 중일 수 있는 다른 mongosync 인스턴스는 일시 중지되지 않습니다. curl 또는 다른 HTTP 클라이언트를 사용하여 mongosync 인스턴스에 pause 명령을 실행합니다.

curl mongosync01Host:27601/api/v1/pause -XPOST --data '{}'

이 명령은 mongosync01Host 에서 실행 중이고 동기화에 port 27601 를 사용하는 mongosync 인스턴스를 일시 중지합니다. 다른 샤드에서 동기화를 일시 중지하려면 호스트와 포트 번호를 업데이트한 다음 각 mongosync 인스턴스에 대해 API 호출을 반복합니다.

하나 이상의 mongosync 인스턴스가 일시 중지된 경우 재개 명령을 사용하여 동기화를 재개할 수 있습니다. 동기화를 계속하려면 일시 중지된 각 인스턴스에 대해 별도의 명령을 실행합니다.resume mongosync

또는 curl 다른 HTTP 클라이언트를 사용하여 각 인스턴스에 재개 명령을 실행합니다.mongosync

curl mongosync01Host:27601/api/v1/resume -XPOST --data '{}'

이 명령은 mongosync01Host 에서 실행 중이고 port 27601 를 사용하는 mongosync 인스턴스에서 동기화를 다시 시작합니다. 다른 샤드에서 동기화를 재개하려면 호스트와 포트 번호를 업데이트한 다음 각 mongosync 인스턴스에 대해 API 호출을 반복합니다.

동기화를 완료하려면 Progress 명령을 실행하고 canCommitlagTimeSeconds 값을 확인합니다.

소스 클러스터에서 쓰기 차단을 최소화하려면 lagTimeSeconds 값이 애플리케이션에 비해 충분히 작은 경우에만 commit 명령을 실행해야 합니다.

lagTimeSeconds 값이 충분히 작고 canCommittrue 인 경우 커밋 명령을 실행하여 동기화를 커밋합니다. 모든 mongosync 인스턴스에 대해 이 프로세스를 반복합니다.

commit 작업이 차단되고 있습니다. 모든 mongosync 인스턴스에서 commit 가 호출될 때까지 commit 명령은 반환되지 않습니다.

// Check progress
curl mongosync01Host:27601/api/v1/progress -XGET
// Commit
curl mongosync01Host:27601/api/v1/commit -XPOST --data '{}'

이 명령은 mongosync01Host 에서 실행 중이고 port 27601 를 사용하는 mongosync 인스턴스에 대한 진행 상황 및 커밋 동기화만 확인합니다. 모든 샤드를 동기화하려면 실행 중일 수 있는 다른 progress commit mongosync 인스턴스에서 및 를 추가로 호출합니다.

애플리케이션 로드를 소스 클러스터에서 대상으로 전송하기 전에 데이터를 확인하여 동기화에 성공했는지 확인하세요.

자세한 내용은 데이터 전송 확인을 참조하세요.

원래 대상 클러스터가 소스 클러스터 역할을 하도록 역동기화를 수행하려면 다음을 수행합니다.

  • 아직 커밋하지 않았다면 각 인스턴스에 대해 커밋 명령을 mongosync 실행하고 모든 커밋이 완료될 때까지 기다립니다. 동기화 프로세스가 커밋되었는지 확인하려면 모든 인스턴스에 mongosync state 대해 Progress 명령을 COMMITTED 실행하고 각 응답의 필드에 값이 포함되어 있는지 확인합니다.

  • 각 인스턴스에 대해 역방향 명령을 mongosync 실행합니다.

reverse 작업이 차단되고 있습니다. 모든 mongosync 인스턴스에서 reverse 가 호출될 때까지 reverse 명령은 반환되지 않습니다.

curl mongosync01Host:27601/api/v1/reverse -XPOST --data '{}'

이 명령은 mongosync01Host 에서 실행 중이고 port 27601 를 사용하는 mongosync 인스턴스에서 동기화를 반전시킵니다. 실행 중일 수 있는 다른 인스턴스에서 를 추가로 호출합니다.reverse mongosync

참고

역동기화는 시작 APImongosync 를 시작할 때 reversibleenableUserWriteBlocking 이(가) 모두 true 으)로 설정된 경우에만 가능합니다.

돌아가기

복제본 세트를 샤드 클러스터에 동기화하기