用于MongoDB的示例YAML配置文件?


33

MongoDB的配置选项的文件列出了所有可以指定,但没有任何人有一组完全形成例如YAML格式的配置文件中各种角色的MongoDB实例的可用选项?

对于那些从头开始或希望测试最新配置文件格式的人来说,一组常见角色的示例将是一个非常有用的起点。

Answers:


47

这是Linux 的YAML配置的几个示例(Windows路径和选项略有不同),本质上是显式设置一些默认值和常用设置。

首先,mongod具有默认端口,路径,日志设置的独立服务器-这将是用于本地测试的配置类型,还有一些其他功能,因此请显示常规样式:

storage:
    dbPath: "/data/db"
    directoryPerDB: true
    journal:
        enabled: true
systemLog:
    destination: file
    path: "/data/db/mongodb.log"
    logAppend: true
    timeStampFormat: iso8601-utc
processManagement:
    fork: true
net:
    bindIp: 127.0.0.1
    port: 27017
    wireObjectCheck : false
    unixDomainSocket: 
        enabled : true

关于此配置的一些注意事项:

  • 您通常不希望对象wireObjectCheck: false在生产中被选中(),但是对于大量数据进行测试而言,这样做会加快速度,并且在这种环境下风险最小
  • 除非副本集的所有成员都位于环回IP地址上(因为这是指定的唯一绑定),否则这对复制将不起作用,因此请注意

现在,让我们看一个典型的生产副本集成员的示例配置文件,该成员已启用身份验证并作为分片群集的一部分运行:

storage:
    dbPath: "/data/db"
    directoryPerDB: true
    journal:
        enabled: true
systemLog:
    destination: file
    path: "/var/log/mongodb.log"
    logAppend: true
    timeStampFormat: iso8601-utc
replication:
    oplogSizeMB: 10240
    replSetName: "rs1"
processManagement:
    fork: true
net:
    bindIp: 192.0.2.1
    port: 27018
security:
    keyFile: "/data/key/rs1.key"
    authorization: "enabled"
sharding:
    clusterRole: "shardsvr"

有关此配置的一些说明:

  • 再次有默认值和隐式设置的显式声明(例如,clusterRole隐含了端口),通常建议这样做以避免混淆
  • IP绑定现在仅是外部IP地址,因此环回IP上的通信现在将失败,但是复制可以对远程主机起作用
  • oplog默认为可用空间的5%,因此在大容量卷中通常更保守一些,并显式设置分配的大小

接下来,是一个示例mongos配置:

sharding:
    configDB: "config1.example.net:27019,config2.example.net:27019,config3.example.net:27019"
    autoSplit: true
systemLog:
    destination: file
    path: "/var/log/mongos.log"
processManagement:
    fork: true
net:
    port: 27017
    bindIp: 192.0.2.2
    maxIncomingConnections: 5000
security:
    keyFile: "/data/key/mongos.key"
    authorization: "enabled"

这里唯一需要的更改是不适用于的删除mongos(因为它不存储数据)和configDB字符串的添加,这在所有mongos进程上都必须相同。我以最大连接数设置为例,这不是必需的,但对于较大的集群通常是个好主意。

围绕分片集群,我们有一个示例配置服务器,它实际上是副本集成员的一个子集,但有一些小的更改:

storage:
    dbPath: "/data/db"
    journal:
        enabled: true
systemLog:
    destination: file
    path: "/var/log/mongodb.log"
    logAppend: true
    timeStampFormat: iso8601-utc
processManagement:
    fork: true
net:
    bindIp: 192.0.2.3
    port: 27019
security:
    keyFile: "/data/key/config.key"
    authorization: "enabled"
sharding:
    clusterRole: "configsvr"

最后,MongoDB 3.0(在撰写本文时尚未发布)将引入几个新选项,尤其是随着新存储引擎的引入。因此,这是一个如何配置相同副本集成员的示例,但是这次使用WiredTiger存储引擎和(默认)快照压缩方法(注意:由于SERVER-16266而从原始更改,并添加了sample engineConfig):

storage:
    dbPath: "/data/db"
    engine: "wiredTiger"
    wiredTiger:
        engineConfig: 
            cacheSizeGB: 8
        collectionConfig: 
            blockCompressor: snappy        
systemLog:
    destination: file
    path: "/var/log/mongodb.log"
    logAppend: true
    timeStampFormat: iso8601-utc
replication:
    oplogSizeMB: 10240
    replSetName: "rs1"
processManagement:
    fork: true
net:
    bindIp: "192.0.2.1,127.0.0.1"
    port: 27018
security:
    keyFile: "/data/key/rs1.key"
    authorization: "enabled"
sharding:
    clusterRole: "shardsvr"

作为最后的奖励,我展示了如何使用列表(在本例中为外部IP和回送IP)绑定多个IP地址。


2
再次感谢亚当,因为它是非常有用的信息。我特别喜欢2.8存储引擎配置有一些见解。我只想添加的一件事是,当大多数人在另一个“进程管理器” Ubuntu新贵下运行时,大多数人都希望忽略“ processManagement”配置。因此,您不想在这里“分叉”,而让管理者来处理那部分配置。YAML配置的最佳示例不过是我的+1
Neil Lunn 2014年

很有用。有趣的是,是否仍会保留2.4配置文件格式,以便与2.8及更高版本向后兼容?
Andrey 2014年

不确定何时将其删除,但据我所知,它将保留在2.8中。任何的去除将提前做好被传达,当然
亚当Ç

万一有人想要setParameter示例,请参见以下答案:dba.stackexchange.com/a/87653/6441
Adam C
By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.