MongoDB自2009年推出以来,历经了近十年的发展,在这十年中,数据库领域可谓经历了翻天覆地的变化。
本书深入剖析MongoDB新旧版本的特性,结合生产案例详细讲解MongoDB的常见故障;引领学习MongoDB索引,以便更好地掌握MongoDB性能调优技巧;描述备份恢复的重要性,让读者掌握MongoDB备份恢复技巧;充分利用MongoDB的水平扩展能力,详解MongoDB复制集、分片架构环境;最后讲解如何使用PMM性能监控平台,做好线上MongoDB的监控工作。
数据库专家10年经验分享
详解MongoDB运维中的实际案例
推荐序1
找到属于你自己的那束光
张甦老师的新书出版,邀我来写几句话,下面谈谈我对数据库领域变革的一点观察和理解。MongoDB 自 2009 年推出以来,转眼已经近十年,这十年间,正是数据库领域风起云涌的 十年。在同样的时间进程中,阿里巴巴在 2008年提出去IOE 理念,推动了中国由互联网至传统行业的数据应用的深刻变革。我曾经在 2015 年的 DTCC 数据库大会上提出,我们今天已经进入了“后IOE 时代”,这个时代的典型特征就是“百花齐放”,数据库新产品的不断涌现,为我们带来了新的可能,不同场景可以有多种不同的产品和解决方案,用户因此获得了“自由”。而 MongoDB 的出现,因其面向文档,具有 Schema Free 等灵活优势,让用户在管理文档、日志,以及基于社交、物流等场景有了一个更好的选择,于是其市场经历了快速的增长,并扛起了NoSQL 的大旗,也因此在 DB-Engines 的数据库流行度排行榜中,MongoDB 荣膺2013和2014 的年度数据库。2017 年10 月,MongoDB 在纳斯达克上市,成为今天市值30 亿美元的数据库公司,这不得不说是近代数据库历史上的一个巨大成功。而相应地,另外一个更受欢迎的开源数据库MySQL,几经辗转成为Oracle 的囊中之物,原因何在?最近在做一个MongDB 的迁移,将数据库的存储引擎从 MMAPv1 更换为WiredTiger。同时回顾了一下历史, 2014 年 MongoDB 收购了 WiredTiger 公司,WiredTiger 为其开发了一个专用版本的存储引擎,今天成为MongoD 的默认存储引擎,我们不得不钦佩MongoDB 的英明之处。对比一下MySQL 的发展历程,当MySQL 的最佳存储引擎 InnoDB 被 Oracle 釜底抽薪收购(2006 年)之后,MySQL 最后被 SUN 收购(2008 年),辗转落入 Oracle 之手(2009 年),而自2009 年 MySQL 5.5 开始, InnoDB 就成为 MySQL 默认存储引擎。决定一个产品成败的是技术,而决定一家公司成败的,往往是视野。张甦老师的学习和成长,兼具技术和视野,他不断学习研究和砥砺,使自己获得了深厚的技术体验,而选择MySQL 和MongoDB 入行,更可见他对于开源的信心。他此前出版的《MySQL王者晋级之路》,深受读者欢迎,而MongoDB 更是指引他向前的“一束光”。现在这束光放射开来,希望能够让更多读者见证MongoDB 的光彩和未来。我也祝福走在技术道路上的每一位朋友,能早日找到指引自己的那束光!
盖国强,云和恩墨创始人,Oracle ACE 总监
推荐序2
近两年,随着互联网的迅猛发展,Oracle 之外的各种开源数据库迅速崛起,数据库领域呈现出了百花齐放、百家争鸣的局面。MongoDB 就是其中最为夺目的一朵开源之花。在DB-Engines公布的2018 年2 月的数据库排名中,MongoDB 成为榜单中涨幅最大的一个,上涨了5.47 个百分点,位列榜单第5 名。MongoDB 是可以应用于各种规模的企业、各个行业及各类应用程序的开源数据库。MongoDB 能够使企业的数据库更具敏捷性和可扩展性,各种规模的企业都可以通过使用MongoDB 来创建新的应用。该公司是NoSQL 数据库技术领域的知名公司。MongoDB 采用分布式基础架构,并且深受移动应用和Web 应用开发者的欢迎。此外,MongoDB 还是一个基于文件的数据库。在MongoDB 中,数据被编码成能够兼容多种不同数据格式的文件。MongoDB的流行程度是显而易见的,目前其应用在全球范围内的下载次数已经突破了1000 万次。简单来说,使用MongoDB 能够提高与客户之间的工作效率,缩短产品上线时间,以及降低企业成本。MongoDB 是一个基于分布式文件存储的数据库,旨在为企业提供可扩展的高性能数据存储解决方案。其数据库特点是高性能、易部署、易使用、储存方便。首先,它支持的数据结构非常松散,是与JSON 相类似的BSON 文档格式,因此可以存储比较复杂的数据类型,且该格式文档比较易读、高效。其次,MongoDB支持的查询语言非常强大,其语法有点类似于面向对象的查询语言,几乎可以实现类似关系数据库单表查询的绝大部分功能,包括传统数据库的功能如二级索引、完整的查询系统等,而且还支持对数据建立索引。此外,MongoDB 的数据可实现复制和故障恢复,还具有在云端的伸缩性,支持水平的数据库集群延伸。本书作者张甦先生在开源数据库领域深耕细作多年,技术功底扎实,实战经验丰富,对MongoDB、MySQL 等数据库都有深入的研究,在各大开源数据库技术论坛、网站上颇有名气。更为难得的是,张甦先生拥有丰富的数据库培训经验,擅长深入浅出地讲解技术问题,能够用简单明了的语言阐述复杂疑难的技术故障。在数据库领域从业多年,我见过很多技术牛人,但是很多人仅限于自己牛却不擅长将技术分享给更多的人,他们的价值总是有限的,而且是局限于自身的,只有像张甦先生这样能做技术、能讲技术,还能写技术的人才能将技术的价值无限放大,让更多的人受益。本书是两位作者多年工作和研究经验的总结,语言简单明了,实战案例丰富。本书对工作中常见的各种故障给出了作者的分析和解决方案,具有非常高的实用价值,无论是刚开始学习MongoDB 的小白,还是有一定工作经验的老DBA,都可以从中受益。张甦先生是一位专业的DBA,也是一位勤奋的写作者,他的上一本书《MySQL 王者晋级之路》才出版不久,我又收到了《MongoDB 运维实战》这本书的手稿,在繁忙的工作之余,还有这样的勤奋和毅力,真是令人钦佩!希望张甦先生能够写出更多更优秀的技术书籍,帮助更多即将走上DBA 之路的伙伴。
侯圣文,Oracle ACE 总监、教育专家,恩墨学院院长
前言:
随着大数据时代的到来及技术的不断发展,以及互联网Web 2.0的兴起,传统的关系型数据库在应付超大规模和高并发的SNS类型的Web 2.0纯动态网站时已经显得力不从心了,暴露了很多难以解决的问题,而非关系型数据库则由于其本身的特点得到了非常迅速的发展。NoSQL领域首屈一指的就是“芒果”数据库,即大名鼎鼎的MongoDB。我是从第一个GA版本开始接触MongoDB的,它在我最孤独、最寂寞的时候,陪伴着我一路成长。倘若我一直在黑暗中行走,那么MongoDB就是那一束光,指引着我未来前进的方向。
写此书的目的
我把MySQL和MongoDB当作自己的两个“孩子”一样看待,一直想把多年运维数据库的经验分享出来,前不久已经出版了一本MySQL的著作《MySQL王者晋级之路》,收到的读者反馈都不错,读者说书很实用,看完之后收获很大。其实写书的真正目的就是为了让大家可以系统地进行学习,少走一些作者在工作中走过的弯路。我的一些学生和朋友经常和我抱怨:“我们公司有一个项目准备用MongoDB,但还得从头学习,网上针对MongoDB的资料也不多,关键还不知道从何学起,MongoDB实战的书籍也偏少”。这类问题不止一个人和我说过。正因为有了这样的需求,我们才有了想投入全部精力、认真地去写一本有关MongoDB实战方面图书的冲动。希望《MongoDB运维实战》能够真正地帮助大家解决在学习MongoDB数据库过程中的诸多疑惑,敲开大数据运维的门。
如何阅读本书
第1、2章主要介绍MongoDB 3.4和MongoDB 3.6这两个版本的新特性,以复制集架构和分片架构作为整体切入点。MongoDB版本更新到3.X之后发生了巨变,进入了一个新的时代。在引入wiredtiger存储引擎之后,实现了文档级别的锁,提高了并发性。该引擎支持压缩,节约了存储成本,具有更简单高效的高可用架构,维护起来更加轻松。这让我们对MongoDB 4.X时代更加期待。
第3章是本书中一道亮丽的风景线,是MongoDB的实战案例分析部分。详细介绍oplog大小引发的从库宕机、副本集延迟突然增大到上万秒、最大连接数限制等问题的处理过程和思路。
第4章是MongoDB的性能调优部分。从索引角度出发,通过各类索引的使用,包括配合执行计划的查看来梳理性能问题。
第5章介绍MongoDB备份与恢复,主要以逻辑备份和物理备份两种方式来进行讲解,其中会演练oplog replay的过程。
第6章是高可用架构集群管理。核心的两个部分就是复制集和分片架构,包括副本集、分片架构原理、成员类型、实战安装部署过程,以及多种实现方式和管理维护架构中遇到的诸多问题,最后还会介绍升级MongoDB架构版本的注意事项。
第7章介绍MongoDB的监控。主要介绍PMM,它是一款能够监控MySQL、MongoDB性能的开源平台。本章会讲解server组件和client组件及其安装过程。
第8章是MongoDB的常用命令。本章列举一些我们在MongoDB的运维过程中常用的命令,帮助刚接触NoSQL领域的读者快速上手生产环境中MongoDB的运维工作,为自己的公司和老板排忧解难。
致谢
在《MySQL王者晋级之路》中已经说了太多感谢的话。这次先要感谢我的好兄弟贺磊,我们一拍即合,经历了多个日夜,坚持了一年的时间完成了这本MongoDB的图书。其次,还是要感谢电子工业出版社编辑陈晓猛先生的耐心指导与对我的支持。
这是我出版的第二本数据库相关的书籍了。第一本是关系型数据库方向的图书,本书是NoSQL方向的,未来计划出版一本人工智能方向的图书。道行尚浅,还需努力,希望广大读者多提宝贵意见。更希望大家可以花些时间,认真品味MongoDB给运维带来的简单快乐。
张甦