샤드 클러스터는 청크 마이그레이션이 중단되거나 하나 이상의 청크가 점보가 되는 상황이 발생할 수 있습니다. 이 경우 밸런서 샤드 간에 데이터를 균등하게 배포할 수 없습니다. 이로 인해 리소스 사용률이 고르지 않고 클러스터 성능이 저하될 수 있습니다.
이 페이지에서는 지연된 청크 마이그레이션 및 점보 청크의 일반적인 원인과 이러한 상태를 진단하고 해결하는 단계를 설명합니다. 아래 단계를 완료한 후에도 문제가 지속되면 기술 지원팀 문의 .
전제 조건 검사
클러스터 지연된 마이그레이션 또는 점보 청크의 영향을 받는지 확인합니다.
밸런서 상태 확인
mongos 인스턴스 에서 실행.
sh.getBalancerState()
이 메서드가 true 을 반환하지만 데이터 분포가 여전히 고르지 않은 경우 추가 조사가 필요합니다.
자세한 밸런서 정보를 검토 할 수도 있습니다.
db.adminCommand({ balancerStatus: 1 })
청크 배포 확인
샤드 간 청크 분포를 검토 하려면 실행.
sh.status(true)
다음을 찾습니다:
샤드 당 청크 수의 큰 차이
다음과 같이 표시된 청크
jumbo
참고
jumbo 로 표시된 청크 분할 되거나 크기가 줄어들 때까지 밸런서 에서 마이그레이션할 수 없습니다.
로그 메시지 확인
config 서버 로그
config 서버 로그에서 밸런싱 또는 청크 마이그레이션 과 관련된 항목을 검토합니다. 다음을 나타내는 메시지를 찾습니다.
마이그레이션 재시도
중단된 마이그레이션
점보로 표시된 청크
마이그레이션 커밋 또는 삭제 단계 중 실패
샤드 로그
샤드 노드에서 다음에 대한 로그를 검토 .
잠금 획득 시간 초과
마이그레이션 영향을 미치는 복제 지연
디스크 공간 오류
마이그레이션 단계 실패
일반적인 문제 및 해결 방법
점보 청크의 마이그레이션 방지
청크 구성된 청크 크기를 초과하면 점보가 되며 자동으로 분할 할 수 없습니다.
점보 청크 식별
mongos에서:
sh.status(true)
jumbo(으)로 레이블이 지정된 청크를 찾습니다.
점보 청크 해결
분할 가능한 청크는 여러 개의 고유한 샤드 키 값을 포함하며 분할 할 수 있습니다. 분할 가능한 점보 청크 해결하려면 다음과 같이 수동으로 분할 .
sh.splitAt("database.collection", { shardKeyField: <value> })
그런 다음 필요한 경우 밸런서 다시 시작합니다.
sh.startBalancer()
수동 분할이 적절한 경우를 학습 샤드 클러스터의 청크 분할을 참조하세요.
분할할 수 없는 청크는 단일의 고유한 샤드 키 값 나타내며 분할 할 수 없습니다. 분할할 수 없는 점보 청크 해결하려면 다음을 수행합니다.
를 사용하여 샤드 키 세분화하여
refineCollectionShardKey접미사 필드 추가하고, 청크 를 분할 가능하게 만듭니다.분할 가능한 청크를 참조하세요.더 균등하게 분산된 샤드 키 사용하여 컬렉션 다시 샤딩합니다.컬렉션 리샤딩을 참조하세요.
비효율적인 샤드 키 배포
샤드 키 카디널리티 가 낮거나 단조롭게 증가하는 패턴 따르는 경우 청크가 고르지 않게 증가하여 균형을 맞추지 못할 수 있습니다.
완화하려면 다음을 수행합니다.
컬렉션 에서 사용하는 샤드 키 패턴 검토합니다.
대부분의 쓰기가 좁은 샤드 키 범위 대상으로 하는지 확인합니다. 빈도가 높은 샤드 키 값으로 인해 쓰기가 단일 샤드 에 집중되는 경우 샤드 키 문제 해결을 참조하세요.
더 균등하게 분산된 샤드 키 사용하여 컬렉션 리샤딩하는 것을 고려하세요.
권장사항 는 샤드 키 선택을 참조하세요.
밸런서 비활성화 또는 일시 중지
밸런서 비활성화되면 청크 마이그레이션이 발생하지 않습니다.
밸런서 상태 확인합니다.
sh.getBalancerState()
비활성화된 경우 활성화 :
sh.startBalancer()
추가 밸런서 동작에 대한 자세한 내용은 샤드 클러스터 밸런서를 참조하세요.
진행 중인 작업으로 인해 마이그레이션이 차단됨
장기 실행 작업, 인덱스 빌드 또는 과도한 쓰기 (write) 로드로 인해 청크 마이그레이션이 지연되거나 차단 될 수 있습니다.
경합을 줄이려면 다음을 수행합니다.
장기 실행 작업을 식별합니다.
db.currentOp() 쓰기 (write) 활동이 적은 기간 동안 밸런싱을 예약합니다.
모든 샤드에서 충분한 디스크 공간을 사용할 수 있는지 확인합니다.
참고
청크 마이그레이션 에는 데이터 복제와 삭제 단계가 포함됩니다. 디스크 공간이 부족하거나 복제 지연 높으면 이러한 단계가 지연될 수 있습니다.
해결 방법 확인
문제를 해결한 후 다음을 수행합니다.
청크 마이그레이션이 성공적으로 완료되었습니다.
jumbo로 표시된 청크가 남아 있지 않습니다.샤드 간 청크 분산이 더욱 균등해집니다.
밸런서 활성 상태로 안정적으로 유지됩니다.
배포를 다시 확인합니다:
sh.status(true)
추가 지원을 위해 수집할 진단
문제가 지속되면 기술 지원에 문의하기 전에 다음을 수집합니다.
다음의 출력
sh.status(true)다음의 출력
db.adminCommand({ balancerStatus: 1 })관련 config 서버 로그
관련 샤드 로그
영향을 받는 컬렉션에 대한 샤드 키 정의
MongoDB 버전
클러스터 토폴로지 설명
샤드 당 청크 수 및 데이터 크기에 대한
sh.getShardedDataDistribution()출력