Docs Menu
Docs Home
/
MongoDB 매뉴얼
/ / /

자체 관리형 mongod 프로세스 구성

이 페이지의 내용

  • mongod 프로세스 시작
  • mongod 프로세스 중지
  • mongod 프로세스 문제 해결
  • 복제 세트 중지

MongoDB는 기본 프로그램으로 실행됩니다. mongod 명령을 실행하고 옵션을 지정하여 명령줄에서 MongoDB를 시작할 수 있습니다. 옵션 목록은 mongod 참조에서 확인할 수 있습니다.

다음 예시에서는 mongod 프로세스가 포함된 디렉토리가 시스템 경로에 있다고 가정합니다. mongod 프로세스는 개별 서버에서 실행되는 프라이머리 데이터베이스 프로세스입니다. mongos는 클라이언트의 관점에서 .mongod와 동등한 일관적인 MongoDB 인터페이스를 제공합니다. mongosh 바이너리는 관리 셸을 제공합니다.

이 문서에서는 mongod 프로세스를 설명하지만 그 중 일부는 mongos 인스턴스에 적용될 수 있습니다.

기본적으로 MongoDB는 27017 포트에서 클라이언트의 연결을 수신하고 데이터를 /data/db 디렉토리에 저장합니다.

Windows에서는 MongoDB를 시작하는 드라이브에 이 경로가 위치합니다. 예를 들어 --dbpath를 지정하지 않고 C:\ 드라이브에서 MongoDB 서버를 시작하는 경우 모든 데이터 파일이 C:\data\db에 저장됩니다.

모든 기본값을 사용하여 MongoDB를 시작하려면 시스템 셸에서 아래 명령을 실행합니다.

mongod

mongod/data/db 이외의 경로에 데이터 파일을 저장하도록 하려면 dbPath를 지정하세요. dbPathmongod를 시작하기 전에 존재해야 합니다. 존재하지 않는 경우에는 mongod가 데이터를 읽고 이 경로에 쓸 수 있도록 디렉토리와 권한을 생성하세요. 권한에 대한 자세한 내용은 보안 연산 문서를 참조하시기 바랍니다.

mongod에 데이터 디렉토리로 사용할 dbPath를 지정하려면 --dbpath 옵션을 선택합니다. 다음 호출은 mongod 인스턴스를 시작하고 /srv/mongodb 경로에 데이터를 저장합니다.

mongod --dbpath /srv/mongodb/

참고

mongod에는 MongoDB 엔지니어가 배포 문제를 해결하는 데 도움이 되는 풀타임 진단 데이터 캡처(Full Time Diagnostic Data Capture, FTDC) 메커니즘이 포함되어 있습니다. 이 스레드가 실패하면 원래 프로세스를 종료합니다. 가장 일반적인 오류를 방지하려면 프로세스를 실행하는 사용자에게 FTDC diagnostic.data 디렉토리를 생성할 권한이 있는지 확인하십시오. mongod의 경우 이 디렉토리는 storage.dbPath 내에 있습니다. mongos의 경우 systemLog.path과 유사합니다.

네트워크 인터페이스에서 한 번에 하나의 프로세스 연결만 수신할 수 있습니다. 단일 머신에서 여러 건의 mongod 프로세스를 실행하거나 이 포트를 사용해야 하는 다른 프로세스가 있는 경우 각각 다른 포트를 할당하여 클라이언트 연결을 수신해야 합니다.

mongod에 포트를 지정하려면 명령줄에서 --port 옵션을 사용합니다. 다음 명령은 12345 포트에서 수신하는 mongod를 시작합니다.

mongod --port 12345

혼동을 피하기 위해 가능하면 기본 포트 번호를 사용합니다.

mongod 프로세스를 데몬(예: fork)으로 실행하고 출력을 로그 파일에 기록하려면 --fork--logpath 옵션을 사용합니다. 로그 디렉터리를 만들어야 하지만 로그 디렉터리가 없는 경우 mongod가 로그 파일을 생성합니다.

다음 명령은 mongod를 데몬으로 시작하고 로그 출력을 /var/log/mongodb/mongod.log에 기록합니다.

mongod --fork --logpath /var/log/mongodb/mongod.log

일반적인 사용 사례에 대한 일반적인 구성 및 배포 개요는 자체 관리 배포를 위한 런타임 데이터베이스 구성을 참조하세요.

정상 종료 시 mongod는 대기 중인 모든 작업을 완료하고 모든 데이터를 데이터 파일로 플러시한 다음 모든 데이터 파일을 닫습니다. 다른 종료 방식은 비정상적이며 데이터 파일의 유효성을 손상시킬 수 있습니다.

