首页 存档 技术 查看内容

《MySQL运维内参》前言 | 周彦伟

2018-3-30 13:00 |来自: 互联网 403 0

摘要: 十年前,我有幸加入了陈华、吴世春创办的酷讯网,开启了我的互联网职业生涯,同时也让我开始接触到开源世界的件件瑰宝,尤其是MySQL。终于,两年后,我正式成为了一名MySQL DBA。这要感谢当时如日中天的、被誉为中国 ...

十年前,我有幸加入了陈华、吴世春创办的酷讯网,开启了我的互联网职业生涯,同时也让我开始接触到开源世界的件件瑰宝,尤其是MySQL。终于,两年后,我正式成为了一名MySQL DBA。这要感谢当时如日中天的、被誉为中国Facebook的校内网和我的良师益友刘启荣先生,让我有机会和空间,在MySQL的世界里自由翱翔并得其所哉。


校内网DBA团队


从事MySQL DBA工作是我一直以来引以为豪的事情。我一向认为DBA是个与众不同的职业,如果要把人分两类的话,那么有一种分法就是,一类是DBA,另一类是非DBA。

DBA是什么?

  • 有点像SA,但在业务层面上比SA事儿多,主要是牵扯的人多,嬉笑怒骂,皆成文章。

  • 有点像DEV,但总是会有冲突,多数情况下发生在双方对数据库使用的看法和优化上。我们只好自己开发个Inception给DEV用。

  • 有点像PM,设计库,优化表,处处都是艺术。

  • 有点像CTO,恩,你以为我说的是首席建表官? DBA是操着鸡毛蒜皮的心啊。

  • 有点像出租司机,改个表,我一向不待见那种不等改完甩手就走的,等待是一种美德,善始善终方显英雄本色。

  • 有点像救火队员,网站挂了,可能跟DB没关系,但DBA一定要出现;DB挂了,一定跟网站有关系,DBA一定也要出现。

  • 有点像银行点钞员,数据就是钱啊,只是都不是自己的,但职业道德最为重要。

  • 有点像养孩子,当爹又当妈,哪个实例伺候不好,都会出乱子。

DBA是服务型职业,服务好了,没你啥事儿;服务不好,事儿就大了。

DBA承载着一个重要的角色,有着特殊的职责和使命,一个优秀的DBA其实是非常难得的。DBA应该具备怎样的能力呢?我曾经提出过“DBA精神”:责任心、服务心、沟通心、学习心、进取心和分享心。

DBA精神是责任心的体现

维护数据库数据的安全和完整是管理员的首要责任。在管理数据库的过程中,作为一个DBA,要把数据库看做自己的财产、自己的儿女、自己身体的一部分。此种职责,需要你像呵护自己眼睛一样去照顾你所维护的数据库。时刻去想,有没有做应该有的备份,有没加应该有的监控,有没有做必须的安全权限限制。一旦出问题,有没有第一时间去分析和解决问题,这就像你的自己的眼睛,一旦出现红肿病态,多少人会视而不见?

DBA精神是服务心的体现

现代互联网对DB的需求,是需要支撑业务持续稳定的运行和源源不断的变更,这要求DBA有7X24小时的服务精神。这是一个服务性职业,需要随时随地响应来自各方面的各种需求。其一,人的需求,业务要发展,DB就会有变更,只有DBA与开发人员紧密配合,才能顺畅高效地完成工作。其二,事的需求,DB是个动态的系统,不断的运转就会不断的面临新问题,机器故障,磁盘报警,内存不足,CPU过载等等。这是个脆弱的系统,它不会对DBA的迟钝有半点仁慈,一旦有问题,任性的宕机是必然的结果。其三,心的需求,DBA应该出自内心地主动去对DB做不断的优化,这种优化,可以在结构上,可以在架构上,可以在业务逻辑上,关键之处在于,你有没有心。说得通俗一点:“没事找事儿”。

DBA精神是沟通心的体现

DBA的工作,不是封闭的科学研究和孤傲的英雄主义,不管是主动的优化,还是被动的接受任务,都是需要与人做不断的沟通与交流。假如你不懂业务流程,不知道数据的来龙去脉,轻重缓急,那就谈不上数据库表的设计和优化。而数据库的优化,往往最大的进展是来自对业务逻辑的优化。这需要运用良好的沟通心态和技巧,深入了解业务流程和架构。与人沟通,是DBA获取知识和信息的主要途径,需要做到能与人沟通和会与人沟通。生活工作中,人的个性是千差万别的,面对形形色色的沟通对象,充分调动对方的积极性,进行愉快有效的交流也是DBA需要掌握的一门技术。

