MONGODB 不少企业都在用,版本大多几种在3.2 3.6 4.0 , 今天在安装MONGODB 5.0 的时候,突发想把MONGODB 4.4 - 5.0 配置文件的变化捋一捋。凡是从4.4改变的配置信息会加粗加深
systemLog 中在4.4 -- 5.0 变化不大
verbosity是描述日志记录的详细度,如果不做设置,默认为0如果想得到更多debug的信息可以通过将值调整 1 -5 进行。同时可以通过配置中的component来对感兴趣的模块的日志信息进行详细记录,而不用在总的详细度中进行设置,尽量减少不必要的日志,MONGODB的日志如果详细度调整的过高,磁盘空间会快速的被占用,一秒出现10几条日志不是玩笑。
quiet 可以在测试的环境中使用,尤其是一些没有人管理的MONGODB的测试环境,日志可以最小化。
traceALLEXceptions 是为获得更多的信息,为官方获得更多debug日志来追踪问题,如果不是碰到特殊的问题,不建议打开。
logRotate 则对日志在服务重启后的处理方式,是打开原来的继续,还是开一个新的,我们一般都选择rename的方式,获得新的日志。
在timeStampFormat 中在MONGODB4.4 包含了ctime的方式,在MONGODB 4.4 被取消了,值支持iso8601-utc iso8601-local
systemLog: verbosity: 0 quiet: false traceAllExceptions: false syslogFacility: user path: /mongodata/error logAppend: false logRotate: rename destination: file timeStampFormat: iso8601-local
component: accessControl: verbosity: <int> command: verbosity: <int>
component 中可以选择的信息包含 accessControl, command, control ,ftdc, geo, index , network , query, replication, 等,可以对觉得容易出现问题的模块进行更细致的日志记录。而这些细致的调节的功能是从 MONGODB 4.2开始加入的,并且这些选项中的信息下面有更多的信息可以被选择,如 replicaiton.election, replication.rollback ,replication.initialSync . 详细的信息,mongodb doc configuration file 中都有详细的介绍。
processManagement: fork: true pidFilePath: /mongodata/pid
processManagement 中的fork 是针对启动的mongodb的工作进程是在使用什么样的工作模式,一般选择 true 来将mongodb的启动进程在后台运行。
net: port: <int> bindIp: <string> bindIpAll: <boolean> maxIncomingConnections: <int> wireObjectCheck: <boolean> ipv6: <boolean> unixDomainSocket: enabled: <boolean> pathPrefix: <string> filePermissions: <int> tls: certificateSelector: <string> clusterCertificateSelector: <string> mode: <string> certificateKeyFile: <string> certificateKeyFilePassword: <string> clusterFile: <string> clusterPassword: <string> CAFile: <string> clusterCAFile: <string> CRLFile: <string> allowConnectionsWithoutCertificates: <boolean> allowInvalidCertificates: <boolean> allowInvalidHostnames: <boolean> disabledProtocols: <string> FIPSMode: <boolean> logVersions: <string> compression: compressors: <string>
net: port: 27027 bindIp: 192.168.198.50 bindIpAll: false maxIncomingConnections: 1000 wireObjectCheck: true unixDomainSocket: enabled: true pathPrefix: /tmp filePermissions: 0700 compression: compressors: zlib
net 主要是设置MONGODB 对方访问接口与安全的部分
port 是设置MONGODB 对外的接口 默认 27017 27018 27019 是mongodb的端口(包含sharding 部分设置), 所以在设置是可以避免这些端口的设置避免一些简单的探测和侵入。
bindIp 可以设置多个IP 通过数组的方式和逗号分隔,bindIpAll 和 bingIp是二选一,如果将bindIpAll 设置为true 说明所有的连接都可以连接到MONGODB 中。
maxIncomingConnections mongodb也需要设置连接中最大支持的连接数,设置这个值需要和应用谈好,设置的值应比连接池的总数要高,需要预留给管理者, 默认的值为 65536
compression.compressors 中的配置如果是4.0以下包含4.0 以下版本的MONGODB 网络通信压缩使用应该是 snappy 如果是4.2 以上的版本可以选择 zstd ,zlib 等压缩方式,另如果两方设置的压缩方式不一致,则数据传输不压缩。
security: keyFile: /mongodb/keyfile/security clusterAuthMode: keyFile authorization: enabled
一般安全针对复制集,其中需要各个复制集都有通过秘钥文件建立安全的关系并且需要通过用户密码的方式进行登录
Storage 是配置中关于存储和存储引擎配置的地方
dbPatch配置数据库存储的路径,journal 日志也是MONGODB保证在主机crash时信息不丢失的一个保证,enabled 必须打开,commitIntervalMs默认值100 , 调整值在1-500ms ,值越大越有利于磁盘性能,值越小越有利于数据库crash后的数据丢失损失最小化。
directoryPerDB 控制每个MONGODB中的数据库在LINUX文件系统中的存储是否通过文件夹进行分化存储,否则就会用单个文件存储,这里默认为单个文件,如果后面想反悔,通过分割文件夹的方式来存储,就必须导出数据,修改配置,在导入数据,此时建议还是使用true
storage: dbPath: /mongodata/data journal: enabled: true commitIntervalMs: 200 directoryPerDB: true wiredTiger: engineConfig: cacheSizeGB: 2G journalCompressor: zlib directoryForIndexes: true collectionConfig: blockCompressor: zlib indexConfig: prefixCompression: true oplogMinRetentionHours: 1.5
另有一些配置不建议设置如 storage.syncPeriodSecs 保持默认值即可。
从MONGODB 4.2后 storage.engine 不能在使用 MMAPV1的数据库引擎,wirtedTiger是MONGODB默认的引擎。
从MONGODB 4.4 后添加了storage.oplogMinRetentionHours参数,这个参数对于oplog保留的时间做了设置,举例如设置为1.5 则意味此时产生的OPLOG 将保留1.5小时。注意这里是最小保留时间。另配置可以在MONGODB 工作中进行动态的设置,通过replSetResizeOplog.
cacheSizeGB的设置为所在主机内存的50%左右,通常这个主机上只工作MONGODB一个INSTANCE 如果工作多个,则需要另做打算。基于MONGODB 原理,建议不要对MONGODB的内存太吝啬。这里MONGODB 与 POSTGRESQL 在内存的管理和使用上有雷同点,就是都是自己的CACHE LINUX 文件系统的cache的使用方式。
directoryForIndexes 默认是false,这里选择true 目的为将数据和索引分开存储
maxCacheOverflowFileSizeGB: <number> 设置在MONGODB4.4取消,即使设置也无效。这个设置只在4.0 (4.012)4.2(4.2.1)版本上有效。
operationProfiling: mode: slowOp slowOpThresholdMs: 100 slowOpSampleRate: 1.0 filter: '{ op: "query", millis: { $gt: 2000 } }'
operationProfiling 是针对Mongodb慢查询或操作过滤设置的, slowOpThresholdMs 和 slowOpSampleRate 两个选项和 filter 选项是互斥的,如果设置了filter 则上面的两个选项则失效。
replication: oplogSizeMB: 5000 replSetName: repl enableMajorityReadConcern: true
Replication 中的 enableMajorityReadConcern 在5.0做出了改变,默认为TRUE ,这点十分重要,如果你在5.0还继续使用PSA模式,也就是primary secondary arbiter 的方式就如果其中的secondary Down机会引起性能问题,具体参考https://docs.mongodb.com/manual/reference/configuration-options/#mongodb-setting-replication.enableMajorityReadConcern
大致在总结从4.4后改变的配置
1 systemLog.timeStampFormat
2 net.tls.clusterCertificateSelector
3 net.tls.clusterFile
4 net.tls.CRLFile
5 net.ssl.CRLFile
6 security.javascriptEnabled
7 storage.indexBuildRetry (取消)
8 storage.oplogMinRetentionHours
9 maxCacheOverflowFileSizeGB (取消)
10 operationProfiling.filter
11 replication.enableMajorityReadConcern 5.0
12 storage.wiredTiger.engineConfig.zstdCompressionLevel 5.0
通过大致的分析和统计,4.4变化至少10项,5.0版本中replication的选项要注意使用的复制集的方式,一主两从应该是主流。
以下配置可以在MONGODB 5.05工作