如今MongoDB已经发布了7.0版本,对于还在使用MongoDB低版本的用户来说,是否有必要升级?
为了促进MongoDB开源社区的发展,我们不断发布新版本,为用户提供更多优势特性,例如更快的性能、更好的安全性、更多的功能等。同时,MongoDB开源社区也陆续停止对低版本MongoDB的支持和维护,例如MongoDB 4.4版本已于2024年2月正式EOL,更多信息可以查看官网的Lifecycle Schedules。
如果你使用的是阿里云版数据库 MongoDB 版,则可以获得相对更加持久的支持和维护。
查看阿里云数据库MongoDB的生命周期策略:https://help.aliyun.com/zh/mongodb/product-overview/mongodb-product-lifecycle-policies?spm=a2c4g.11186623.0.i92
如今MongoDB已经发布了7.0版本,那么对于还在使用MongoDB低版本的用户来说,是否有必要升级?本文将帮助您更清晰地了解这个问题。
旧版本存在的风险和隐患
MongoDB和阿里云自2019年起保持着紧密的战略合作关系,双方携手为中国乃至全球用户提供卓越的数据库服务,以下风险和隐患是阿里云数据库 MongoDB 版团队根据长期的云数据库运维经验整理得出。
分片实例的孤立文档导致在实例间数据迁移时校验不一致
● 受影响的版本及架构:4.2及以下版本的分片集群实例。
● 简要描述:在分片集群实例中,若未及时清理孤立文档,可能会导致在迁移数据时出现数据不一致的问题。
● 推荐版本:4.4及以上版本。
● 推荐理由:当一个Chunk成功迁移到新的分片后,源分片中的该Chunk会延期删除。孤立文档通常是因为迁移过程中断而产生的。孤立文档并不会影响mongos节点上的正常业务请求,因为请求会经过配置服务器(ConfigServer)的路由数据检查。
从4.4版本开始,MongoDB实现了能够自恢复的Chunk迁移和孤立文档清理。就算节点出现异常,MongoDB也会自动恢复之前中断的迁移过程。用户不再需要主动执行命令来清理孤立文档,也可以通过执行该命令来确认后台线程是否已经成功清理。
compact阻塞业务读写
● 受影响的版本及架构:4.2及以下版本实例。
● 简要描述:需要回收磁盘碎片的场景下,低版本实例执行compact命令会阻塞业务读写,而且compact操作不能被中断,只能重启,从而对业务造成影响。
● 推荐版本:4.4及以上版本。
● 推荐理由:从4.4版本开始,优化了compact的加锁行为,不再会阻塞业务正常的读写(CURD)操作,只会阻塞一些DDL操作(例如等)。业务侧不再需要等到维护窗口期再来执行compact命令。
更多信息请参考回收磁盘碎片以提升磁盘利用率和compact Blocking。
如果你需要回收磁盘碎片,阿里云数据库 MongoDB版提供了空间分析功能。
compact导致节点进入RECOVERING异常状态
● 受影响的版本及架构:4.2及以下版本实例(小版本低于4.2.18版本)。
● 简要描述:需要回收磁盘碎片的场景下,低版本实例执行compact命令会导致节点临时进入RECOVERING状态,如果持续时间过长,该节点会被阿里云MongoDB侧实例探活组件认定为节点不健康从而触发相应的重搭操作。
● 推荐版本:4.4及以上版本。
● 推荐理由:从4.2.18版本开始,在mongod节点上执行compact命令将不再导致节点进入异常的RECOVERING状态,从而避免了节点不可用和上述非预期的重搭任务流问题。
更多信息请参考回收磁盘碎片以提升磁盘利用率和compact RECOVERING。
如果你需要回收磁盘碎片,阿里云数据库 MongoDB 版提供了空间分析功能。
hidden节点物理备份带来的空间膨胀问题
● 受影响的版本及架构:4.2及以下版本的本地盘版实例。
● 简要描述:受限于物理备份的机制,备份上传期间磁盘文件大小依然在增长,长期积累会导致hidden节点磁盘空间膨胀。当发生节点故障或切换节点时,可能会触发磁盘使用率的误告警。
● 推荐版本:5.0及以上版本的云盘版实例。
● 推荐理由:云盘版架构实例的全量备份是基于物理备份结合云盘快照的方式。从原理上缩短了需要在WiredTiger引擎侧维持备份检查点(Backup checkpoint)的时间,有效解决了hidden节点因备份而导致空间膨胀的问题。
此外,云盘版的快照备份以及基于快照备份的恢复具备更好的性能。当副本集实例的数据规模达到2 TB以上时,本地盘版实例的物理备份耗时久、失败率高、期间无法执行其他运维操作等问题也能得到解决。
分片实例重建同名库表时遇到残留路由数据的问题
● 受影响的版本及架构:4.4及以下版本的分片集群实例。
● 简要描述:分片集群实例上执行命令后又重建同名库表时,由于ConfigServer节点上路由数据有残留,导致实例无法完整正常读写操作。
● 推荐版本:5.0及以上版本。
● 推荐理由:从5.0版本开始,MongoDB优化了命令对于路由数据的处理,不再会导致路由数据的残留。在4.2及以下版本中,不仅需用户重复执行命令,还需要额外在所有mongos上通过命令刷新路由信息,否则就会有残留数据导致问题。
更多信息请参考dropDatabase和flushRouterConfig。
Balancer均衡速度慢
横向扩缩容性能差
业务高峰期无法横向扩展
● 受影响的版本及架构:5.0以下版本实例。
● 简要描述:Balancer迁移速度无法提升,导致需要横向扩展的场景无法快速均衡数据,热点无法快速缓解,影响业务。
● 推荐版本:5.0及以上版本。
● 推荐理由:从5.0版本开始,MongoDB新增了和两个可调整参数,用于调整Balancer的迁移并发度和性能。
更多信息请参考chunkMigrationConcurrency和balancerMigrationsThrottlingMs。
如果你使用的数据库实例已经是5.0版本却不支持这两个参数,可以通过升级数据库小版本解决该问题。
分片实例数据不均衡而导致的负载不均
● 受影响的版本及架构:5.0及以下版本实例(小版本低于6.0.3版本)。
● 简要描述:Balancer按照分片间的Chunks数量来判断是否均衡,在存在Jumbo Chunk、Empty Chunks、热点数据的情况下会导致分片间的数据分布不均以及相应的负载不均问题。
● 推荐版本:6.0及以上版本。
● 推荐理由:从6.0.3版本开始,Balancer会根据分片间数据量的差异均衡数据,而不是根据分片间Chunks数量的差异来均衡数据。从而有效解决了之前版本因为Jumbo Chunk、Empty Chunk等原因而导致数据、负载不均匀的问题。
更多信息请参考MongoDB 6.0.3版本Balancer改动。
其他内核相关缺陷请参考:
https://jira.mongodb.org/projects/SERVER/issues/SERVER-52164?filter=allopenissues
新版本的新特性及优化
MongoDB致力帮助开发人员简化操作、提高开发效率和增强安全性,不断丰富产品功能,提升产品性能。以下我们梳理了MongoDB 5.0、6.0和7.0版本的新特性及优化:
MongoDB 5.0
● 时序集合:从5.0版本开始,MongoDB可以更好地处理时序数据,适配车联网、物联网等广泛场景。
● 查询长时间运行快照:从5.0版本开始,MongoDB提供了读取历史快照的能力。阿里云MongoDB基于此能力扩展了按Key闪回的高效恢复手段,该能力正在免费公测,欢迎试用体验。
● 版本化API:从5.0版本开始,MongoDB正式提供了版本化API的能力,通过将应用程序生命周期和数据库生命周期解耦,提供了完备的兼容性保证。用户无需担心升级数据库版本而带来的兼容性风险了。
MongoDB 6.0
● changeStream若干优化:从6.0版本开始,ChangeStream包含了诸多优化,包括支持查看变更前的视图;提升执行效率和资源利用率;支持过滤孤立文档更新;支持更多DDL的变更事件等。使得MongoDB对CDC场景的支持更加完善。
● join查询优化:从6.0版本开始,MongoDB分片实例也开始支持和算子来进行Join查询,并且提升了相关算子的性能。
● 分片实例支持自动整理分片集合的磁盘碎片空间:从6.0版本开始,MongoDB分片实例支持通过命令为不同的分片集合设置不同的chunkSize并支持自动碎片整理。大幅简化了之前需要通过compact命令来整理磁盘碎片空间的运维动作。
● 时序集合若干优化:从6.0开始,时序集合包含了诸多优化,包括支持 分片;支持柱状压缩来改善存储空间占用;引入了二级和复合索引,改善读性能;引入针对时空数据的地理位置索引;时序数据排序优化等。使得时序集合能够应用在更多时序场景中并且性能得到了很大提升。
● compact性能大幅提升:阿里云MongoDB在6.0版本的基础上,在WT引擎层对compact命令进行了全方位优化,大幅提升了compact的性能,同时也降低了compact执行期间受eviction压力而失败的概率。
MongoDB 7.0
● 分片键分析:从7.0版本开始,支持基于采样查询(Sampled queries)的结果来分析集合的分片键是否合理,可以帮助您更好地设计Schema以及分片键、更合理使用分片架构。
● 可查询加密(Queryable Encryption):从7.0版本开始,可查询加密使得敏感数据在其整个生命周期中(传输中、静止中、使用中、日志中和备份中)都是加密的,并且只在客户端解密。提供了更强大且全面的数据安全保障,有效避免被“拖库”的数据泄露风险。
● 元数据一致性检查:从7.0版本开始,在数据库维护期或者异常(OOM或故障切换等)结束后能够主动发现潜在的元数据/索引不一致风险。
● ChangeStream支持超大变更事件:从7.0版本开始,新增了算子支持对超过16 MB的超大变更事件(change events)进行切分,解决了之前版本中changeStream无法支持超大变更事件的问题。
● wt引擎动态限流:从7.0版本开始,MongoDB会自动动态调整WT存储引擎的事务并发度(之前默认是128)来实现限流的效果。缓解了之前版本中数据库异常后因请求堆积而导致雪崩的问题。
复制链接到浏览器打开,查看更多MongoDB 5.0、6.0、7.0版本新特性介绍:
如何轻松升级数据库版本
在升级数据库版本时,通常需要经过环境评估、测试、制定回滚计划并确定升级步骤,可以参考数据库升级版本的帮助文档:
复制链接到浏览器打开,查看数据库升级版本帮助文档:
https://help.aliyun.com/zh/mongodb/user-guide/upgrading-database-version
如果你在 MongoDB 升级时需要协助,阿里云的专家还将为您提供升级规划建议,识别和缓解升级时可能出现的障碍、不兼容问题和潜在的性能问题。
同类文章推荐:
《阿里云:为什么要升级到MongoDB的新版本》
《mongodb 4 有必要升级高版本吗》
https://blog.51cto.com/u_16213441/9777273
《如何规划 MongoDB 升级》
https://zhuanlan.zhihu.com/p/680650057
《7 Big Reasons to Upgrade to MongoDB 6.0》
https://www.mongodb.com/blog/post/big-reasons-upgrade-mongodb-6-0