DBA精神是学习心的体现

DB在技术体系中是一个承上启下的中间环节,它运行在物理硬件和操作系统之上,同时承载着上层各种各样的业务逻辑的调用。对DB的运维和管理,不仅仅需要掌握数据库自身的基础知识,要保证这个系统的稳定和优化,就需要知己知彼,去了解它上下游的知识和特性。所以,一个优秀的DBA,需要了解你所使用的硬件,这包括磁盘的特性,网络的布局,内存的使用,CPU的处理能力等等;需要了解DB所运行的操作系统的知识,它是怎么调度IO的,怎么管理内存的,怎么优化文件的;需要了解上层业务是怎么调用数据库的,SQL怎么写的,看懂了业务逻辑的程序才能明白有的SQL是不是多余,某些SQL是不是可以优化。我们看到在MySQL官方和MariaDB官方,都已经针对硬件开始在官方源码的基础上做自动优化了,同时MySQL官方也提供了自己的集成于业务端的高可用方案,这都是开源数据库进步发展的必然结果。同时,由于开源数据库的盛行,针对数据库自身代码的学习和研究,也逐渐成为优秀DBA的必修课了。

DBA精神是进取心的体现

随时发现问题,分析问题,解决问题。通过问题现象,依赖自己的经验和知识,同时探索未知的知识去解决现实的问题,在这个过程中,也是自己积累经验和不断成长的过程。相对而言,解决问题本身并不重要,重要的是在此过程中探求解决问题的方法和所获取的经验,DBA的职业优势也在于此,同时,主动花费心思与精力去不断追求问题的优解和技术的极致,也是DBA应尽的职责。

DBA精神是分享心的体现

这些年,我们一直在倡导做一件事情,那就是提倡DBA在开源社区持续做技术分享。我们做了ACMUG,全称是 China MySQL User Group。A你可以认为是All,或者About,或者是Active,它代表了所有关心MySQL及其相关技术的积极参与分享活动的人。在过去的数年里,ACMUG已经组织了上百场技术分享,分享者都是工作在一线的DBA或者数据库技术爱好者,通过参与这个活动,大家都切切实实的得到收益,个人在技术上也取得了巨大的进步。通过分享,大家学到了技术、开拓了视野、展开了思路,当然也交到了朋友。我们希望能通过这样的活动,把DBA精神永续下去,让更多人受益,让更多技术普及。

本书的写作,正是出于分享的目的。我们依靠开源软件和技术实现了自己的职业理想和人生价值。饮水思源,投桃报李,我们愿意把自己在工作中的点滴积累分享出来,以期能帮助到更多的人。

写书,其实并不是那么轻松。在我周围,好多朋友都有这样的想法,甚至已经付出了巨大努力与心血,但最终并未能如愿,非常非常的遗憾。一方面,互联网是一个以快为王道的行业,大家平时的工作并不轻松,尤其是DBA,7X24小时的服务要求你时刻准备着投入工作。另一方面,开源社区也是日新月异、一日千里,稍一迁延,所述的题材和内容也就落伍了。

下面一段引文是我在2015年7月份为将要开始写作的这本书写的一篇前言,这是当时要写的内容的一个轮廓,现在看来已经大相径庭了。

去哪儿网是一个做线上旅游产品的网站,主营线上机票和酒店,以及其他旅游相关的产品,例如火车票,度假线路和旅游攻略,目的地生活,接送机场、景点、火车站的专车,景点门票等等。发展到现在,去哪儿网已经算是一个纯粹的电子商务网站了,而在网上的各种业务逻辑和操作,大部分都是用MySQL作为后台数据库支撑的,这也包括交易的支付业务和账务系统。要完成这些,除了依靠强大的前端业务逻辑以及丰富的流水日志外,对MySQL运维管理也是极大的挑战,这也使得去哪儿网的MySQL DBA得到极大的历练。

我们在工作过程中为了支撑业务的发展,围绕着MySQL运维这个主旨思想做了很多事情,大致来说,可以分为以下几个方面:

其一,定义《去哪儿网MySQL数据库开发规范》 这是主要针对开发人员的数据库操作规范,定义这个规范的主要目的是为了方便我们规范地使用MySQL数据库,在可知的情况下,充分利用数据库的优点去解决我们的业务需求,同时最大可能地规避已知MySQL的不足之处。另外还有一些约定俗成的规范,例如表名,字段名要用小写字母,这个完全是使用习惯的规范,大家完全不必太在意,可以根据自己的习惯调整,但我建议,如果在同一家公司内部,还是统一起来比较好。

