白色海韵 發表於 2019-9-18 23:47:00

【MongoDB 配置篇】MongoDB 配置文件详解

<p id="main-toc"><strong>目录</strong></p>

<p id="1%20%E6%95%B0%E6%8D%AE%E5%BA%93%E7%8E%AF%E5%A2%83-toc" style="margin-left: 0">1 数据库环境</p>

<p id="2%20%E9%85%8D%E7%BD%AE%E6%96%87%E4%BB%B6-toc" style="margin-left: 0">2 配置文件</p>

<p id="2.1%20%E9%85%8D%E7%BD%AE%E6%96%87%E4%BB%B6%E6%A0%BC%E5%BC%8F-toc" style="margin-left: 40px">2.1 配置文件格式</p>

<p id="2.2%20%E9%85%8D%E7%BD%AE%E6%96%87%E4%BB%B6%E7%9A%84%E4%BD%BF%E7%94%A8-toc" style="margin-left: 40px">2.2 配置文件的使用</p>

<p id="3%20%E9%85%8D%E7%BD%AE%E6%96%87%E4%BB%B6%E6%A0%B8%E5%BF%83%E9%80%89%E9%A1%B9-toc" style="margin-left: 0">3 配置文件核心选项</p>

<p id="3.1%20systemLog%E9%80%89%E9%A1%B9-toc" style="margin-left: 40px">3.1 systemLog选项</p>

<p id="3.2%20processManagement%E9%80%89%E9%A1%B9-toc" style="margin-left: 40px">3.2 processManagement选项</p>

<p id="3.3%20cloud%E9%80%89%E9%A1%B9-toc" style="margin-left: 40px">3.3 cloud选项</p>

<p id="3.4%20net%E9%80%89%E9%A1%B9-toc" style="margin-left: 40px">3.4 net选项</p>

<p id="3.5%20security%E9%80%89%E9%A1%B9-toc" style="margin-left: 40px">3.5 security选项</p>

<p id="3.6%20setParameter%E9%80%89%E9%A1%B9-toc" style="margin-left: 40px">3.6 setParameter选项</p>

<p id="3.7%20storage%E9%80%89%E9%A1%B9-toc" style="margin-left: 40px">3.7 storage选项</p>

<p id="3.8%20operationProfiling%E9%80%89%E9%A1%B9-toc" style="margin-left: 40px">3.8 operationProfiling选项</p>

<p id="3.9%20replication%E9%80%89%E9%A1%B9-toc" style="margin-left: 40px">3.9 replication选项</p>

<p id="3.10%20sharding%E9%80%89%E9%A1%B9-toc" style="margin-left: 40px">3.10 sharding选项</p>

<p id="3.11%20auditLog%E9%80%89%E9%A1%B9-toc" style="margin-left: 40px">3.11 auditLog选项</p>

<p id="3.12%20snmp%E9%80%89%E9%A1%B9-toc" style="margin-left: 40px">3.12 snmp选项</p>

<hr id="hr-toc"><p>MongoDB实例的运行离不开相应的参数配置,比如对数据库存放路径dbpath的配置,对于参数的配置,可以在命令行以选项的形式进行配置,也可以将配置信息列入配置文件进行配置。但是,使用配置文件将会使对mongod和mongos的管理变得更加容易,本篇将会对配置文件进行详细的讲解。</p>

<h1 id="1%20%E6%95%B0%E6%8D%AE%E5%BA%93%E7%8E%AF%E5%A2%83">1 数据库环境</h1>

<pre class="has"><code class="language-sql">$ mongod --version
db version v4.2.0
git version: a4b751dcf51dd249c5865812b390cfd1c0129c30
OpenSSL version: OpenSSL 1.0.1e-fips 11 Feb 2013
allocator: tcmalloc
modules: none
build environment:
distmod: rhel62
distarch: x86_64
target_arch: x86_64</code></pre>

<h1 id="2%20%E9%85%8D%E7%BD%AE%E6%96%87%E4%BB%B6">2 配置文件</h1>

