저널링
장애 발생 시 내구성을 제공하기 위해 MongoDB는 디스크 상의 저널 파일에 미리 쓰기 로그를 사용합니다.
저널링과 와이어드타이거 스토리지 엔진
중요
이 섹션에서 언급된 로그 은(는) MongoDB 로그 파일이 아닌 WiredTiger 미리 쓰기(write-ahead) 로그(즉, 저널)를 의미합니다.
WiredTiger는 체크포인트를 사용해 디스크 상의 데이터를 일관되게 볼 수 있도록 하고,MongoDB가 마지막 체크포인트에서 복구할 수 있게 합니다. 그러나 체크포인트 사이에 MongoDB가 예기치 않게 종료되면, 마지막 체크포인트 이후에 발생한 정보를 복구하기 위해 저널링이 필요합니다.
참고
MongoDB 6.1부터는 저널링이 항상 활성화됩니다. 결과적으로 MongoDB는 storage.journal.enabled
옵션과 해당 --journal
및 --nojournal
명령줄 옵션을 제거합니다.
저널링을 사용하는 경우 복구 프로세스는 다음과 같습니다.
마지막 체크포인트의 식별자를 찾기 위해 데이터 파일을 살펴봅니다.
마지막 체크포인트의 식별자와 일치하는 레코드를 저널 파일에서 검색합니다.
마지막 체크포인트 이후의 저널 파일에 작업을 적용합니다.
저널링 프로세스
WiredTiger는 클라이언트가 시작한 각 쓰기 작업에 대해 하나의 저널 레코드를 생성합니다. 저널 레코드에는 초기 쓰기로 인한 내부 쓰기 작업도 포함됩니다 예를 들어, 컬렉션의 문서를 업데이트하면 인덱스 수정이 발생할 수 있으며, WiredTiger는 업데이트 작업과 관련된 인덱스 수정을 포함한 단일 저널 레코드를 생성합니다
MongoDB는 저널 기록을 저장하기 위해 인메모리 버퍼링을 사용하도록 WiredTiger를 구성합니다. 스레드는 버퍼의 해당 부분에 할당하고 복사하기 위해 조정됩니다. 최대 128KB의 모든 저널 기록이 버퍼링됩니다.
WiredTiger는 다음 조건 중 하나라도 충족되면 버퍼링된 저널 레코드를 디스크에 동기화합니다:
복제본 세트 멤버(프라이머리 및 세컨더리 멤버)의 경우:
쓰기 작업에
j: true
의 쓰기 고려를 포함하거나 암시하는 경우또한 세컨더리 노드의 경우 oplog 항목을 배치 적용할 때마다.
참고
writeConcernMajorityJournalDefault
가 true인 경우 쓰기 고려"majority"
는j: true
를 의미합니다.100밀리초마다(
storage.journal.commitIntervalMs
참조).WiredTiger가 새 저널 파일을 만들 때. MongoDB는 100MB의 저널 파일 크기 제한을 사용하기 때문에 WiredTiger는 약 100MB의 데이터마다 새 저널 파일을 생성합니다.
중요
쓰기 작업 사이에 저널 레코드가 WiredTiger 버퍼에 남으면 mongod
의 강제 종료 후 업데이트가 손실될 수 있습니다.
Journal Files
저널 파일의 경우, MongoDB는 dbPath
디렉터리 아래에 journal
이라는 이름의 하위 디렉터리를 만듭니다. WiredTiger 저널 파일은 WiredTigerLog.<sequence>
형식의 이름을 가지며, 여기서 <sequence>
는0000000001
부터 시작하는 0으로 채워진 숫자입니다.
저널 기록
저널 파일에는 각 클라이언트가 쓰기 작업을 시작할 때마다 기록이 포함됩니다.
저널 레코드에는 초기 쓰기로 인한 내부 쓰기 작업도 포함됩니다 예를 들어, 컬렉션의 문서를 업데이트하면 인덱스 수정이 발생할 수 있으며, WiredTiger는 업데이트 작업과 관련된 인덱스 수정을 포함한 단일 저널 레코드를 생성합니다
각 기록에는 고유 식별자가 있습니다.
WiredTiger의 최소 저널 레코드 크기는 128바이트입니다.
압축
기본적으로 MongoDB는 저널링 데이터에 스내피 압축을 사용하도록 WiredTiger를 구성합니다. 다른 압축 알고리즘을 지정하거나 압축을 하지 않으려면 storage.wiredTiger.engineConfig.journalCompressor
설정을 사용합니다. 자세한 내용은 WiredTiger 저널 압축기 변경을 참조하세요.
참고
로그 레코드가 128 바이트(최소 WiredTiger 로그 레코드 크기)보다 작거나 같은 경우 WiredTiger는 해당 레코드를 압축하지 않습니다.
저널 파일 크기 제한
WiredTiger 저널 파일의 최대 크기 제한은 약 100 MB입니다. 파일이 이 제한을 초과하면 WiredTiger는 새 저널 파일을 생성합니다.
WiredTiger는 오래된 저널 파일을 자동으로 제거하고 마지막 체크포인트에서 복구하는 데 필요한 파일만 유지합니다. 저널 파일에 할당할 디스크 공간을 결정하려면 다음 사항을 고려하세요.
체크포인트의 기본 최대 크기는 2 GB입니다.
체크포인트에서 복구하는 동안 MongoDB가 새 저널 파일을 작성하려면 추가 공간이 필요할 수 있습니다.
MongoDB는 저널링 파일을 압축합니다.
체크포인트를 복원하는 데 걸리는 시간은 사용 사례에 따라 다릅니다.
최대 체크포인트 크기를 재정의하거나 압축을 비활성화하면 계산이 크게 달라질 수 있습니다.
이러한 이유로 추가 공간이 얼마나 필요한지 정확히 계산하기는 어렵습니다. 디스크 공간을 과도하게 추정하는 것이 항상 더 안전한 접근 방식입니다.
중요
저널링 파일을 위한 충분한 디스크 공간을 확보하지 않으면 MongoDB 서버가 충돌합니다.
사전 할당
WiredTiger는 저널 파일을 미리 할당합니다.
저널링 및 인메모리 스토리지 엔진
MongoDB Enterprise에서 인메모리 스토리지 엔진은 일반 가용성(GA)의 일부입니다. 데이터가 메모리에 보관되기 때문에 별도의 저널이 없습니다. 쓰기 고려가 j: true
인 쓰기 작업은 즉시 승인됩니다.
복제본 세트의 투표 노드가 인메모리 스토리지 엔진을 사용하는 경우 writeConcernMajorityJournalDefault
를 false
로 설정해야 합니다.
참고
버전 4.2(4.0.13, 3.6.14 포함)부터, ), 복제본 세트 구성원이 인메모리 스토리지 엔진 (투표 또는 비투표)을 사용하지만 복제본 세트에 writeConcernMajorityJournalDefault
가 true로 설정되어 있는 경우 복제본 세트 구성원은 시작 경고를 기록합니다.
writeConcernMajorityJournalDefault
를 false
로 설정하면 MongoDB는 w: "majority"
쓰기가 디스크 저널에 작성되는 것을 기다리지 않고 쓰기를 확인합니다. 따라서 주어진 복제본 세트의 노드 과반수 이상이 일시적으로 손실된 경우(충돌, 재시작 등), "majority"
쓰기 작업이 롤백될 가능성이 있습니다.