其二,开发《InceptionSQL审核系统》 为了最大程度的保障线上数据库安全,我们规定,所有的线上SQL必须得通过DBA的审核之后,才能上线执行,因为在高并发高负载的系统中,任何一条不优化的SQL都有可能引起数据库负载过高,从而导致数据库实例挂掉。去哪儿网是一个快速发展的公司,各种业务需求变化多端,平时DBA审核SQL的压力非常大,再加上我们定义了自己的开发规范,这在人工审核的过程中很可能出现一些问题,例如审核不全面,尺度不统一,判断不正确等等。为了改善这一状况,提高DBA的工作效率,加快项目上线的速度,我们花大力气开发了一套InceptionSQL审核系统,这套系统能完成DBA平时审核过程中的大部分人工的工作,极大的提升了工作效率,也大大提高了审核的正确性,目前已经是DBA工作过程中不可或缺的有力帮手了。

其三,优化数据库架构,提升数据库的可用性。去哪儿网是实时的在线交易网站,它对交易数据的一致性和可用性要求非常的高,在这个目标上,我们付出了极大的努力。长期以来,去哪儿网的MySQL架构是MMM,MMM是一个比较实用的MySQL集群方案,在早期的MySQL运维中,一度被很多人采用,在MySQL领域是一个使用比较广泛的架构。但是随着技术的发展和业务对数据库服务能力需求的提升,MMM已经渐渐不能满足我们的需要了,特别的,它有一些致命的缺陷,可能会导致业务完全无法使用。我们花了巨大精力去探索什么才是适合我们的MySQL架构方案。最终,我们选定了基于Galera同步的Percona XtraDB Cluster(PXC)方案,在此方案中,我们选定了PXC为底层数据库存储架构,同时加上我们自主开发的分布式哨兵监控系统以及连接池管理模块,形成了一套完整的数据库高可用架构方案,这套方案在线上运行良好,极大地满足了线上业务的高可用和高一致性的需求。

另外,由于基于PXC的数据库方案是高一致性的,它对可用性做了必要的牺牲,但在业务中,有些地方是不太计较一致性或者可以接受相当程度的延时,为了满足此类业务的需求,我们在保留PXC的同时,另起了一个新的方案QMHA,它起源于MHA,但我们不满足MHA的监控方式以及线上切换的缺陷,同时,我们觉得自己的分布式哨兵实在工作得太好了,我们决定在MHA的思路上,用我们的组件来完善这个架构,它的底层是数据库的Master-Slave replication,用我们的分布式哨兵作为监控工具,同时我们利用MySQL5.6之后的GTID和Semi-Sync-Replication这些特性,来保证数据的最终一致性。

第四,自动化运维。台上一分钟,台下十年功。如果安全的线上运维是台上表演的话,那么围绕着MySQL的自动化运维和数据安全所做的工作就是台下功了。我们在这方面做了不少的工作,其中值得一提的是MySQL备份系统,完善的备份是整个数据库系统必须要有的重要一环。它在某种意义上也是数据库高可用的一部分,一旦有线上误操作或者其他意外,备份数据会救公司一命。我们使用Percona Xtrabackup自己定制了一套完善的备份系统,可以作为一些场景需求的参考。

另外,为了在工作中能快速完成集群的部署,我们定制了自己的集群部署平台,它可以实现分钟级的MySQL集群部署,这里需要指出的是,我们的集群结构很复杂,它除了传统的启动MySQL实例外,还需要管理监控哨兵,Zookeeper资源,集群namespace资源,以及一些常规的备份和监控功能。

最后,为了方便的管理我们的数据库集群,完成复杂的线上节点切换和维护,我们实现了数据库集群管理平台,它让DBA在线上操作时,摆脱了复杂的运维步骤,大大简化了操作流程,同时也有效防止了误操作的可能,提高了运维操作的安全性。

随着去哪儿网DB团队的壮大,我们的知识和技术也在慢慢积累。平时这些知识散布在各种wiki,doc,blog以及内部邮件之中。系统性和可读性都非常差,非常不利于知识的传播和传承,特别是最近新人入职,对他们的培训也要花费很大精力。我不禁想,如果能把这些知识整理出来,做成一本书,岂不两全其美么。如果去哪儿网之外的技术同仁们也对此感兴趣,我也乐于把它分享出来,供大家在工作中参考。如果能在工作过程中对大家有所帮助,也算是我们对技术社区的点滴回报,真是善莫大焉。