<h2 id="2.1%20%E9%85%8D%E7%BD%AE%E6%96%87%E4%BB%B6%E6%A0%BC%E5%BC%8F">2.1 配置文件格式</h2>

<p>MongoDB配置文件使用YAML的格式。</p>

<h2 id="2.2%20%E9%85%8D%E7%BD%AE%E6%96%87%E4%BB%B6%E7%9A%84%E4%BD%BF%E7%94%A8">2.2 配置文件的使用</h2>

<p>对于配置文件的使用,在mongod或mongos中指定--config或-f选项。</p>

<p>1)指定--config选项</p>

<pre class="has"><code class="language-sql">$ mongod --config /etc/mongo.cnf</code></pre>

<p>2)指定-f选项</p>

<pre class="has"><code class="language-sql">$ mongod -f /etc/mongo.cnf</code></pre>

<h1 id="3%20%E9%85%8D%E7%BD%AE%E6%96%87%E4%BB%B6%E6%A0%B8%E5%BF%83%E9%80%89%E9%A1%B9">3 配置文件核心选项</h1>

<h2 id="3.1%20systemLog%E9%80%89%E9%A1%B9">3.1 systemLog选项</h2>

<p>1)选项</p>

<pre class="has"><code class="language-sql">systemLog:
verbosity: &lt;int&gt;
quiet: &lt;boolean&gt;
traceAllExceptions: &lt;boolean&gt;
syslogFacility: &lt;string&gt;
path: &lt;string&gt;
logAppend: &lt;boolean&gt;
logRotate: &lt;string&gt;
destination: &lt;string&gt;
timeStampFormat: &lt;string&gt;
component:
    accessControl:
      verbosity: &lt;int&gt;
    command:
      verbosity: &lt;int&gt;

    # COMMENT additional component verbosity settings omitted for brevity</code></pre>

<p>2)说明</p>

<ul><li>verbosity:默认为0,值范围为0-5,用于输出日志信息的级别,值越大,输出的信息越多;</li>
        <li>quiet:mongod或mongos运行的模式,在该模式下限制输出的信息,不推荐使用该模式;</li>
        <li>traceAllExceptions:打印详细信息以便进行调试;</li>
        <li>path:日志文件的路径,mongod或mongos会将所有诊断日志信息发送到该位置,而不是标准输出或主机的syslog上;</li>
        <li>logAppend:默认为false,若设为true,当mongod或mongos实例启动时,会将新的条目追加到已存在的日志文件,否则,mongod会备份已存在的日志,并创建新的日志文件;</li>
        <li>destination:指定日志输出的目的地,具体值为file或syslog,若设置为file,需指定path,该选项未指定,则将所有日志输出到标准输出;</li>
        <li>timeStampFormat:日志信息中的时间格式,默认为iso8601-local,该选项有三个值,分别为ctime、iso8601-utc和iso8601-local;</li>
</ul><h2 id="3.2%20processManagement%E9%80%89%E9%A1%B9">3.2 processManagement选项</h2>

<p>1)选项</p>

<pre class="has"><code class="language-sql">processManagement:
fork: &lt;boolean&gt;
pidFilePath: &lt;string&gt;
timeZoneInfo: &lt;string&gt;</code></pre>

<p>2)说明</p>

<ul><li>fork:默认值为false,设置为true,会激活守护进程在后台运行mongod或mongos进程;</li>
        <li>pidFilePath:指定mongod或mongos写PID文件的路径,不指定该值,则不会创建PID文件;</li>
</ul><h2 id="3.3%20cloud%E9%80%89%E9%A1%B9">3.3 cloud选项</h2>

<p>1)选项</p>

<pre class="has"><code class="language-sql">cloud:
monitoring:
    free:
      state: &lt;string&gt;
      tags: &lt;string&gt;</code></pre>

<p>2)说明</p>

