Mongodb的配置

配置适用于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等操作的需求,为了安全起见,可以关闭javascriptsecurity.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,...

发表评论

电子邮件地址不会被公开。 必填项已用*标注

您可以使用这些HTML标签和属性: <a href="" title=""> <abbr title=""> <acronym title=""> <b> <blockquote cite=""> <cite> <code> <del datetime=""> <em> <i> <q cite=""> <strike> <strong>