fsync
정의
fsync
보류 중인 모든 쓰기를 스토리지 계층에서 디스크로 플러시합니다.
lock
필드를true
(으)로 설정하면 서버 또는 클러스터에 잠금을 설정하여 잠금이 해제될 때까지 추가 쓰기를 방지합니다.MongoDB 5 부터 시작.0.22
fsync
및fsyncUnlock
명령은mongos
에서 실행하여 샤드 클러스터를 잠그고 잠금 해제할 수 있습니다.애플리케이션이 데이터를 쓰면 MongoDB는 스토리지 계층에 데이터를 기록한 다음 디스크에 데이터를 씁니다.
디스크에 쓰기를 플러시하려면
fsync
를 실행합니다.WiredTiger는 내구성 있는 데이터를 제공하기 위해 체크포인트를 사용합니다. 자세한 내용은 저널링 및 WiredTiger 스토리지 엔진을 참조하세요.
중요
서버는 fsync 잠금 횟수를 유지합니다.
lock
필드를true
으)로 설정한fsync
명령은 잠금 수를 늘리고fsyncUnlock
명령은 잠금 수를 줄입니다. 잠긴 서버 또는 클러스터에서 쓰기를 활성화하려면 잠금 횟수가 0이 될 때까지fsyncUnlock
명령을 호출합니다.백업 작업을 수행하려는 경우 이 명령을 사용하여 쓰기를 차단할 수 있습니다.
팁
mongosh
에서 이 명령을db.fsyncLock()
헬퍼 메서드를 통해서도 실행할 수 있습니다.헬퍼 메서드는
mongosh
사용자에게 편리하지만 데이터베이스 명령과 동일한 수준의 정보를 반환하지 못할 수 있습니다. 편의가 필요하지 않거나 추가 리턴 필드가 필요한 경우 데이터베이스 명령을 사용합니다.fsync
명령의 구문은 다음과 같습니다.db.adminCommand( { fsync: 1, lock: <Boolean>, fsyncLockAcquisitionTimeout: <integer>, comment: <any> } ) fsync
명령에는 다음과 같은 필드가 있습니다.필드유형설명fsync
integer"1" 을 입력하여fsync
를 적용합니다.fsyncLockAcquisitionTimeoutMillis
integer선택 사항입니다. 잠금을 획득하기 위해 대기하는 시간(밀리초)을 지정합니다. 잠금 획득 작업 시간이 초과되면 명령은 실패한 응답을 반환합니다.
기본값입니다:
90000
버전 5.0.22에 추가 되었습니다.
lock
부울선택 사항입니다. 서버 또는 클러스터를 잠그고 모든 쓰기 작업을 차단합니다.lock
작업이 있는 각각의fsync
은(는) 잠금을 필요로 합니다.comment
어떤선택 사항. 이 명령에 첨부할 사용자 제공 코멘트입니다. 설정되면 이 설명은 다음 위치에서 이 명령의 레코드와 함께 표시됩니다.
mongod 로그 메시지(
attr.command.cursor.comment
필드).데이터베이스 프로파일러 출력의
command.comment
필드에 있습니다.currentOp
{command.comment
5} 필드에 출력을 입력합니다.
댓글은 유효한 모든 BSON types (문자열, 정수, 객체, 배열 등)이 될 수 있습니다.
고려 사항
fsync
명령을 lock
옵션과 함께 사용하면 cp
, scp
또는 tar
와 같은 낮은 수준의 백업 유틸리티를 사용하여 데이터 파일을 안전하게 복사할 수 있습니다. 복사된 파일을 사용하여 시작된 mongod
에는 잠긴 mongod
의 사용자 작성 데이터와 구별할 수 없는 사용자 작성 데이터가 포함되어 있습니다.
The data files of a locked mongod
may change due to operations such as journaling syncs or WiredTiger snapshots. While this has no affect on the logical data (e.g. data accessed by clients), some backup utilities may detect these changes and emit warnings or fail with errors. For more information on MongoDB- recommended backup utilities and procedures, see Backup Methods for a Self-Managed Deployment.
대규모 배포에 미치는 영향
버전 5.0.22에 추가 되었습니다.
fsync
명령이 mongos
에서 실행되면 전체 클러스터에서 fsync 작업을 수행합니다. lock
필드를 true
(으)로 설정하면 클러스터에 잠금이 설정되어 추가 쓰기가 방지됩니다.
샤딩된 클러스터를 잠그기 전에 사용 가능한 자체 관리형 백업을 수행하려면 다음을 수행하세요.
청크 마이그레이션, 리샤딩 또는 DDL 작업이 활성화되어 있지 않은지 확인합니다.
추가 청크 마이그레이션이 시작되지 않도록 밸런서를 중지합니다.
저널링의 대안
mongod
에서 저널링을 사용하도록 설정한 경우, 파일 시스템 또는 볼륨/블록 수준 스냅샷 도구를 사용하여 데이터 세트와 저널의 백업을 단일 단위로 함께 .
잠금 횟수
fsync
명령은 lockCount
필드가 포함된 문서를 반환합니다. mongod
에서 실행되는 경우 카운트는 서버에 설정된 fsync 잠금 수를 나타냅니다.
샤드 클러스터에서 실행되는 경우 mongos
은(는) 각 샤드에 fsync 작업을 전송하고 각각에 대한 lockCount
을(를) 포함하는 결과를 반환합니다.
참고
lockCount
필드가 0보다 크면 서버와 클러스터에서 모든 쓰기가 차단됩니다. 잠금 횟수를 줄이려면 fsyncUnlock
명령을 사용합니다.
실패 후 동기화 잠금 해제
Fsync 잠금은 복제본 세트 또는 샤드 클러스터의 프라이머리에서 실행됩니다.
기본 서버가 다운되거나 네트워크 문제로 인해 연결할 수 없는 경우 클러스터는 사용 가능한 보조 노드에서 새 프라이머리를 선택합니다. fsync 잠금이 있는 기본값이 다운되면 새 기본값은 fsync 잠금을 유지하지 않으며 쓰기 작업을 처리할 수 있습니다. 백업 작업 중에 선택 사항이 발생하면 결과 백업이 일관되지 않거나 사용할 수 없게 될 수 있습니다.
기본 다운에서 복구하기
fsyncUnlock
명령을 잠금 개수가 0이 될 때까지 실행하여 모든 노드의 잠금을 해제합니다.fsync
명령을 실행하여 클러스터에서 fsync 잠금을 다시 설정합니다.백업을 다시 시작합니다.
또한 fsync 잠금은 영구적입니다. 이전 기본값이 다시 온라인 상태가 되면 fsyncUnlock
명령을 사용하여 노드의 잠금을 해제해야 합니다.
예제
Fsync 잠금
참고
fsync
명령을 lock
옵션과 함께 사용하면 cp
, scp
또는 tar
와 같은 낮은 수준의 백업 유틸리티를 사용하여 데이터 파일을 안전하게 복사할 수 있습니다. 복사된 파일을 사용하여 시작된 mongod
에는 잠긴 mongod
의 사용자 작성 데이터와 구별할 수 없는 사용자 작성 데이터가 포함되어 있습니다.
The data files of a locked mongod
may change due to operations such as journaling syncs or WiredTiger snapshots. While this has no affect on the logical data (e.g. data accessed by clients), some backup utilities may detect these changes and emit warnings or fail with errors. For more information on MongoDB- recommended backup utilities and procedures, see Backup Methods for a Self-Managed Deployment.
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 잠금을 수행하는 지정된 횟수 동안 해당 횟수의 잠금 해제 작업을 실행하여 쓰기를 위해 서버 또는 클러스터를 잠금 해제해야 합니다.
Fsync 잠금 해제
클러스터 서버의 잠금을 해제하려면 fsyncUnlock
명령을 사용합니다.
db.adminCommand( { 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
을(를) 반환합니다.