자체 관리형 mongod
프로세스 구성
MongoDB는 기본 프로그램으로 실행됩니다. mongod
명령을 실행하고 옵션을 지정하여 명령줄에서 MongoDB를 시작할 수 있습니다. 옵션 목록은 mongod
참조에서 확인할 수 있습니다.
다음 예시에서는 mongod
프로세스가 포함된 디렉토리가 시스템 경로에 있다고 가정합니다. mongod
프로세스는 개별 서버에서 실행되는 프라이머리 데이터베이스 프로세스입니다. mongos
는 클라이언트의 관점에서 .mongod
와 동등한 일관적인 MongoDB 인터페이스를 제공합니다. mongosh
바이너리는 관리 셸을 제공합니다.
이 문서에서는 mongod
프로세스를 설명하지만 그 중 일부는 mongos
인스턴스에 적용될 수 있습니다.
mongod
프로세스 시작
기본적으로 MongoDB는 27017
포트에서 클라이언트의 연결을 수신하고 데이터를 /data/db
디렉토리에 저장합니다.
Windows에서는 MongoDB를 시작하는 드라이브에 이 경로가 위치합니다. 예를 들어 --dbpath
를 지정하지 않고 C:\
드라이브에서 MongoDB 서버를 시작하는 경우 모든 데이터 파일이 C:\data\db
에 저장됩니다.
모든 기본값을 사용하여 MongoDB를 시작하려면 시스템 셸에서 아래 명령을 실행합니다.
mongod
데이터 디렉토리 지정
mongod
가 /data/db
이외의 경로에 데이터 파일을 저장하도록 하려면 dbPath
를 지정하세요. dbPath
는 mongod
를 시작하기 전에 존재해야 합니다. 존재하지 않는 경우에는 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
과 유사합니다.
TCP 포트 지정
네트워크 인터페이스에서 한 번에 하나의 프로세스 연결만 수신할 수 있습니다. 단일 머신에서 여러 건의 mongod
프로세스를 실행하거나 이 포트를 사용해야 하는 다른 프로세스가 있는 경우 각각 다른 포트를 할당하여 클라이언트 연결을 수신해야 합니다.
mongod
에 포트를 지정하려면 명령줄에서 --port
옵션을 사용합니다. 다음 명령은 12345
포트에서 수신하는 mongod
를 시작합니다.
mongod --port 12345
혼동을 피하기 위해 가능하면 기본 포트 번호를 사용합니다.
을(를) 데몬으로시작 mongod
mongod
프로세스를 데몬(예: fork
)으로 실행하고 출력을 로그 파일에 기록하려면 --fork
및 --logpath
옵션을 사용합니다. 로그 디렉터리를 만들어야 하지만 로그 디렉터리가 없는 경우 mongod
가 로그 파일을 생성합니다.
다음 명령은 mongod
를 데몬으로 시작하고 로그 출력을 /var/log/mongodb/mongod.log
에 기록합니다.
mongod --fork --logpath /var/log/mongodb/mongod.log
추가 구성 옵션
일반적인 사용 사례에 대한 일반적인 구성 및 배포 개요는 자체 관리 배포를 위한 런타임 데이터베이스 구성을 참조하세요.
mongod
프로세스 중지
정상 종료 시 mongod
는 대기 중인 모든 작업을 완료하고 모든 데이터를 데이터 파일로 플러시한 다음 모든 데이터 파일을 닫습니다. 다른 종료 방식은 비정상적이며 데이터 파일의 유효성을 손상시킬 수 있습니다.
정상적으로 종료하려면 항상 다음 방법 중 하나를 사용하여 mongod
인스턴스를 종료합니다:
다음을 사용하세요. shutdownServer()
다음과 같이 db.shutdownServer()
메서드를 사용하여 mongosh
에서 mongod
(을)를 종료합니다.
use admin db.shutdownServer()
init 스크립트에서 동일한 메서드를 호출해도 동일한 결과를 얻을 수 있습니다.
authorization
이 허용된 시스템의 경우 사용자는 admin
데이터베이스에 인증된 경우, 혹은 인증이 허용되지 않는다면 시스템의 로컬 호스트 인터페이스를 통해서만 db.shutdownServer()
를 실행할 수 있습니다.
다음을 사용하세요. --shutdown
Linux에서만 지원됩니다. 명령줄에서 --shutdown
옵션을 사용하여 mongod
를 종료합니다:
mongod --shutdown
다음을 사용하세요. CTRL-C
mongod
인스턴스를 대화형 모드로 실행하는 경우(예: --fork
없이 실행), 정상 종료를 위해 Control-C
를 실행합니다.
다음을 사용하세요. kill
Linux 및 macOS에서만 지원됩니다. 명령줄에서 다음 명령 중 하나를 사용하여 특정 mongod
인스턴스를 종료합니다:
kill <mongod process ID> kill -2 <mongod process ID>
SIGTERM
및 복제 세트
복제본 세트 프라이머리가 SIGTERM
을 수신하면 프라이머리를 강등한 후 종료하고자 합니다.
강등이 성공한 경우 인스턴스는 새로운 프라이머리 이어지는 투표에 참여하지 않고 종료를 계속합니다.
강등에 실패하면 인스턴스가 계속 종료됩니다.
SIGKILL
경고
kill -9
(즉, SIGKILL
)을 사용하여 mongod 인스턴스를 종료하면 안 됩니다.
프로세스 mongod
문제 해결
역추적 생성
Linux에서 실행되는 MongoDB 인스턴스의 경우:
mongod
및mongos
프로세스가SIGUSR2
신호를 받으면 각 프로세스 스레드의 로그에 역추적 세부 정보가 추가됩니다.역추적 세부 정보에는 프로세스에 대한 함수 호출이 표시되며, 이러한 정보는 진단에 사용하고 필요한 경우 MongoDB 지원팀에 제공할 수 있습니다.
역추적 기능은 다음 아키텍처에서 사용할 수 있습니다.
x86_64
arm64
(MongoDB 5.0.10 및 6.0부터)
실행 중인 mongod
프로세스에 아래 명령을 사용하여 SIGUSR2
신호를 실행합니다.
kill -SIGUSR2 <mongod process ID>
복제 세트 중지
절차
mongod
가 복제본 세트의 프라이머리인 경우 이 mongod
인스턴스의 종료 프로세스는 아래 단계로 구성됩니다.
복제 세트 강제 종료
최신 세컨더리가 없는 상태에서 프라이머리를 종료하려면 다음 mongosh
연산에서와 같이 force
인수와 함께 shutdown
명령을 실행하세요.
db.adminCommand({shutdown : 1, force : true})
지정된 시간(초) 동안 세컨더리를 계속 확인하려면 timeoutSecs
인수를 적용하여 shutdown
을 실행합니다. 현재 최신 상태인 세컨더리가 없다면 MongoDB는 지정된 시간(초) 동안 즉시세컨더리를 계속 확인합니다. 할당된 시간 내에 세컨더리 중 하나라도 따라잡으면 프라이머리가 종료됩니다. 세컨더리가 따라잡지 못하면 종료되지 않습니다.
다음 명령은 timeoutSecs
를 5
로 실행설정하여 shutdown
을 실행합니다.
db.adminCommand({shutdown : 1, timeoutSecs : 5})
또는 db.shutdownServer()
메서드와 함께 timeoutSecs
인수를 사용할 수 있습니다.
db.shutdownServer({timeoutSecs : 5})