MongoDB 的示例 YAML 配置文件?

Ada*_*m C 33 mongodb

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

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

Ada*_*m C 48

这里有几个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
Run Code Online (Sandbox Code Playgroud)

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

  • 您通常不希望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"
Run Code Online (Sandbox Code Playgroud)

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

  • 再次有默认和隐含设置的显式声明(例如,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"
Run Code Online (Sandbox Code Playgroud)

此处唯一需要的更改是不适用于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"
Run Code Online (Sandbox Code Playgroud)

最后,MongoDB 3.0(在撰写本文时尚未发布)将引入几个新选项,尤其是引入了新的存储引擎。因此,这里是如何配置相同副本集成员的示例,但这次使用 WiredTiger 存储引擎和(默认)snappy 压缩方法(注意:由于SERVER-16266而从原始更改,并添加了示例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"
Run Code Online (Sandbox Code Playgroud)

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

  • 再次感谢 Adam,因为这是非常有用的信息。我特别喜欢对 2.8 存储引擎配置有一些见解。我只想补充的一件事是“processManagement”配置是大多数人在另一个“进程管理器”Ubuntu 新贵下运行时想要省略的配置,这是一个常见的配置。所以你不想在那里“分叉”并将它留给经理来处理那部分配置。那里是 YAML 配置的最佳示例,所以我的 +1 (2认同)