본문 바로가기

Mongodb

mongodb configuration

sharded cluster를 설정할 때 port, replicaset name, sharding role 등을 제외한 나머지는 대부분 비슷한 것을 볼 수 있을 것이다. 보통 mongodb config file은 indent를 기준으로 key:value로 작성되며 yaml 포맷이다.

 

systemLog:
  destination: file
  logAppend: true
  path: /var/log/mongodb/mongod_cfg.log
storage:
  dbPath: /var/lib/mongo/cfg
  journal:
    enabled: true
    commitIntervalMs: 200
  wiredTiger:
    engineConfig:
      cacheSizeGB: 1
      journalCompressor: snappy
      directoryForIndexes: false
    collectionConfig:
      blockCompressor: snappy
    indexConfig:
      prefixCompression: true
processManagement:
  fork: true  # fork and run in background
  pidFilePath: /var/run/mongodb/mongod_cfg.pid  # location of pidfile
  timeZoneInfo: /usr/share/zoneinfo
net:
  port: 27019
  bindIp: 0.0.0.0  # Enter 0.0.0.0,:: to bind to all IPv4 and IPv6 addresses or, alternatively, use the net.bindIpAll setting.
  tls:
    mode: requireTLS
    certificateKeyFile: /etc/ssl/mongodb.pem
    CAFile: /etc/ssl/caToValidateClientCertificates.pem
setParameter:
  enableLocalhostAuthBypass: false
replication:
  replSetName: "cfgrepl"
sharding:
  clusterRole: configsvr

 

대표적으로 위 config file처럼 쓰이는데, 하나하나씩 살펴보자.

 

systemLog:
  destination: file
  path: "/data/log/mongodb"
  logAppend: true

 

destination은 무엇으로 저장할지에 대해 정하는 항목이며, file과 syslog를 넣을 수 있다.

file로 지정한 경우에는 file path를 지정해주기 위해 path를 써야한다.

destination을 지정안하거나 syslog로 지정할 시 standard output으로 출력한다.

 

logAppend는 default가 false이며 true일 경우 현재 있는 log파일을 계속 append해가면서 작성하지만,

false일 경우 새로운 로그파일을 생성한다.

 

storage:
  dbPath: /var/lib/mongo/cfg
  journal:
    enabled: true
    commitIntervalMs: 200
  wiredTiger:
    engineConfig:
      cacheSizeGB: 1
      journalCompressor: snappy
      directoryForIndexes: false
    collectionConfig:
      blockCompressor: snappy
    indexConfig:
      prefixCompression: true

 

그 다음 storage를 보자.

dbPath는 당연히 실제 데이터를 저장할 경로이다.

 

journal은 일종의 log시스템으로 데이터 손실을 방지하기 위해 commitIntervalMs마다 데이터 수정, 삭제, 추가 등의 변화가 생길경우 이를 기록하는 시스템이다. 그리고 Mongodb4.0이상버전에서는 wiredTiger engin을 사용할 경우 journal을 무조건 사용하도록 되어있다고 한다.

 

다음은 engine을 설정해주어야하는데 3.2이상부터는 default로 wiredTiger를 사용하고 있다. 

 

cacheSizeGB는 GB 단위이며, 범위는 256MB~10TB이며, cache를 사용할 수 있는 메모리 세팅항목이다. default는 256MB or ram의 절반 - 1gb 이다.

 

journalCompressor는 journal을 압축할 것이지 안할 것인지이며, 방식은 none, snappy, zlib를 지원한다.

 

directoryForIndexes는 default가 false이며, true일 경우 dbPath경로에 index들과 collection들을 분리하여 저장된다.

 

collectionConfig는 collection에 관한 설정이며, blockCompressor는 압축을 어떤 방식으로 할 것인지이며 위의 journalCompressor와 같다. 만약 이전에 snappy로 지정하고 생성된 collection이 있는 db에 대해 zlib로 바꾼다면, snappy로 생성되었던 collection들은 snappy로 압축하고, 새로 생성된 collection은 zlib로 압축한다.

 

indexConfig는 index 설정에 관한 것으로, prefixCompression은 압축을 할것인지에 대한것으로 boolean을 값을 받는다.

 

processManagement:
  fork: true  # fork and run in background
  pidFilePath: /var/run/mongodb/mongod_cfg.pid  # location of pidfile
  timeZoneInfo: /usr/share/zoneinfo

 

다음은 processManagement로 process를 어떻게 할 지에 관한 설정이다.

fork의 default는 false이며, true로 해줄 경우 daemon 형태로 띄며, background로 돌아간다.

 

pidFilePath은 pid를 저장하는 파일 경로이며, fork가 true일 경우에만 같이 쓰인다.

 

timeZoneInfo의 default는 /usr/share/zoneinfo이다.

 

net:
  port: 27019
  bindIp: 0.0.0.0  # Enter 0.0.0.0,:: to bind to all IPv4 and IPv6 addresses or, alternatively, use the net.bindIpAll setting.
  tls:
    mode: requireTLS
    certificateKeyFile: /etc/ssl/mongodb.pem
    CAFile: /etc/ssl/caToValidateClientCertificates.pem

 

net은 network관련된 설정이며, bindIp는 0.0.0.0일 경우 모든 ip를 허용한다는 의미이다. tls는 인증서를 이용해 암호화된 데이터를 넘겨줄 경우 사용되며, CAFile과 certificateKeyFile을 지정해주어야한다.

 

setParameter:
  enableLocalhostAuthBypass: false
replication:
  replSetName: "cfgrepl"
sharding:
  clusterRole: configsvr

 

setParameter는 MongoDB Server parameter들을 설정해주는 항목이며, enableLocalhostAuthBypass는 로컬호스트에서 인증을 할지 결정하는 설정이다. default는 true이며, 처음에 user가 없는 경우에 auth를 우회하는 용도로 true를 사용하고 있지만, sharding할 경우 보통 false를 사용한다.

 

replication의 replSetName과 sharding의 clusterRole은 각각 replication의 이름과 cluster의 역할을 지정하는 옵션이다.

'Mongodb' 카테고리의 다른 글

SSL/TLS Connection With Mongodb  (0) 2021.11.15
Mongodb Sharded Cluster  (2) 2021.11.12