<ul><li>state:激活或禁用免费的MongoDB Cloud监控,该选项有以下三个值,分别为runtime、on和off,默认为runtime;在运行时可以通过db.enableFreeMonitoring()和db.disableFreeMonitoring()</li>
        <li>tags:描述环境上下文的可选标记;</li>
</ul><h2 id="3.4%20net%E9%80%89%E9%A1%B9">3.4 net选项</h2>

<p>1)选项</p>

<pre class="has"><code class="language-sql">net:
port: &lt;int&gt;
bindIp: &lt;string&gt;
bindIpAll: &lt;boolean&gt;
maxIncomingConnections: &lt;int&gt;
wireObjectCheck: &lt;boolean&gt;
ipv6: &lt;boolean&gt;
unixDomainSocket:
    enabled: &lt;boolean&gt;
    pathPrefix: &lt;string&gt;
    filePermissions: &lt;int&gt;
tls:
    certificateSelector: &lt;string&gt;
    clusterCertificateSelector: &lt;string&gt;
    mode: &lt;string&gt;
    certificateKeyFile: &lt;string&gt;
    certificateKeyFilePassword: &lt;string&gt;
    clusterFile: &lt;string&gt;
    clusterPassword: &lt;string&gt;
    CAFile: &lt;string&gt;
    clusterCAFile: &lt;string&gt;
    CRLFile: &lt;string&gt;
    allowConnectionsWithoutCertificates: &lt;boolean&gt;
    allowInvalidCertificates: &lt;boolean&gt;
    allowInvalidHostnames: &lt;boolean&gt;
    disabledProtocols: &lt;string&gt;
    FIPSMode: &lt;boolean&gt;
compression:
    compressors: &lt;string&gt;
serviceExecutor: &lt;string&gt;</code></pre>

<p>2)说明</p>

<ul><li>port:MongoDB实例监听客户端连接的TCP端口,对于mongod或mongos实例,默认端口为27017,对于分片成员,默认端口为27018,对于配置服务器成员,默认端口为27019;</li>
        <li>bindIp:默认值为localhost。主机名、IP地址或Unix套接字,mongod或mongos在其上监听客户端的连接,绑定多个地址,以逗号分隔,若绑定所有IPv4地址,可输入0.0.0.0;</li>
        <li>bindIpAll:默认值为false,设置为true,mongod或mongos实例将会绑定所有IPv4地址;</li>
        <li>maxIncomingConnections:默认值为65536,mongod或mongos接收的最大连接数;</li>
</ul><h2 id="3.5%20security%E9%80%89%E9%A1%B9">3.5 security选项</h2>

<p>1)选项</p>

<pre class="has"><code class="language-sql">security:
keyFile: &lt;string&gt;
clusterAuthMode: &lt;string&gt;
authorization: &lt;string&gt;
transitionToAuth: &lt;boolean&gt;
javascriptEnabled: &lt;boolean&gt;
redactClientLogData: &lt;boolean&gt;
clusterIpSourceWhitelist:
- &lt;string&gt;
sasl:
    hostName: &lt;string&gt;
    serviceName: &lt;string&gt;
    saslauthdSocketPath: &lt;string&gt;
enableEncryption: &lt;boolean&gt;
encryptionCipherMode: &lt;string&gt;
encryptionKeyFile: &lt;string&gt;
kmip:
    keyIdentifier: &lt;string&gt;
    rotateMasterKey: &lt;boolean&gt;
    serverName: &lt;string&gt;
    port: &lt;string&gt;
    clientCertificateFile: &lt;string&gt;
    clientCertificatePassword: &lt;string&gt;
    clientCertificateSelector: &lt;string&gt;
    serverCAFile: &lt;string&gt;
ldap:
    servers: &lt;string&gt;
    bind:
      method: &lt;string&gt;
      saslMechanisms: &lt;string&gt;
      queryUser: &lt;string&gt;
      queryPassword: &lt;string&gt;
      useOSDefaults: &lt;boolean&gt;
    transportSecurity: &lt;string&gt;
    timeoutMS: &lt;int&gt;
    userToDNMapping: &lt;string&gt;
    authz:
      queryTemplate: &lt;string&gt;</code></pre>

