前言
数据库是现代互联网应用架构中不可缺少的一环,但是运维和管理数据库又是一件专业的事儿,像在新美大有专业的DBA团队运维数据库,而一般中小公司很难有这样的专业水准,所以基于云的数据库服务便应运而生了。
DBaaS(Database as a Service)数据库即服务,是基于云的基础设施提供的数据库服务。云数据库服务提供给用户可以自操作的、对数据库全生命周期管理的、按需动态扩展的使用数据库的能力。云数据库Cloud Database Service (CDS)是美团云内部数据库服务的简称。
本次分享主要介绍美团云CDS服务的总体架构和功能特性,以及以MySQL为例,介绍数据库管理中的高可用和高扩展性等特性。
总体架构
CDS服务构建在云生态之上,以下是CDS服务的总体架构:
蓝色部分为CDS服务框架的主要组件,主要包括五部分:CDS API、CDS Core、CDS HA、CDS Backup以及存放元数据的数据库。
CDS API主要负责处理用户的请求,用户的请求首先到达API,然后交由Core模块处理,在Core模块中我们对不同类型数据库的逻辑进行了抽象,不同数据库的只是以不同Plugin的方式进行支持。
HA模块负责数据库的高可用,跟Core模块类似,我们对不同数据库的HA逻辑进行了抽象,可以做到能够比较方便的增加对不同类型数据库的支持。
备份模块负责对数据库数据的备份工作,对不同的数据库使用不同的备份工具进行备份,备份数据以流的形式直接上传至云存储,这样既对数据库的本地磁盘容量没有额外要求,也保证了备份数据的安全性。
CDS比较强的依赖的云的基础设施,比如认证使用了Keystone,模板的存储使用了Glance,虚拟机和容器的创建调度使用了Region,承载数据库实例的Host,对数据库进行监控的Monitor以及存储备份数据的云存储,还有提供VIP等访问能力的虚拟网络等,这些是CDS服务的强大后盾。
功能特性
支持多种数据库/缓存
不同类型的数据库生命周期的管理动作是大同小异的,比如都会有创建、删除、升级配置、故障切换、备份、监控等流程,我们对数据库的共性特征进行抽象处理,设计了一套代码复用高但也不缺乏灵活性的框架,在这个框架上支持一类不同的数据库我们的开发维护成本也大大降低。
上面图示表明了这套框架的核心逻辑,在基类中实现了数据库管理的核心流程,在不同数据库子类中,对各自的实现进行补充。
高可用性
数据库的高可用是CDS服务的核心功能。传统的关系型数据库,例如MySQL,本身并没有高可用的保证,必须借助于其他工具,比如MHA、MMM等在主节点故障时进行故障切换。我们通过借鉴这些开源工具,实现了自己的HA组件,不仅利用云平台的特性进行了加强,还具有更好的可运维性及可扩展性。
这是CDS HA模块的主要结构,通过一个集中式的HA模块,对云平台内部的多个集群进行托管。
上图以MySQL为例,HA的过程。
健康检查。健康检查决定了是否进行主从切换,而进行主从切换的代价是比较高的,所以健康检查模块的基本原则是尽量避免切换,除非十分确定。只有在两个节点同时访问Master节点失败,并且访问Slave成功时,才会触发切换动作。其他情况,例如Master节点和Slave节点同时访问不成功,或一个检查节点能通另外一个不通,这些更可能是网络抖动等引起的检查失败,这种情况下只会发送告警,而不会触发切换动作。选举新的主库。从多个从节点中选择日志同步最新的节点作为新主库。尝试补齐日志。这时新主库尝试通过ssh连接原主库,如果能连通的话,尝试补齐日志。干掉原主库。使用云平台的一个好处就是可以干净利索的干掉一个节点,能够保证这个节点不会突然恢复了,所以不会出现脑裂的问题。使能新主库。将VIP从原主库上摘下来挂到新主库上,这时应用程序又能正常访问数据库了,不需要修改程序配置。修改从库的指向,指向新主库。创建新的从库。从云存储拉取数据库的备份,自动创建一个新的从库,这样就恢复了故障切换之前的数据库拓扑,仍然保持了一主三从的结构。
可扩展性
ScaleUp
云数据库的一个特点就是按需分配,当业务量比较小的时候,只需要一个小型数据库就满足需求了,比如1核1G配置的数据库,当业务量上来之后,之前的配置不满足需求了,这是可以动态的调整数据库的配置,或者动态的扩展磁盘。
上图是基于虚拟机的数据库服务调整配置的流程。从上图可以看到,在调整过程中,数据库不可写的时间在第6-13步,不可读的时间在9-11步,在流程上尽最大可能的减少了服务不可用的时间,如果主库上没有一些耗时较长的慢查询或长事务,整个服务不可用的时间只有数秒。
ScaleOut
MySQL服务而言,CDS最小支持一主一备的架构,备节点用于数据备份和HA,如果业务读压力比较大,可以动态添加若干个从库,而如果有读写分离需求的话还可以增加代理节点。CDS支持从小到大可扩展的数据架构,用户可以方便的动态调整自己的数据库架构,做到成本的最优化。
安全性
安全是客户是否放心将数据库放在云上的根本问题。我们从多个层面保证了用户的数据安全性。
网络隔离。CDS基于云的虚拟网络的基础设施,不同用户的数据库是二层网络隔离的,杜绝嗅探和爆破。最小权限原则。CDS中管理用的用户名只用于完成特定的功能,例如创建从库需要用到数据库的replication权限,对此我们使用的repl用户只拥有replication client和replication slave权限。自动备份功能。云存储中保存了近七天的数据库的全量数据备份,通过备份和binlog可以恢复到指定时间点的数据。伪删除和回收站。如果用户不小心点了删除怎么办?我们的伪删除功能能快速恢复用户删除的实例,而磁盘回收站则可以帮忙恢复删除一个月之内的数据。
自定义参数
不同的数据库都有许多参数配置,特定的业务场景需要对一些参数进行微调以达到最高的性能。CDS提供了用户调整配置的功能,用户可以在界面上修改数据库的配置。
总结
上面介绍了目前美团云数据库方面做的一些工作和成果,后续的规划主要围绕以下几个方面进行:
做细做深,针对单一产品进行持续优化,在可用性、可靠性、性能上优于竞品。丰富产品,支持更多数据库接入。