문서 메뉴

문서 홈애플리케이션 개발MongoDB 매뉴얼

fsync

이 페이지의 내용

  • 정의
  • 구문
  • 명령 필드
  • 고려 사항
  • 예제
fsync

보류 중인 모든 쓰기를 스토리지 계층에서 디스크로 플러시합니다. lock 필드를 true(으)로 설정하면 서버 또는 클러스터에 잠금을 설정하여 잠금이 해제될 때까지 추가 쓰기를 방지합니다.

MongoDB 7 부터 시작.0.2 ( 6.0.11 및 5.0.22 에서 시작하는 경우에도 사용 가능) fsyncfsyncUnlock 명령을 mongos 에서 실행하여 잠금 수 있습니다. 샤드 cluster를 잠금 해제합니다.

애플리케이션이 데이터를 쓰면 MongoDB는 스토리지 계층에 데이터를 기록한 다음 디스크에 데이터를 씁니다.

디스크에 쓰기를 플러시하려면 fsync를 실행합니다.

WiredTiger내구성 있는 데이터를 제공하기 위해 체크포인트를 사용합니다. 자세한 내용은 저널링 및 WiredTiger 스토리지 엔진을 참조하세요.

중요

서버는 fsync 잠금 횟수를 유지합니다. lock 필드를 true 으)로 설정한 fsync 명령은 잠금 수를 늘리고 fsyncUnlock 명령은 잠금 수를 줄입니다. 잠긴 서버 또는 클러스터에서 쓰기를 활성화하려면 잠금 횟수가 0이 될 때까지 fsyncUnlock 명령을 호출합니다.

백업 작업을 수행하려는 경우 이 명령을 사용하여 쓰기를 차단할 수 있습니다.

mongosh 에서 이 명령은 db.fsyncLock() 헬퍼 메서드를 통해서도 실행할 수 있습니다.

헬퍼 메서드는 mongosh 사용자에게 편리하지만 데이터베이스 명령과 동일한 수준의 정보를 반환하지 않을 수 있습니다. 편의가 필요하지 않거나 추가 반환 필드가 필요한 경우 database 명령을 사용합니다.

명령은 다음과 같은 구문을 가집니다:

db.adminCommand(
{
fsync: 1,
lock: <Boolean>,
fsyncLockAcquisitionTimeout: <integer>,
comment: <any>
}
)

명령에는 다음과 같은 필드가 있습니다.

필드
유형
설명
fsync
integer
"1" 을 입력하여 fsync 를 적용합니다.
fsyncLockAcquisitionTimeoutMillis
integer

선택 사항입니다. 잠금을 획득하기 위해 대기하는 시간(밀리초)을 지정합니다. 잠금 획득 작업 시간이 초과되면 명령은 실패한 응답을 반환합니다.

기본값입니다: 90000

버전 7.0.2에 새로 추가됨:

lock
부울
선택 사항입니다. 서버 또는 클러스터를 잠그고 모든 쓰기 작업을 차단합니다. lock 작업이 있는 각각의 fsync은(는) 잠금을 필요로 합니다.
comment
어떤

선택 사항. 이 명령에 첨부할 사용자 제공 코멘트입니다. 설정되면 이 설명은 다음 위치에서 이 명령의 레코드와 함께 표시됩니다.

댓글은 유효한 모든 BSON types (문자열, 정수, 객체, 배열 등)이 될 수 있습니다.

fsync 명령을 lock 옵션과 함께 사용하면 cp, scp 또는 tar 와 같은 낮은 수준의 백업 유틸리티를 사용하여 데이터 파일을 안전하게 복사할 수 있습니다. 복사된 파일을 사용하여 시작된 mongod 에는 잠긴 mongod 의 사용자 작성 데이터와 구별할 수 없는 사용자 작성 데이터가 포함되어 있습니다.

잠긴 mongod의 데이터 파일은 저널링 동기화 또는 WiredTiger 스냅샷과 같은 작업으로 인해 변경될 수 있습니다. 논리 데이터에는 영향을 주지 않지만(예: 클라이언트가 액세스하는 데이터) 일부 백업 유틸리티는 이러한 변경을 감지하여 경고를 표시하거나 오류로 인해 실패할 수 있습니다. MongoDB 권장 백업 유틸리티 및 절차에 대한 자세한 내용은 MongoDB 백업 방법을 참조하세요.

버전 7.0.2에 새로 추가됨:

fsync 명령이 mongos에서 실행되면 전체 클러스터에서 fsync 작업을 수행합니다. lock 필드를 true(으)로 설정하면 클러스터에 잠금이 설정되어 추가 쓰기가 방지됩니다.

샤딩된 클러스터를 잠그기 전에 사용 가능한 자체 관리형 백업을 수행하려면 다음을 수행하세요.

  • 청크 마이그레이션, 리샤딩 또는 DDL 작업이 활성화되어 있지 않은지 확인합니다.

  • 추가 청크 마이그레이션이 시작되지 않도록 밸런서를 중지합니다.

mongod 에서 저널링을 사용하도록 설정한 경우, 파일 시스템 또는 볼륨/블록 수준 스냅샷 도구를 사용하여 데이터 세트와 저널의 백업을 단일 단위로 함께 .

