샤드 클러스터 동기화
이 페이지의 내용
샤딩된 클러스터 를 동기화하는 방법에는 두 가지가 있습니다. 하나의 mongosync
또는 여러 개의 mongosync
인스턴스를 사용할 수 있습니다. 크거나 로드가 많은 클러스터에서 최상의 성능을 얻으려면 소스 클러스터 의 각 샤드 에 대해 하나의 mongosync
인스턴스 를 사용하세요.
중요
소스 또는 대상 클러스터 가 샤딩된 클러스터 인 경우, 두 클러스터에서 밸런서 를 중지하고 마이그레이션 의 전체 수명 동안 moveChunk
또는 moveRange
명령을 실행 하지 마십시오. 밸런서 를 중지하려면 balancerStop
명령을 실행 하고 명령이 완료될 때까지 기다립니다.
단일 mongosync
인스턴스 구성
단일 mongosync
를 구성하려면 클러스터 아키텍처에 대한 연결 지침 에 따라 클러스터 의 mongos
인스턴스 에 연결합니다.
단일 mongosync
를 샤딩된 클러스터에 연결할 때 replicaSet
옵션이나 id
옵션을 사용하지 마세요.
이 페이지의 나머지 부분에서는 여러 mongosync
인스턴스를 사용하여 cluster 간 동기화에 대해 설명합니다.
여러 인스턴스 구성 mongosync
mongosync
인스턴스 수는 소스 클러스터의 샤드 수와 일치해야 합니다. 모든 인스턴스 간에 동일한 버전의 mongosync
를 사용해야 합니다. 복제본 세트 소스의 경우 mongosync
인스턴스 하나만 사용할 수 있습니다.
샤드 클러스터 간에 동기화할 mongosync
인스턴스를 여러 개 구성하는 경우 각 mongosync
인스턴스에 동일한 API 엔드포인트 명령을 보내야 합니다.
여러 mongosync
인스턴스를 구성하려면 다음을 수행합니다.
샤드 ID 결정
샤드 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 }) } ]
인스턴스 연결 mongosync
이 지침에서는 일반 연결 문자열을 사용합니다. 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 작업 스크립팅을 간소화하기 위해 다양한 포트를 지정하는 것을 고려합니다.
여러 mongosync
인스턴스 시작
또는 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 호출을 반복합니다.
인스턴스 일시 mongosync
중지
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 호출을 반복합니다.
여러 인스턴스에서 동기화 커밋 mongosync
동기화를 완료하려면 Progress 명령을 실행하고 canCommit
및 lagTimeSeconds
값을 확인합니다.
소스 클러스터에서 쓰기 차단을 최소화하려면 lagTimeSeconds 값이 애플리케이션에 비해 충분히 작은 경우에만 commit
명령을 실행해야 합니다.
lagTimeSeconds
값이 충분히 작고 canCommit
가 true
인 경우 커밋 명령을 실행하여 동기화를 커밋합니다. 모든 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
실행하고 각 응답의 필드에 값이 포함되어 있는지 확인합니다.
reverse
작업이 차단되고 있습니다. 모든 mongosync
인스턴스에서 reverse
가 호출될 때까지 reverse
명령은 반환되지 않습니다.
curl mongosync01Host:27601/api/v1/reverse -XPOST --data '{}'
이 명령은 mongosync01Host
에서 실행 중이고 port
27601
를 사용하는 mongosync
인스턴스에서 동기화를 반전시킵니다. 실행 중일 수 있는 다른 인스턴스에서 를 추가로 호출합니다.reverse
mongosync
참고
역동기화는 시작 API 가 mongosync
를 시작할 때 reversible
및 enableUserWriteBlocking
이(가) 모두 true
으)로 설정된 경우에만 가능합니다.