MySQL是历史悠久的开源数据库,有着非常强大的社区和人数巨多的拥趸,这里面卧虎藏龙,大牛辈出。由于我们知识范围有限,如果此书中有疏漏或者不妥之处,还望见谅,我们会积极改进,不断进步的。

2015.7.21  周彦伟于北京


去哪儿网DBA团队


从上文中亲爱的读者会发现,有很多文中提到的内容在本书中并未涉及到。真实的情况是,近两年来,我们一边工作,一边偷空写作,写写停停,停停写写,随着时间的流逝,很多内容已经不适合再放入本书了,例如我们对于MMM和MHA的使用方案和运维经验;另外,在实践中我们也发现,有些技术和方案,是紧密联系业务的,事关公司敏感信息的内容也无法放在书中。于是,我们又有了写写删删,删删写写的痛苦经历。技术书籍的时效性于我们有切肤之痛,曾经有多少次,此书几乎走到了夭折的边缘。



这里,要衷心感谢一下我亲密的战友王竹峰先生,与之相识相知真乃人生一大快事。竹峰的存在,不仅帮我实现了自己诸多的技术设想,也帮我坚定了去做很多事情的信心。本书的写作过程中,竹峰的坚持与毅力鼓舞了大家,竹峰的贡献和劳动是此书能够出版的关键。本书的另一名作者强昌金,在工作和写作中所表现出来的初生之犊的冲劲和孜孜不倦的精神,也极大推动了本书的完成。


《MySQ运维内参》写作校对小分队

给读者带来最实用的内容是我们一直追求的目标。我们能力有限,学识浅薄,只能花出十二分的气力,写一些我们自己熟悉和擅长的东西呈现给读者。对于没把握的东西,宁可缺失,也不能草草充数了事。这些年,我们最熟悉的东西有三种,那就是本书的MySQL、Galera和Inception。MySQL是本书的根本,我们使用了多年,而且竹峰在MySQL源码上的钻研心得也极大地提高了本书的含金量。我们在去哪儿网所推行的基于Galera的PXC方案算是近年来最先进的MySQL集群化方案之一了,它的数据一致性和高可用性的特点特别适合去哪儿网这种涉及交易和电子商务的服务型业务,经过三年的实战实践,它帮我们支撑了大部分业务需求,我们受益匪浅。而Inception,则是我们送给所有MySQL DBA和MySQL相关开发人员的礼物,Inception的出现,把DBA审核SQL、操作SQL的效率提升了一个量级,也为数据库操作的安全性和规范性提供了行业参考,作为Inception的设计、开发、使用、推广者,我们不能不去提它。

而对于已经不再适应时代发展和技术潮流的内容,我们也绝不手软。MMM和MHA的部分曾经写的很辛苦,而临到最后,我们决心还是把它们删去,如果有希望了解这方面知识的读者,请自行查找吧。但我还是要奉劝大家,MySQL集群化的时代已经到来,基于Galera的Percona XtraDB Cluster和MariaDB Cluster以及最新的MySQL Group Replication才是上上之选。

MySQL已经进入了到了MySQL 5.7时代,并且MySQL 8.0也已经呱呱落地。我们也高度重视了在这方面的匹配。虽然我们开始写书的时候还在用MySQL 5.6版本,但到了后期,除了某些原理性的源码解析,对于版本差别没那么敏感,我们努力去兼容新版本的特性。尤为荣幸的是,来自MySQL官方资深的技术顾问杜修文先生和MySQL一线开发团队的宋利兵先生愿意以特邀撰稿人的身份特别为我们的书写了一部分内容,这是MySQL最新版本相关功能的权威解读。

我们在书中努力加入了很多在平时工作过程中碰到的案例以及经验总结,这也算是本书的一个特色吧,希望这些能在实战中切切实实地帮助到读者。


最后,我还是想把上面几年前说过的话再重复一遍:MySQL是历史悠久的开源数据库,有着非常强大的社区和人数巨多的拥趸,这里面卧虎藏龙,大牛辈出。由于我们知识范围有限,如果此书中有疏漏或者不妥之处,还望见谅,我们会积极改进,不断进步的。

周彦伟 2017.1.25 于北京




声明:文章版权归原作者所有 部分文章转自互联网 如有侵权请联系 [邮箱地址] 删除

路过

雷人

握手

鲜花

鸡蛋

相关分类

返回顶部