配置适用于mongod、mongos,下面的介绍中只使用mongod举例说明,如有不同之处,会特别指出。
mongodb 3.0之后配置文件采用YAML格式,这种格式非常简单,使用<key>:<value>表示,开头使用“空格”作为缩进,不能使用tab。需要注意的是,“:”之后有value的话,需要紧跟一个空格,如果key只是表示层级,则无需在“:”后增加空格(比如:systemLog:后面既不需要空格)。按照层级,每行4个空格缩进,第二级则8个空格,依次轮推,顶层则不需要空格缩进。如果格式不正确,将会出现错误:
参考文章:http://shift-alt-ctrl.iteye.com/blog/2242907
配置的实例:Mongodb中配置实例
1、使用配置文件启动,使用–config 或 -f
mongod --config /etc/mongod.conf mongos --config /etc/mongos.conf mongod -f /etc/mongod.conf mongos -f /etc/mongos.con
2、systemLog配置项
systemLog.verbosity <int> #日志文件输出的级别,越大级别越低,共0-5级,默认0 systemLog.quite <boolean> #在quite模式下会限制输出信息:数据库命令输出,副本集活动, #连接接受事件,连接关闭事件。 systemLog.traceAllExceptions <boolean> #打印verbose信息来调试,用来记录证额外的异常日志。 systemLog.syslogFacility <string> #指定syslog日志信息的设备级别。需要指定--syslog来使用这个选项 #默认 user systemLog.path #日志文件路径 systemLog.logAppend <boolean> #是否启用追加日志,默认为false。 systemLog.logRotate <string> #默认rename,可选reopen。 #使用reopen必需设定systemLog.logAppend=true systemLog.destination #可选file | syslog ,指定一个文件或syslog。如果指定为文件, #必须同时指定systemLog.path systemLog.timeStampFormat #日志的时间格式,可选项 ctime | iso8601-utc | iso8601-local #一般情况下使用易看的ctime,而系统默认iso8601-local 设置各组件的日志级别 systemLog.component.accessControl.verbosity systemLog.component.command.verbosity systemLog.component.control.verbosity systemLog.component.ftdc.verbosity systemLog.component.geo.verbosity systemLog.component.index.verbosity systemLog.component.network.verbosity systemLog.component.query.verbosity systemLog.component.replication.verbosity systemLog.component.sharding.verbosity systemLog.component.storage.verbosity systemLog.component.storage.journal.verbosity #如果没有设置, #将使用systemLog.component.storage.verbosity systemLog.component.write.verbosity
3、processManagement
processManagement.fork <boolean> #启动守护进程在后台运行,默认为false processManagement.pidFilePath #pid的路径
4、net Options
net.port
net.bindIp #多个ip使用,分隔
net.maxIncomingConnections #mongodb实例接受的最多连接数,
#如果高于操作系统接受的最大线程数,设置无效。默认值 65536
net.wireObjectCheck <boolean> #检查文档的有效性。会稍微影响性能
net.ipv6 #打开IPV6功能,默认为关闭的
net.unixDomainSocket.enabled #默认为true
net.unixDomainSocket.pathPrefix #unix Socket所在的路径,默认为/tmp
net.unixDomainSocket.filePermissions # 默认为0700
#mogod 和 mongos 会一直监听socket,直到下面的条件成立
1、设置net.unixDomainSocket.enabled为false
2、命令行中使用 --nounixsocket
3、没有设置net.bindIp或者net.bindIp的值为空
net.ssl.mode #disabled | allowSSL | preferSSL | requireSS
5、security
security.authorization #disabled或者enabled,仅对mongod有效;表示是否开启用户访问控制(Access Control), 即客户端可以通过用户名和密码认证的方式访问系统的数据,默认为“disabled”, 即客户端不需要密码即可访问数据库数据。(限定客户端与mongod、mongos的认证) 该设置可以根据不同的用户设置不同的权限。为了安全起见建议开启,并给相应的用户设置不通的权限。 security.clusterAuthMode #keyFile | sendKeyFile | sendX509 | x509 为“keyFile”、“sendKeyFile”、“sendX509”、“x509”,对mongod/mongos有效;默认值为“keyFile”, mongodb官方推荐使用x509,不过我个人觉得还是keyFile比较易于学习和使用。 不过3.0版本中,mongodb增加了对TLS/SSL的支持,如果可以的话,建议使用SSL相关的配置来认证集群的member, 此文将不再介绍。(限定集群中members之间的认证) security.keyFile #指定分片集或副本集成员之间身份验证的key文件存储位置。 当clusterAuthMode为“keyFile”时,此参数指定keyfile的位置,mongodb需要有访问此文件的权限。 security.javascriptEnabled true或者false,默认为true,仅对mongod有效;表示是否关闭server端的javascript功能, 就是是否允许mongod上执行javascript脚本,如果为false, 那么mapreduce、group命令等将无法使用,因为它们需要在mongod上执行javascript脚本方法。 如果你的应用中没有mapreduce等操作的需求,为了安全起见,可以关闭javascript。 security.transitionToAuth 默认为false security.kmip.XXXX -仅限于企业版使用 security.encryptionKeyFile - 仅限于企业版 security.encryptionCipherMode - 仅限于企业版 security.enableEncryption - 仅限于企业
6、storage Options
storage.dbPath
storage.indexBuildRetry
当构建索引时mongod意外关闭,那么再次启动是否重新构建索引;
索引构建失败,mongod重启后将会删除尚未完成的索引,但是否重建由此参数决定。默认值为true
当索引引擎为内存时,该参数设置无效
storage.repairPath
默认,在dbPath目录下创建A _tmp_repairDatabase_<num>的目录
配合--repair启动命令参数,在repair期间使用此目录存储临时数据,repair结束后此目录下数据将被删除,
此配置仅对mongod进程有效。当索引为内存时,参数无效.
storage.journal.enabled
是否开启journal日志持久存储,journal日志用来数据恢复,是mongod最基础的特性,通常用于故障恢复。
64位系统默认为true,32位默认为false,建议开启,仅对mongod进程有效
storage.journal.commitIntervalMs
mongod进程提交journal日志的时间间隔,即fsync的间隔。
考虑到磁盘效能,mongod间歇性的flush日志数据;此值越小,数据丢失的可能性越低,磁盘消耗越大,性能越低。
如果希望write操作强制立即写入journal,可以传递参数选项“j:true”(在客户端write操作中指定此选项即可),
此操作(包括此前尚未提交的)将会立即fsync到磁盘。仅对mongod有效,单位:毫秒
默认100 or 30,该值可设置1-500ms之间
storage.directoryPerDB
是否将不同DB的数据存储在不同的目录中,dbPath的子目录,目录名为db的名称。
对已经存储数据的mongod修改此值,需要首先使用mongodump指令将数据导出,然后关闭mongod,
再修改此值和指定新的dbPath,然后使用mongorestore指令重新导入数据。
(即导出数据,并使用mongorestore将数据重新写入mongod的新目录中)
对于replica set架构模式,只需要在每个secondary依次操作:关闭secondary,然后配置新的dbPath,
然后启动即可(会执行初始化sync,从primary中将数据去完全同步到本地)。最后操作primary。
此参数仅对mongod进程有效,默认值为false,不建议修改此值
默认:false
storage.syncPeriodSecs
mongod使用fsync操作将数据flush到磁盘的时间间隔,默认值为60(单位:秒),
强烈建议不要修改此值;mongod将变更的数据写入journal后再写入内存,并间歇性的将内存数据flush到磁盘中,
即延迟写入磁盘,有效提升磁盘效率。此指令不影响journal存储,仅对mongod有效。
如果设置为0,数据将不同步到硬盘。
storage.engine
默认:wiredTiger
可选 mmapv1 | wiredTiger | inMemory
7、storage.wiredTiger Options
storage.wiredTiger.engineConfig.cacheSizeGB wiredTiger缓存工作集(working set)数据的内存大小,单位:GB 此值决定了wiredTiger与mmapv1的内存模型不同,它可以限制mongod对内存的使用量, 而mmapv1则不能(依赖于系统级的mmap)。 默认情况下,cacheSizeGB的值为假定当前节点只部署一个mongod实例,此值的大小为物理内存的一半; 如果当前节点部署了多个mongod进程,那么需要合理配置此值。 如果mongod部署在虚拟容器中(比如,lxc,cgroups,Docker)等,它将不能使用整个系统的物理内存, 则需要适当调整此值。默认值为物理内存的一半。 可以设置为一个浮点数,可以从256MB - 10T,默认为RAM的一半或256MB storage.wiredTiger.engineConfig.journalCompressor journal日志的压缩算法,可选值为“none”、“snappy”、“zlib” 默认:snappy 可选 snappy | none | zlib storage.wiredTiger.engineConfig.directoryForIndexes 是否将索引和collections数据分别存储在dbPath单独的目录中。 即index数据保存“index”子目录,collections数据保存在“collection”子目录。 默认值为false,仅对mongod有效 storage.wiredTiger.collectionConfig.blockCompressor collection数据压缩算法,可选值“none”、“snappy”、“zlib”。 开发者在创建collection时可以指定值,以覆盖此配置项。 如果mongod中已经存在数据,修改此值不会带来问题,旧数据仍然使用原来的算法解压, 新数据文件将会采用新的解压缩算法。 默认:snappy 可选 snappy | none | zlib storage.wiredTiger.indexConfig.prefixCompression 是否对索引数据使用“前缀压缩”(prefix compression,一种算法)。 前缀压缩,对那些经过排序的值存储,有很大帮助,可以有效的减少索引数据的内存使用量。 默认值为tru
8、storage.inmemory Options
storage.inMemory.engineConfig.inMemorySizeGB - 仅企业版有效
9、operationProfiling Options
operationProfiling.slowOpThresholdMs 数据库profiler判定一个操作是“慢查询”的时间阀值,单位毫秒; mongod将会把慢查询记录到日志中,即使profiler被关闭。 当profiler开启时,慢查询记录还会被写入“system.profile”这个系统级的collection中。 请参看mongod profiler相关文档。默认值为100,此值只对mongod进程有效。 operationProfiling.mode 数据库profiler级别,操作的性能信息将会被写入日志文件中,可选值: 1)off:关闭profiling 2)slowOp:on,只包含慢操作日志 3)all:on,记录所有操作 数据库profiling会影响性能,建议只在性能调试阶段开启。此参数仅对mongod有效
10、replication Options
replication.oplogSizeMB -仅mongod有效 replication操作日志的最大尺寸,单位:MB。 mongod进程根据磁盘最大可用空间来创建oplog,比如64位系统,oplog为磁盘可用空间的5%, 一旦mongod创建了oplog文件,此后再次修改oplogSizeMB将不会生效。此值不要设置的太小, 应该足以保存24小时的操作日志,以保证secondary有充足的维护时间; 如果太小,secondary将不能通过oplog来同步数据,只能全量同步。此值仅对mongod有效。 replication.replSetName “复制集”的名称,复制集中的所有mongd实例都必须有相同的名字,sharding分布式下, 不同的sharding应该使用不同的replSetName。仅对mongod有效 replication.secondaryIndexPrefetch 只对mmapv1存储引擎有效。复制集中的secondary,从oplog中运用变更操作之前, 将会先把索引加载到内存中,默认情况下,secondaries首先将操作相关的索引加载到内存, 然后再根据oplog应用操作。可选值: 1)none:secondaries不将索引数据加载到内容 2)all:sencondaries将此操作有关的索引数据加载到内存 3)_id_only:只加载_id索引 默认值为:all,此配置仅对mongod有效。 replication.enableMajorityReadConcern 是否开启readConcern的级别为“majority”,默认为false; 只有开启此选项,才能在read操作中使用“majority”。
11、sharding Options
sharding.clusterRole 描述:在sharding集群中,此mongod实例的角色,可选值: 1、configsvr:此实例为config server,此实例默认侦听27019端口 2、shardsvr:此实例为shard(分片),侦听27018端口 sharding.archiveMovedChunks 默认:false 当chunks因为“负载平衡”而迁移到其他节点时,mongod是否将这些chunks归档, 并保存在dbPath下“moveChunk”目录下,mongod不会删除moveChunk下的文件
12、auditLog Options -仅对企业版有效
13、snmp Options 仅对mongod有效
snmp.subagent #运行SNMP为一个子代理 snmp.master #运行SNMP为一个主进程
14、Text Search Options
basisTech.rootDirectory #指定根目录里面支持的语言集,以使数据库支持更多的语言种类
15、mongos-only Options,仅对mongos有效
replication.localPingThresholdMs (本地ping阀值ms) #描述:ping时间,单位:毫秒,mongos用来判定将客户端read请求发给哪个secondary。 仅对mongos有效。默认值为15,和客户端driver中的默认值一样。 当mongos接收到客户端read请求,它将: 1、找出复制集中ping值最小的member。 2、将延迟值被此值允许的members,构建一个列表 3、从列表中随机选择一个member。 ping值是动态值,每10秒计算一次。mongos将客户端请求转发给延迟较小(与此值相比)的某个secondary节点。 仅对mongos有效。 sharding.configDB #描述:设定config server的地址列表,每个server地址之间以“,”分割, 通常sharded集群中指定1或者3个config server。 (生产环境,通常是3个config server,但1个也是可以的)。 所有的mongos实例必须配置一样,否则可能带来不必要的问题。仅对mongos有效。 sharding: configDB: <configReplSetName>/cfg1.example.net:27017, cfg2.example.net:27017,...