互联网技术的迅猛发展,手机、平板、智能电视等各种输入终端的普及,让互联网数据呈现出爆炸性的增长。面对海量的数据,如何能以更加稳定、快速的方式存储海量数据,以及从中挖掘出有价值的信息,成为很多企业面临的新课堂。云存储的出现为数据挖掘快速的发展带来了新的机遇。
亚马逊、微软、谷歌、IBM 等巨头纷纷推出了自己的云存储平台,国内华为、腾讯、百度、360 等公司也加紧了在云存储领域的布局。云服务已经被企业列入常规 IT 投资,云数据库服务是非常重要的一部分。
本文将从一个用户的角度历数市场上现有关系型数据库服务的主要功能,探索是否有一些改进的空间以及华为企业云在 RDS(Relational Database Service) 技术上所做的一些选择。
数据库备份指将数据库系统中的数据加以复制,一旦发生灾难或错误操作时,得以方便而及时地恢复系统的有效数据和正常运作。
数据库备份是用户常用的功能之一,mysqldump/xtrabackup 是最常见的备份方案,同时也是大多数厂商的选择。
Mysqldump 有比较明显的缺陷,无法做增量备份,对于经常需要做备份的用户来说,是无法接受的。Xtrabackup 是 Percona 推出的商业解决方案,同时提供免费版本,基本机制是通过比较 LSN 来做增量拷贝,从机制来看,需要 innodb 事务的支持,对于非 innodb 比如 myisam,则通过 FLUSH TBALES WITH READ LOCAK 来保证数据的一致性,显然,block write 的时间取决于 myisam 表拷贝时间。但是我们可以禁用 myisam 表,这个问题可以跳过。另一方面,xtrabackup 需要运行在 GuestOS 中,读取拷贝生产环境数据目录同时会影响到线上的 IO 的表现。
最后,如果用户想要删除其中一个增量备份,该如何做增量的合并和删除?还是将依赖的增量一并删除?
恐怕对用户来说,这都不是理想的。
有没有既不影响生产环境 IO,又能做增量并且还能独立删除的办法呢?快照或许是一个比较好的选择。
数据库快照是由客户启动的数据库实例的快照,不仅可以备份单个数据库,还可以备份整个数据库实例。数据库快照可让客户按所需的任意频率在已知状态备份数据库实例,然后随时还原到该特定的状态。数据库快照可以使用 RDS 控制台或 RDS API 创建。数据库快照会一直保存,直到客户使用 RDS 控制台或 RDS API 将其或其所在的实例删除。
数据库实例规格如图 1 所示。
图 1 :实例规格
Innodb、myisam 是最常用的 MySQL 数据库引擎,前者是事务安全的,后者则拥有更高的性能。前文描述到,myisam 无法保证备份点数据的一致性,FLUSH TBALES WITH READ LOCAK 又需要 block write,得不偿失。
MySQL replication 是做读写分离的基础,分为异步和半同步的方式,前者有对主机性能影响小,但数据有一定延时,后者则相反。两种技术可以满足用户不同场景的需求。关于 Crash safe 的问题,分为 master crash safe 和 slave crash safe。
MySQL 5.6 版本之前存在一个 bug,即当 sync_binlog=1/innodb-flush-log-at-trx-commit=1 时,会使得 InnoDB 存储引擎的 group commit 失效, 导致性能急剧下降,crash-safe slave 的问题更复杂些,主要 replication 中的 SQL thread 和 IO thread 原子性问题,这里不再累述,MySQL 5.6 版本通过将 relay-info.log 的信息保存在 InnoDB 的事务表中解决了这个问题。
讲了这么多华为企业云 RDS 技术,下面会从几个方面详解 RDS 究竟是什么。
RDS(Relational Database Service,关系型数据库服务)是一种基于云计算平台的即开即用、稳定可靠、弹性伸缩、便捷管理的在线关系型数据库服务。
RDS 具有较为完善的性能监控体系和多重安全防护措施,能使企业用户在云中轻松设置、操作和扩展关系型数据库。通过 RDS 控制台,可以执行所有必需任务而无需编程,简化运营流程,减少日常运维工作量,从而能够专注于应用开发和业务发展。
用户访问 RDS 实例时,需要经过 ECS(Elastic Cloud Server,弹性云服务器),具体关系如图 2 所示。
图 2:访问 RDS
RDS 是以集群为单位进行组织,一个集群由多个实例构成,集群中包含一个主机,还可能包含一个备机和若干个只读副本,它们一起为业务提供数据库服务。
RDS 的最小管理单元是实例,一个实例代表了一个独立运行的关系型数据库,实例可进行如下分类:
用户可以在 RDS 系统中自助创建及管理各种数据库引擎的实例。
RDS 的 OpenAPI 提供针对用户数据库实例的创建、查看、删除等基本操作,以及查询系统支持的 API 版本、数据库引擎及版本、运行环境规格、可用区域等操作。其主要的调用场景如图 3 和图 4 所示。
图 3:使用场景一
在创建实例之前,需要获取系统支持的数据库引擎及版本,运行环境规格以及可用区域信息。在获取到信息之后,可以将返回结果作为调用参数,执行创建实例操作。
在实例创建成功后,用户可以对自己所属的实例进行列举、查询详细信息、以及删除操作。
图 4:使用场景二
数据库实例需要先查询数据库所有参数和参数信息后才能进行设置参数取值和参数恢复默认值。
数据库实例可以进行扩容和重启,可以将返回的任务号作为调用参数查询异步任务的进展情况。
在 RDS 的 Web 界面中,考虑到面向用户的易用性,将用户的数据库实例组织成集群的形式进行展现,通常一个 MySQL 集群中可以包含一个主实例、一个 HA 备实例以及若干个只读副本,或者只包含一个主实例和若干个只读副本,不包含备实例,其中只读副本不超过 5 个。如图 5 所示为 API 数据模型。
图 5:API 数据模型
在 RDS 的 OpenAPI 中,考虑到与 OpenStack Trove 的兼容,对外只以实例级别提供服务,与 Web 界面上的集群组织方式的对应关系为:
在创建实例时会默认创建出一个集群,并将创建出的实例显示在此集群下。
在列举实例时会将此用户所属的所有实例以列表方式给出,不会体现出集群到实例的层次关系。
删除只读副本与界面功能相同,都是指定实例进行删除;删除主备实例时会同时将实例所属的集群一同删除,但前提条件是必须将集群下属的只读副本提前删除。
数据库的解决一般可通过自建数据库、数据库 on 云服务器、RDS 等,我们来通过图 6 所示的详细对比了解其优劣势:
图 6:数据库解决方案详细对比
RDS 背后聚集了华为的 DBA 团队专门负责运维,数据库内核开发团队负责改进数据库,将很多需要 DBA 日常运维的工作逐渐纳入实现产品化。使用的客户可以从很多底层的任务中解放出来。
RDS 数据库实例的生命周期包括创建、修改、重启、备份和还原以及删除等,具体如图 7 所示。
图 7:数据库实例生命周期管理
接下来将以华为企业云 RDS 为例,来说明作为一个完整的 RDS 产品,至少需要能够提供哪些服务。
结合在数据库技术领域的发展趋势,完整的 RDS 产品或可从以下几点特性着手研发:兼容多版本 MySQL、多种实例类型满足多场景需求、数据库管理便利灵活、指标监控便于运行状况了解、性能调优满足业务需要等。
以华为企业云 RDS 为研究模板和例子,其服务特性可从以下几点来看:
一是安全,RDS 包括多种安全策略保护数据库和用户隐私,例如:VPC、子网、安全组等。
二是性能监控,RDS 能支撑监控数据库实例及数据库引擎的关键性能指标,包括计算 / 内存 / 存储容量使用率、I/O 活动、数据库连接数、QPS/TPS、缓冲池、读 / 写活动等。
三是数据迁移,登录 RDS 管理控制台,即可在“数据迁移”页面,提供数据迁移流程。
四是高可用,RDS 会将主数据库实例数据复制到一个备用数据库实例中,一旦主数据库实例发生故障导致不可用,即可在很短时间内切换到备用数据库实例上。
五是弹性伸缩,包括水平伸缩和垂直伸缩,例如可增删只读副本(每个数据库集群最多有 5 个只读副本)、数据库实例存储空间扩容等。
六是备份与恢复,RDS 既支持自动备份以及创建快照,又能支持恢复到某个备份文件点。
七是日志管理,可查询数据库“错误日志”和“慢查询日志”,为数据库调优提供参考。
八是参数配置,数据库管理员可以根据监控和日志等信息,对数据库引擎参数进行自定义设置,从而优化数据库。
华为企业云 RDS 可以解决当前各类电子商务网站、社区网站、移动 APP 以及游戏类应用数据库搭建、管理以及维护的高成本及复杂性问题,使用户可以将更多的精力聚焦到应用和业务等核心层面,节约硬件成本和软件等成本,实现按需付费。
华为企业云 RDS 支持主从热备、读写分离,且提供了备份、恢复、监控等方面的全套解决方案,从而解决数据库运维上的问题。