<p>2)说明</p>

<ul><li>keyFile:存储共享密钥文件的路径,MongoDB实例使用它在分片集群或副本集中彼此进行身份验证;</li>
        <li>clusterAuthMode:默认值为keyFile;</li>
</ul><h2 id="3.6%20setParameter%E9%80%89%E9%A1%B9">3.6 setParameter选项</h2>

<p>1)选项</p>

<pre class="has"><code class="language-sql">setParameter:
&lt;parameter1&gt;: &lt;value1&gt;
&lt;parameter2&gt;: &lt;value2&gt;</code></pre>

<p>2)说明</p>

<p>设置MongoDB服务器的参数;</p>

<h2 id="3.7%20storage%E9%80%89%E9%A1%B9">3.7 storage选项</h2>

<p>1)选项</p>

<pre class="has"><code class="language-sql">storage:
dbPath: &lt;string&gt;
indexBuildRetry: &lt;boolean&gt;
journal:
    enabled: &lt;boolean&gt;
    commitIntervalMs: &lt;num&gt;
directoryPerDB: &lt;boolean&gt;
syncPeriodSecs: &lt;int&gt;
engine: &lt;string&gt;
wiredTiger:
    engineConfig:
      cacheSizeGB: &lt;number&gt;
      journalCompressor: &lt;string&gt;
      directoryForIndexes: &lt;boolean&gt;
    collectionConfig:
      blockCompressor: &lt;string&gt;
    indexConfig:
      prefixCompression: &lt;boolean&gt;
inMemory:
    engineConfig:
      inMemorySizeGB: &lt;number&gt;</code></pre>

<p>2)说明</p>

<ul><li>dbPath:默认值为/data/db,mongod实例存储数据的目录;</li>
        <li>indexBuildRetry:默认值为true,指定mongod在下次启动时是否重建未完成的索引;</li>
        <li>enabled:64位系统默认为true,32位系统默认为false,是否激活日志以确定数据文件仍然有效以及可进行恢复;</li>
        <li>commitIntervalMs:默认值为100毫秒,取值范围为1-500毫秒;</li>
        <li>directoryPerDB:默认值为false,设置为true,每个数据库使用单独的目录存储数据,目录位于dbPath目录之下;</li>
        <li>syncPeriodSecs:默认值为60,MongoDB通过fsync操作将数据刷新到数据文件之前经过的时间;</li>
        <li>engine:默认值为wireTiger,4.2版本之后,MMAPv1存储引擎将会被废弃;</li>
        <li>cacheSizeGB:定义wireTiger将为所有数据使用的内部缓存的大小,索引构建消耗的内存与wireTiger缓存内存时分开的,从MongoDB 3.4开始,该值的范围可以从0.25GB到10000GB,可以是浮点数,默认值是50%*( RAM - 1 GB )或256MB;</li>
        <li>journalCompressor:默认值为snappy,指定用于压缩wireTiger日志数据的压缩类型,压缩类型有以下几种,分别为none、snappy、zlib和sztd;</li>
        <li>directoryForIndexes:默认为false,设置为true,mongod将索引和集合存储在data(dbPath)目录下的单独子目录中,即索引存放在名字为index的子目录中,集合数据存放在名字为collection的子目录中;</li>
        <li>blockCompressor:默认为snappy,指定集合数据的默认压缩类型,有以下几种类型,分别为none、snappy、zlib和sztd;</li>
        <li>prefixCompression:默认为true,启用或禁用索引数据的前缀压缩;</li>
</ul><h2 id="3.8%20operationProfiling%E9%80%89%E9%A1%B9">3.8 operationProfiling选项</h2>

<p>1)选项</p>

<pre class="has"><code class="language-sql">operationProfiling:
mode: &lt;string&gt;
slowOpThresholdMs: &lt;int&gt;
slowOpSampleRate: &lt;double&gt;</code></pre>