정상적으로 종료하려면 항상 다음 방법 중 하나를 사용하여 mongod 인스턴스를 종료합니다:

다음과 같이 db.shutdownServer() 메서드를 사용하여 mongosh에서 mongod(을)를 종료합니다.

use admin
db.shutdownServer()

init 스크립트에서 동일한 메서드를 호출해도 동일한 결과를 얻을 수 있습니다.

authorization이 허용된 시스템의 경우 사용자는 admin 데이터베이스에 인증된 경우, 혹은 인증이 허용되지 않는다면 시스템의 로컬 호스트 인터페이스를 통해서만 db.shutdownServer() 실행할 수 있습니다.

Linux에서만 지원됩니다. 명령줄에서 --shutdown 옵션을 사용하여 mongod를 종료합니다:

mongod --shutdown

mongod 인스턴스를 대화형 모드로 실행하는 경우(예: --fork 없이 실행), 정상 종료를 위해 Control-C를 실행합니다.

Linux 및 macOS에서만 지원됩니다. 명령줄에서 다음 명령 중 하나를 사용하여 특정 mongod 인스턴스를 종료합니다:

kill <mongod process ID>
kill -2 <mongod process ID>

복제본 세트 프라이머리가 SIGTERM을 수신하면 프라이머리를 강등한 후 종료하고자 합니다.

  • 강등이 성공한 경우 인스턴스는 새로운 프라이머리 이어지는 투표에 참여하지 않고 종료를 계속합니다.

  • 강등에 실패하면 인스턴스가 계속 종료됩니다.

경고

kill -9(즉, SIGKILL)을 사용하여 mongod 인스턴스를 종료하면 안 됩니다.

Linux에서 실행되는 MongoDB 인스턴스의 경우:

  • mongodmongos 프로세스가 SIGUSR2 신호를 받으면 각 프로세스 스레드의 로그에 역추적 세부 정보가 추가됩니다.

  • 역추적 세부 정보에는 프로세스에 대한 함수 호출이 표시되며, 이러한 정보는 진단에 사용하고 필요한 경우 MongoDB 지원팀에 제공할 수 있습니다.

역추적 기능은 다음 아키텍처에서 사용할 수 있습니다.

  • x86_64

  • arm64 (MongoDB 5.0.10 및 6.0부터)

실행 중인 mongod 프로세스에 아래 명령을 사용하여 SIGUSR2 신호를 실행합니다.

kill -SIGUSR2 <mongod process ID>

그 결과로 얻은 역추적 데이터는 --logpath를 사용하여 구성된 mongod 로그파일에 기록됩니다.

mongod복제본 세트프라이머리인 경우 이 mongod 인스턴스의 종료 프로세스는 아래 단계로 구성됩니다.

  1. 세컨더리가 최신 상태인지 확인합니다.

  2. 프라이머리에서 10초 이내에 세컨더리를 발견하지 못한 경우 mongod는 종료하지 않는다는 메시지를 반환합니다. shutdown 명령에 timeoutSecs 인수를 전달하여 세컨더리가 따라잡을 때까지 기다릴 수 있습니다.

  3. 프라이머리의 10초 이내에 세컨더리가 있는 경우, 프라이머리는 강등하고 세컨더리가 따라잡을 때까지 대기합니다.

  4. 60초 후 또는 세컨더리가 따라잡으면 프라이머리가 종료됩니다.

최신 세컨더리가 없는 상태에서 프라이머리를 종료하려면 다음 mongosh 연산에서와 같이 force 인수와 함께 shutdown 명령을 실행하세요.

db.adminCommand({shutdown : 1, force : true})

지정된 시간(초) 동안 세컨더리를 계속 확인하려면 timeoutSecs 인수를 적용하여 shutdown을 실행합니다. 현재 최신 상태인 세컨더리가 없다면 MongoDB는 지정된 시간(초) 동안 즉시세컨더리를 계속 확인합니다. 할당된 시간 내에 세컨더리 중 하나라도 따라잡으면 프라이머리가 종료됩니다. 세컨더리가 따라잡지 못하면 종료되지 않습니다.

다음 명령은 timeoutSecs5로 실행설정하여 shutdown을 실행합니다.

db.adminCommand({shutdown : 1, timeoutSecs : 5})

또는 db.shutdownServer() 메서드와 함께 timeoutSecs 인수를 사용할 수 있습니다.

db.shutdownServer({timeoutSecs : 5})

돌아가기

최신 패치 릴리스로 업그레이드