测试环境为centos7系统,mongodb版本为4.0
安装
- 禁用大内存页面
echo "never" > /sys/kernel/mm/transparent_hugepage/enabled
echo "never" > /sys/kernel/mm/transparent_hugepage/defrag
- 配置yum源并安装启动
cat > /etc/yum.repos.d/mongodb-org-4.0.repo <<EOF
[mongodb-org-4.0]
name=MongoDB Repository
baseurl=https://repo.mongodb.org/yum/redhat/\$releasever/mongodb-org/4.0/x86_64/
gpgcheck=1
enabled=1
gpgkey=https://www.mongodb.org/static/pgp/server-4.0.asc
EOF
yum install -y mongodb-org
systemctl start mongod
systemctl enable mongod
‘/etc/mongod.conf’常用配置项的含义
- 系统日志
systemLog:
destination: file
logAppend: true
path: /var/log/mongodb/mongod.log
名称 | 说明 |
---|---|
verbosity: 0 | 日志级别,0:默认值,包含“info”信息,1~5,即大于0的值均会包含debug信息 |
quiet: true | “安静”,此时mongod/mongos将会尝试减少日志的输出量。不建议在production环境下开启,否则将会导致跟踪错误比较困难。 |
traceAllExceptions: true | 打印异常详细信息。 |
path: /var/log/mongodb/mongod.log | 日志路径 |
logAppend: false | 如果为true,当mongod/mongos重启后,将在现有日志的尾部继续添加日志。否则,将会备份当前日志文件,然后创建一个新的日志文件;默认为false。 |
logRotate: rename | 日志“回转”,防止一个日志文件特别大,则使用logRotate指令将文件“回转”,可选值:1)rename:重命名日志文件,默认值。2)reopen:使用linux日志rotate特性,关闭并重新打开此日志文件,可以避免日志丢失,但是logAppend必须为true。 |
destination: file | 日志输出目的地,可以指定为“ file”或者“syslog”,表述输出到日志文件,如果不指定,则会输出到标准输出中(standard output) |
- 存储
storage:
dbPath: /var/lib/mongo
journal:
enabled: true
名称 | 说明 |
---|---|
dbPath | mongod进程存储数据目录,此配置仅对mongod进程有效 |
indexBuildRetry | 当构建索引时mongod意外关闭,那么再次启动是否重新构建索引;索引构建失败,mongod重启后将会删除尚未完成的索引,但是否重建由此参数决定。默认值为true. |
repairPath | 配合–repair启动命令参数,在repair期间使用此目录存储临时数据,repair结束后此目录下数据将被删除,此配置仅对mongod进程有效。不建议在配置文件中配置,而是使用mongod启动命令指定。 |
engine | 存储引擎类型,mongodb 3.0之后支持“mmapv1”、“wiredTiger”两种引擎,默认值为“mmapv1”;官方宣称wiredTiger引擎更加优秀。 |
journal | 是否开启journal日志持久存储,journal日志用来数据恢复,是mongod最基础的特性,通常用于故障恢复。64位系统默认为true,32位默认为false,建议开启,仅对mongod进程有效。 |
directoryPerDB | 是否将不同DB的数据存储在不同的目录中 默认值为false |
syncPeriodSecs | mongod使用fsync操作将数据flush到磁盘的时间间隔,默认值为60(单位:秒)强烈建议不要修改此值 mongod将变更的数据写入journal后再写入内存,并间歇性的将内存数据flush到磁盘中,即延迟写入磁盘,有效提升磁盘效率 |
mmapv1 | 仅对MMAPV1引擎 |
quota: | enforced:false 配额管理,是否限制每个DB所能持有的最大文件数量 默认值为false;maxFilesPerDB:8 如果enforce开启,每个DB所持有的存储文件不会超过此阀值 |
smallFiles: false | 是否使用小文件存储数据;如果此值为true mongod将会限定每个数据文件的大小为512M(默认最大为2G),journal降低到128M(默认为1G)。如果DB的数据量较大,将会导致每个DB创建大量的小文件,这对性能有一定的影响。在production环境下,不建议修改此值,在测试时可以设置为true,节约磁盘。 |
- 进程管理
processManagement:
fork: true # fork and run in background
pidFilePath: /var/run/mongodb/mongod.pid # location of pidfile
timeZoneInfo: /usr/share/zoneinfo
名称 | 说明 |
---|---|
fork | 运行在后台 |
pidFilePath | PID文件路径 |
- 网络接口
net:
port: 27017
bindIp: 127.0.0.1
名称 | 说明 |
---|---|
port | 端口 |
bindIp | 绑定外网IP 多个用逗号分隔 |
maxIncomingConnections | 进程允许的最大连接数 默认值为65536 |
wireObjectCheck | 当客户端写入数据时 检测数据的有效性(BSON) 默认值为true |
ipv6 | 默认值为false |
- 安全
security:
authorization: enabled
clusterAuthMode: keyFile
keyFile: keyfile_path
javascriptEnabled: true
名称 | 说明 |
---|---|
authorization | disabled或者enabled,仅对mongod有效;表示是否开启用户访问控制(Access Control),即客户端可以通过用户名和密码认证的方式访问系统的数据,默认为“disabled”,即客户端不需要密码即可访问数据库数据。(限定客户端与mongod、mongos的认证) |
clusterAuthMode | 集群中members之间的认证模式,可选值为“keyFile”、“sendKeyFile”、“sendX509”、“x509”,对mongod/mongos有效;默认值为“keyFile”,mongodb官方推荐使用x509,不过我个人觉得还是keyFile比较易于学习和使用。不过3.0版本中,mongodb增加了对TLS/SSL的支持,如果可以的话,建议使用SSL相关的配置来认证集群的member,此文将不再介绍。(限定集群中members之间的认证) |
keyFile | 当clusterAuthMode为“keyFile”时,此参数指定keyfile的位置,mongodb需要有访问此文件的权限。 |
javascriptEnabled | true或者false,默认为true,仅对mongod有效;表示是否关闭server端的javascript功能,就是是否允许mongod上执行javascript脚本,如果为false,那么mapreduce、group命令等将无法使用,因为它们需要在mongod上执行javascript脚本方法。如果你的应用中没有mapreduce等操作的需求,为了安全起见,可以关闭javascript。 |
一个conf配置示例
systemLog:
quiet: false
path: /data/mongodb/logs/mongod.log
logAppend: false
destination: file
processManagement:
fork: true
pidFilePath: /data/mongodb/mongod.pid
net:
bindIp: 127.0.0.1
port: 27017
maxIncomingConnections: 65536
wireObjectCheck: true
ipv6: false
storage:
dbPath: /var/lib/mongo
indexBuildRetry: true
journal:
enabled: true
directoryPerDB: false
engine: mmapv1
syncPeriodSecs: 60
mmapv1:
quota:
enforced: false
maxFilesPerDB: 8
smallFiles: true
journal:
commitIntervalMs: 100
wiredTiger:
engineConfig:
cacheSizeGB: 8
journalCompressor: snappy
directoryForIndexes: false
collectionConfig:
blockCompressor: snappy
indexConfig:
prefixCompression: true
operationProfiling:
slowOpThresholdMs: 100
mode: off
参考文章:
https://docs.mongodb.com/manual/reference/configuration-options/index.html
https://www.jianshu.com/p/f9f1454f251f