fsync 명령은 lockCount 필드가 포함된 문서를 반환합니다. mongod에서 실행되는 경우 카운트는 서버에 설정된 fsync 잠금 수를 나타냅니다.

샤드 클러스터에서 실행되는 경우 mongos은(는) 각 샤드에 fsync 작업을 전송하고 각각에 대한 lockCount을(를) 포함하는 결과를 반환합니다.

참고

lockCount 필드가 0보다 크면 서버와 클러스터에서 모든 쓰기가 차단됩니다. 잠금 횟수를 줄이려면 fsyncUnlock 명령을 사용합니다.

Fsync 잠금은 복제본 세트 또는 샤드 클러스터의 프라이머리에서 실행됩니다.

기본 서버가 다운되거나 네트워크 문제로 인해 연결할 수 없는 경우 클러스터는 사용 가능한 보조 노드에서 새 프라이머리를 선택합니다. fsync 잠금이 있는 기본값이 다운되면 새 기본값은 fsync 잠금을 유지하지 않으며 쓰기 작업을 처리할 수 있습니다. 백업 작업 중에 선택 사항이 발생하면 결과 백업이 일관되지 않거나 사용할 수 없게 될 수 있습니다.

기본 다운에서 복구하기

  1. fsyncUnlock 명령을 잠금 개수가 0이 될 때까지 실행하여 모든 노드의 잠금을 해제합니다.

  2. fsync 명령을 실행하여 클러스터에서 fsync 잠금을 다시 설정합니다.

  3. 백업을 다시 시작합니다.

또한 fsync 잠금은 영구적입니다. 이전 기본값이 다시 온라인 상태가 되면 fsyncUnlock 명령을 사용하여 노드의 잠금을 해제해야 합니다.

참고

fsync 명령을 lock 옵션과 함께 사용하면 cp, scp 또는 tar 와 같은 낮은 수준의 백업 유틸리티를 사용하여 데이터 파일을 안전하게 복사할 수 있습니다. 복사된 파일을 사용하여 시작된 mongod 에는 잠긴 mongod 의 사용자 작성 데이터와 구별할 수 없는 사용자 작성 데이터가 포함되어 있습니다.

잠긴 mongod의 데이터 파일은 저널링 동기화 또는 WiredTiger 스냅샷과 같은 작업으로 인해 변경될 수 있습니다. 논리 데이터에는 영향을 주지 않지만(예: 클라이언트가 액세스하는 데이터) 일부 백업 유틸리티는 이러한 변경을 감지하여 경고를 표시하거나 오류로 인해 실패할 수 있습니다. MongoDB 권장 백업 유틸리티 및 절차에 대한 자세한 내용은 MongoDB 백업 방법을 참조하세요.

fsync 명령은 개별 mongod 인스턴스 또는 샤딩된 클러스터를 mongos(으)로 잠글 수 있습니다. lock 필드를 true(으)로 설정한 상태에서 실행하면 fsync 작업은 인스턴스 또는 클러스터를 잠금 해제할 때까지 모든 데이터를 스토리지 계층으로 플러시하고 모든 추가 쓰기 작업을 차단합니다.

데이터베이스를 잠그려면 fsync 명령을 사용하여 lock 필드를 true(으)로 설정합니다.

db.adminCommand( { fsync: 1, lock: true } )

이 작업은 작업 상태와 lockCount을(를) 포함하는 문서를 반환합니다.

{
"info" : "now locked against writes, use db.fsyncUnlock() to unlock",
"lockCount" : NumberLong(1),
"seeAlso" : "http://dochub.mongodb.org/core/fsynccommand",
"ok" : 1
}

잠기면 쓰기 작업이 차단됩니다. 별도의 연결은 쓰기 작업을 처음 시도할 때까지 읽기 작업을 계속할 수 있으며, 그 후에도 서버 또는 클러스터의 잠금이 해제될 때까지 기다립니다.

중요

fsync 잠금 작업은 잠금 횟수를 유지합니다.

쓰기를 위해 서버 또는 클러스터의 잠금을 해제하려면 잠금 횟수가 0이어야 합니다. 즉, fsync 잠금을 수행하는 지정된 횟수 동안 해당 횟수의 잠금 해제 작업을 실행하여 쓰기를 위해 서버 또는 클러스터를 잠금 해제해야 합니다.

클러스터 서버의 잠금을 해제하려면 fsyncUnlock 명령을 사용합니다.

db.adminCommnad( { fsyncUnlock: 1 } )

잠금 횟수를 0으로 줄이려면 이 명령을 필요한 만큼 반복합니다. 잠금 횟수가 0에 도달하면 서버 또는 클러스터는 쓰기를 재개할 수 있습니다.

fsync 잠금 상태를 확인하려면 db.currentOp()을(를) 사용합니다. 셸에서 다음 JavaScript 함수를 사용하여 서버 또는 클러스터가 현재 잠겼는지 테스트합니다.

serverIsLocked = function () {
var co = db.currentOp();
if (co && co.fsyncLock) {
return true;
}
return false;
}

이 함수를 mongosh 세션에 로드한 후 다음 구문을 사용하여 호출합니다.

serverIsLocked()

이 함수는 서버 또는 클러스터가 현재 잠겨 있으면 true을(를) 반환하고, 서버 또는 클러스터가 잠겨 있지 않으면 false을(를) 반환합니다.

← filemd5