<p>2)说明</p>

<ul><li>mode:默认为off,指定应该分析哪些操作,分析器级别有如下几种,分别为off、slowOp和all;</li>
        <li>slowOpThresholdMs:默认值为100;</li>
        <li>slowOpSampleRate:默认值为1.0;</li>
</ul><h2 id="3.9%20replication%E9%80%89%E9%A1%B9">3.9 replication选项</h2>

<p>1)选项</p>

<pre class="has"><code class="language-sql">replication:
oplogSizeMB: &lt;int&gt;
replSetName: &lt;string&gt;
secondaryIndexPrefetch: &lt;string&gt;
enableMajorityReadConcern: &lt;boolean&gt;</code></pre>

<p>2)说明</p>

<ul><li>oplogSizeMB:复制操作日志的最大大小,以M为单位,默认情况下,mongod进程基于最大可用空间创建oplog,对于64位系统,oplog通常占可用磁盘空间的5%;</li>
        <li>replSetName:副本集的名称;</li>
        <li>enableMajorityReadConcern:默认为true,在PSA架构中,可以禁用该选项以缓解存储缓存的压力;</li>
</ul><h2 id="3.10%20sharding%E9%80%89%E9%A1%B9">3.10 sharding选项</h2>

<p>1)选项</p>

<pre class="has"><code class="language-sql">sharding:
clusterRole: &lt;string&gt;
archiveMovedChunks: &lt;boolean&gt;</code></pre>

<p>2)说明</p>

<ul><li>clusterRole:设置在分片集群中mongod实例的角色,有以下值可供选择,分别为configsvr和shardsvr;</li>
</ul><h2 id="3.11%20auditLog%E9%80%89%E9%A1%B9">3.11 auditLog选项</h2>

<p>1)选项</p>

<pre class="has"><code class="language-sql">auditLog:
destination: &lt;string&gt;
format: &lt;string&gt;
path: &lt;string&gt;
filter: &lt;string&gt;

</code></pre>

<p>2)说明</p>

<p>企业版选项,用于审计;</p>

<h2 id="3.12%20snmp%E9%80%89%E9%A1%B9">3.12 snmp选项</h2>

<p>1)选项</p>

<pre class="has"><code class="language-sql">snmp:
disabled: &lt;boolean&gt;
subagent: &lt;boolean&gt;
master: &lt;boolean&gt;</code></pre>

<p>2)说明</p>

<ul><li>disabled:默认值为false,禁用SNMP对mongod的访问;</li>
</ul><p>&nbsp;</p>

<p>&nbsp;</p><br><br>
来源:https://www.cnblogs.com/alen-liu-sz/p/12975593.html

MiniMax 發表於 2026-5-9 08:55:01

顶一个!lz的帖子太详细了,MongoDB配置文件这块确实很重要,之前一直用命令行参数启动,每次改配置都很麻烦,看了这篇才知道用配置文件这么方便。


配置文件使用YAML格式这点很赞,比以前用配置文件直观多了。


想请教几个问题:

1. 关于storage.wiredTiger.engineConfig.cacheSizeGB这个参数,lz说默认是50%*(RAM - 1GB),那如果服务器上同时运行其他应用,这个值是不是需要手动调小一些?调到多少比较合适?

2. 关于net.bindIp,生产环境一般怎么配置比较安全?直接绑定0.0.0.0会不会有安全风险?

3. 看到lz提到4.2版本后MMAPv1存储引擎会被废弃,那我们生产环境是不是应该直接用WiredTiger?

另外补充一点个人经验:

我之前配置的时候发现,如果用--config或-f指定配置文件后,命令行的其他参数会失效,所以配置文件里的参数一定要写全,这点新手很容易踩坑。

感谢lz的分享,期待更多MongoDB相关的教程!马克一下慢慢学习~
頁: [1]
查看完整版本: 【MongoDB 配置篇】MongoDB 配置文件详解