开头还是介绍一下群,如果感兴趣polardb ,mongodb ,mysql ,postgresql ,redis 等有问题,有需求都可以加群群内有各大数据库行业大咖,CTO,可以解决你的问题。加群请联系 liuaustin3 ,在新加的朋友会分到2群(共720人左右 1 + 2)。
最近一段时间有点忙,对于MONGODB 的新的知识的学习懈怠了,罪过罪过,很多知识还停留在 MONGODB 4.4 之前的版本,实际上是知道MONGODB 的一些变化,所以从上礼拜就准备学习MONGODB6.0的一些新概念和知识,在安装上和配置参数上就遇到了不少的问题,所以总结写一篇和我一样MOGNODB 知识没有及时更新的同学共勉。
本次的中的一些问题也有我更换了操作系统,将操作系统更换为ubuntu 22.04 ,不在使用centos的问题,也一并写入到本篇中。
1 更换操作系统对于数据库的安装还是有一些影响的,这里更换了操作系统后,发现下载的包在配置文件正确的情况下,会报一个错误
mongod: error while loading shared libraries: libcrypto.so.10: cannot open shared object file: No such file or directory
这个问题最初我没有注意,以为是缺依赖包,还尝试用ubuntu的工具安装所谓缺少的依赖包,但是努力后,给出的错误结果是一样的。后续查询文档,发现mongodb 6.0 对于系统的包,划分的更为细致了,我必须下载对应的ubuntu 和正确的版本号的mongodb ,这在早期的4.X 是不存在这个问题的。
在下载正确的ubuntu 22.04 版本的 tgz包后,再次启动mongodb 错误消失。
后面遇到的第二个问题是,mongodb的 server ,client ,tools 的包全部分离了,和4.X 不一样了,你的分别下载,并且登陆mongodb的命令也改变了。所以必须下载三次,mongodb community edition , mongodb shell , mongodb database tools, 另外大家熟悉的mongo client 的命令也不在提供了,而是通过mongoshell来访问。
整体的使用的方式还需要习惯和持续的学习,那么回到本篇里面的关于配置参数的部分。
以下为总结mongodb 4.2 版本后,更新的参数
systemLog.timeStampFormat 这个参数是mongodb 4.4 后添加的,这个值有两个可选项 iso8601-local 和 iso8601-utc ,推出这两个值,实际上是为了分析日志所用,其中一个问题是使用本地的时间记录日志,还是用utc 的时间记录,这对分析日志的系统来说是重要的。
在systemlog 中的component.storage. 中存在大量在mongodb 5.3后添加的参数基本都与wiredTiger 引擎有关
systemLog.component.storage.wt.verbosit
systemLog.component.storage.wt.wtBackup.verbosity
systemLog.component.storage.wt.wtCheckpoint.verbosity
systemLog.component.storage.wt.wtCompact.verbosity
systemLog.component.storage.wt.wtEviction.verbosity
systemLog.component.storage.wt.wtRecovery.verbosity
systemLog.component.storage.wt.wtSalvage.verbosity
systemLog.component.storage.wt.wtTiered.verbosity
systemLog.component.storage.wt.wtTransaction.verbosity
systemLog.component.storage.wt.wtWriteLog.verbosity
从以上的日志中可以看到在版本5.3 的上面有大量关于wt引擎的部分的更多的详细日志的展示,所以必然wt在5.3的这个部分需要查看 wt 部分。
在net中中关于bindIp的配置建议在这个位置,不写入IP地址,而是写入DNS地址,如果一个主机绑定多个 IP 则可以用逗号进行分割
在mongodb 4.4 后添加了 javascriptEnabled 参数,通过此参数来控制mognodb 内部是否可以运行javascript ,在mongodb中 javascript 类似与普通数据库的存储过程的概念。
通过在mongodb 5.0 添加的参数 security.clusterIpSourceAllowlist 来进行mongodb 本身的进行集群或分片中的其他主机的认证,如果其他主机不在clusterIpSourceAllowlist 的列表里面即使申请了加入集群,也不会通过。security.clusterIpSourceWhitelist的功能被上面的参数所替代,未来不在使用security.clusterIpSourceWhitelist。
下面是 storage 存储的部分,这是配置中比较重要的一部分,这部分参数在mongodb 4.4进行了一些改变,如删除了 indexBuildRetry 和 maxCacheOverflowFileSize 。
storage.directoryPerDB 其中这个参数本身在MONGODB 5.0 有一些功能的变化,在之前如果一个 database 中删除最后一个collection ,则这个数据库的目录还是存在的,但是在5.0后,如果这样做,则这个目录也会被清理掉。
storage.oplogMinRetentionHours 基于mongodb 4.4后添加了这个参数这个参数的含义是,保证oplog在数据库中存在的时间数,如同postgresql 指定多少个文件必须保留在日志目录一样,这里mongodb是保证多少时间长度的oplog 不被清理掉,继续留存在数据库中。同时注意这个参数在高并发的情况下,请考虑是否开启,如果开启如果保留的时间和产生的日志数据之间可能会产生如下问题
1 日志直接打满原先设计的oplog size 设置的最大空间
2 在数据库的预定的oplog size 达到上限后,才会强制删除日志 (在设定的保留时间内)
3 在日志超过保留时间后,会进行日志的清理。
此选项是匹配mongodb的 replica 复制功能打开方可生效。
storage.wiredTiger.engineConfig.zstdCompressionLevel mongodb 在5.0后支持了 zstd的压缩,在启用数据的zstd 压缩后有 1-22 个等级的压缩可以进行制定
下面是一个简单的单机的POSTGRESQL 的配置文件
systemLog:
verbosity: 0
destination: file
path: "/mongodata/mongod.log"
logAppend: true
traceAllExceptions: false
logRotate: reopen
timeStampFormat: iso8601-local
component.index.verbosity: 1
storage:
dbPath: "/mongodata/data"
journal:
enabled: true
commitIntervalMs: 100
directoryPerDB: true
wiredTiger:
engineConfig:
cacheSizeGB: 2
journalCompressor: zlib
directoryForIndexes: true
zstdCompressionLevel: 10
collectionConfig:
blockCompressor: zstd
indexConfig:
prefixCompression
oplogMinRetentionHours: 12
processManagement:
fork: true
pidFilePath: "/mongodata/mongod.pid"
net:
bindIp: 192.168.198.100
port: 27027
wireObjectCheck: true
maxIncomingConnections: 100
setParameter:
enableLocalhostAuthBypass: false
security:
#keyFile:
authorization: enabled
javascriptEnabled: true
operationProfiling:
mode: slowOp
slowOpThresholdMs: 500
slowOpSampleRate: 1