replSetResizeOplog
정의
replSetResizeOplog
replSetResizeOplog
oplog 항목을 보존하기 위한 최소 시간 지정도 지원합니다.버전 5 에서 변경되었습니다.0:
mongosh
에서replSetOplog
크기를 설정하려면Double()
생성자를 사용합니다.replSetResizeOplog
를 사용하면mongod
프로세스를 다시 시작하지 않고도 oplog 또는 최소 보존 기간의 크기를 동적으로 조정할 수 있습니다.이 명령은
admin
데이터베이스에 대해 실행해야 합니다.
구문
명령의 형식은 다음과 같습니다.
db.adminCommand( { replSetResizeOplog: <int>, size: <double>, minRetentionHours: <double> } )
명령 필드
이 명령은 다음 필드를 사용합니다.
필드 | 유형 | 설명 |
---|---|---|
replSetResizeOplog | int | 1 로 설정합니다. |
size | double | oplog의 최대 크기(메가바이트)입니다.
|
minRetentionHours | double | 선택 사항입니다. oplog 항목을 보존하는 데 필요한 최소 시간입니다. 여기서 십진수는 한 시간을 분수로 나눈 값을 나타냅니다. 예를 들어 값 값은
현재 구성된 최소 oplog 보존 기간을 확인하려면 |
행동
Wired Tiger 스토리지 엔진 으로 실행되는 인스턴스에서만 를 replSetResizeOplog
mongod
사용할 수 있습니다.
명령을 사용하여 replSetResizeOplog
oplog의 크기를 조정하는 절차 는 Oplog의 크기 변경 튜토리얼을 참조하세요.
2}가 삭제되는 것을 방지하기 위해 oplog가 구성된 크기 제한을 초과하여 커질 수 majority commit point
있습니다.
MongoDB 4.0부터 MongoDB는 local.oplog.rs
컬렉션 삭제를 금지합니다. 이 제한에 대한 자세한 내용은 Oplog 수집 동작을 참조하십시오.
replSetResizeOplog
시작 시 설정된 최대 oplog 크기 또는 최소 oplog 보존 기간을 다음과 같이 재정의합니다.
서버를 다시 시작한 후에도 새 oplog 크기는 다음을 사용하지 않는 한 유지됩니다.
중요
최대 oplog 크기를 줄이면 oplog가 새로 구성된 크기에 도달할 때까지 가장 오래된 oplog 항목이 잘립니다.
마찬가지로 최소 oplog 보존 기간을 줄이면 oplog가 구성된 최대 크기를 초과한 경우 지정된 기간보다 오래된 oplog 항목이 잘립니다.
oplog 크기 또는 보존 기간 감소로 인해 oplog가 잘리면 다음을 포함하여 클라이언트가 여전히 해당 oplog 항목을 읽는 등의 예기치 않은 동작이 발생할 수 있습니다.
열려있는 change stream이 무효화될 수 있습니다.
이러한 oplog 항목을 복제하지 않은 세컨더리에서는 재동기화가 필요할 수 있습니다.
멤버에 대해 와 함께 를
mongodump
--oplog
사용하는 백업은 잘리기 전의 항목을 캡처하지 못할 수 있습니다.
최소 Oplog 보존 기간
최소 oplog 보존 기간으로 구성한 경우 mongod
는 다음과 같은 동작을 합니다.
oplog는 구성된 시간 동안 oplog 항목을 유지하기 위해 제한 없이 늘릴 수 있습니다. 하지만 이로 인해 쓰기의 양이 많아지고 보유 기간이 늘어나며 시스템 디스크 공간이 줄어들거나 고갈될 수 있습니다.
oplog가 최대 크기를 초과하여 커지면
mongod
는 oplog가 최대 크기로 돌아가 거나 더 작은 최대 크기로 구성된 경우에도 해당 디스크 공간을 계속 보유할 수 있습니다. oplog 크기를 줄이면 디스크 공간이 즉시 반환되지 않음을 참조하세요.2}는 oplog 항목 보존을 적용할 때 시스템 벽시계와 oplog 항목 생성 벽시계 시간을
mongod
비교합니다. 클러스터 구성 요소 간의 클록 드리프트는 예기치 않은 oplog 유지 동작을 초래할 수 있습니다. 클러스터 구성원 간의 시계 동기화에 대한 자세한 내용은 시계 동기화를 참조하세요.
replSetResizeOplog
다른 노드에게 복제되지 않음
replSetResizeOplog
를 사용하여 지정된 복제본 세트 멤버의 oplog 크기 또는 최소 oplog 보존 기간을 변경해도 복제본 세트에 있는 다른 멤버의 oplog 크기는 변경되지 않습니다. 클러스터의 각 복제본 세트 멤버에서 replSetResizeOplog
를 실행하여 모든 멤버의 oplog 크기 또는 최소 보존 기간을 변경해야 합니다.
oplog 크기 감소로 디스크 공간이 즉시 반환되지 않음
oplog 크기를 줄인다고 해서 해당 디스크 공간이 즉시 확보되는 것은 아닙니다. 여기에는 최소 oplog 보존 기간보다 오래된 oplog 이벤트의 잘림으로 인한 oplog 크기 감소가 포함됩니다.
oplog 크기를 줄인 후 사용하지 않는 디스크 공간을 즉시 확보하려면 유지 관리 기간 동안 local
데이터베이스의 oplog.rs
컬렉션에 대해 compact
를 실행합니다. compact
가 실행하는 데이터베이스의 모든 작업을 차단합니다. 따라서 oplog.rs
에 대해 compact
를 실행하면 oplog 동기화가 방지됩니다. oplog의 크기를 조정하고 oplog.rs
을 압축하는 절차는 Oplog 크기 변경을 참조하세요.
리소스 잠금
replSetResizeOplog
은(는) oplog
에 대해 독점(W) 잠금을 취하고 완료될 때까지 컬렉션에 대한 다른 작업을 차단합니다.
MongoDB 잠금에 대한 자세한 내용은 FAQ: 동시성을 참조하세요.
예제
최대 Oplog 크기 변경
db.collection.stats()
mongosh
메서드를 사용하여 현재 최대 oplog 크기인 maxSize
를 메가바이트 단위로 표시합니다. 예를 들면 다음과 같습니다.
db.getSiblingDB("local").oplog.rs.stats(1024*1024).maxSize
위의 명령은 이 노드의 oplog 크기를 메가바이트 단위로 반환합니다.
990
다음 명령은 replSetResizeOplog
을 사용하여 이 멤버의 oplog 크기를 16384 메가바이트로 변경합니다.
db.adminCommand({ "replSetResizeOplog": 1, size: Double(16384)})
새 oplog 크기를 확인하려면 db.collection.stats()
메서드를 다시 실행합니다.
db.getSiblingDB("local").oplog.rs.stats(1024*1024).maxSize
위의 명령이 반환됩니다.
"maxSize": NumberLong("16834")
경고
노드에서 oplog의 크기를 줄이면 노드에서 데이터가 제거됩니다. 이로 인해 해당 노드와 동기화되는 복제본 노드가 오래될 수 있습니다. 이러한 노드를 다시 동기화하려면 복제본 세트의 노드 동기화를 참조하세요.
최소 Oplog 보존 기간 변경
선택 사항입니다.
db.serverStatus()
명령을 사용하여 현재 최소 oplog 보존 값이oplogTruncation.oplogMinRetentionHours
인지 확인합니다.db.getSiblingDB("admin").serverStatus().oplogTruncation.oplogMinRetentionHours 이 명령은
mongod
에 대해 현재 구성된 최소 oplog 보존 기간을 반환합니다. 예를 들면 다음과 같습니다.1.5 mongod
에 최소 oplog 보존 기간이 없는 경우 이 작업은 빈 결과를 반환합니다.replSetResizeOplog
명령을 사용하여 구성된 최소 oplog 보존 기간을 수정합니다. 예를 들어 다음은 최소 oplog 보존 기간을2
시간으로 설정합니다.db.adminCommand({ "replSetResizeOplog" : 1, "minRetentionHours" : 2 })