接上篇:https://developer.aliyun.com/article/1225652?spm=a2c6h.13148508.setting.14.187d4f0efY6Nsu
云RDS数据库存储经历了从本地SSD盘到SSD云盘到ESSD云盘的发展历程。 ESSD云盘又经历了PL1、PL2、PL3的迭代,性能越来越好。未来,我们也在计划实现PL-X系列,能够做到与本地盘的IO延迟基本持平。
今年下半年,我们已经在推动SSD云盘下线,建议用户将SSD云盘的实例主动升级到ESC云盘,因为SSD云盘不支持在线扩容。
本地SSD盘的磁盘与数据库引擎部署在同一节点的同一台主机上。在所有存储类型中,其IO延迟最低,性能最好。做变配存储资源不足时,需要进行跨机迁移,迁移时间与存储大小相关。存储使用量越大,跨机迁移时间越长。而如果本地有资源,则变配耗时相对较短。如果不知道此次变配是本机变配还是跨机变配,可以提供工单咨询确认。
SSD云盘和ESSD云盘均采用分布式存储架构的弹性块存储设备,实现了计算节点与存储分离的架构,但会导致IO延迟增加。而ESSD云盘PL-X能够支持RDS、MySQL、PG与MariaDB在线升级、秒级扩容,SQL Server可低至分钟级,对业务无感。
本地盘增加只读实例时,需要拷贝全量数据,再追加增量的Binlog,所需时间较久。而在ESSD云盘上,增加一个只读节点仅需半个小时以内,相对于本地盘的时间大幅节省。备份方面,云盘只能做快照备份,无法下载快照备份文件,但可以下载物理备份文件用于本地恢复。
数据库存储着一个公司的核心数据,因此数据库安全至关重要。维护数据库安全可以分为事前防御与事后审计。
事前防御方面,首先,我们提供了数据库账号密码的防护。RDS数据库上的账号分为高权账号与普通账号。高权账号只能通过控制台或API的方式创建,它并不是普通数据库上的最高权限账号,比如,它并不等同于MySQL上的root@localhost。云上数据库的高权账号可以断开其他任意非内置账号的数据库连接或可以创建其他普通账号并对其授权。
但是在业务管控上建议仅将高权账号授予某一个人或某一个组管理,不应让过多人使用高权账号。比如实际业务上不建议使用高权账号,而是应创建普通账号,合理授权,按照最小化授权的方式使用。
白名单安全组定义了哪些IP或安全组内的ECS可以访问RDS,即定义了访问源。注意,需要避免白名单与安全组开放过大,导致变相地将RDS暴露在过多的客户端面前,造成安全隐患。比如在生产上,不建议将白名单设置为0.0.0.0/0,会造成访问没有限制。
在一些场景中比如ECS被黑,可能通过抓包分析程序所用的连接数据库的账号,分析数据库相关的SQL,通过这些特征提取导致数据库账号被暴力破解,或通过SQL注入的方式危害数据库的安全。通过SSL加密连接,可以保证程序到RDS之间的链路安全。但是需要注意开通SSL加密会造成RDS CPU资源开销的增加,而且需要定期更新证书。
在存储加密上,对云盘的实例可以使用SSD云盘存储加密,本地盘的实例可以开启TDE实现表级别的加密。存储加密可以保证即使数据备份泄露,他人也无法解密,保护了数据安全。
阿里云账号分为主账号与子账号,在管理云上数据库资源或其他资源时,主账号拥有全部账号的权限。保护好主账号后,可以在子账号上利用RAM授权,使特定的人管理特定的资源。比如DBA团队可以创建子账号,授予其管理RDS的权限等。
事后审计方面,云RDS数据库提供了SQL洞察日志的审计、云监控告警、控制台操作审计与日志管理的功能。SQL洞察可以审计所有SQL操作记录,适用于需要追溯SQL执行情况的场景,执行成功和失败的SQL都会被记录。但是需要注意当RDS实例本身出现了OOM或踩到bug发生crash,导致MySQL进程或PG进程异常退出,此时SQL还未来得及写入审计日志,因此该类SQL很可能不会被记录。
通过云监控告警,可以在CPU打满或发生HA时收到相关告警信息,及时介入。控制台操作审计主要审计控制台上的操作记录,针对主账号和子账号在控制台的操作信息。开通子账号时,如果为其分配了AK,则需要合理管控子账号。有些客户可能会将AK用于自动化的管理工作,将相关的代码上传到比如Git hub上,可能会被别有用心的人扫描到代码里使用的AK,导致AK泄露之后出现比如实例被删的情况。
在日志管理方面,云RDS数据库提供了比如错误日志、慢日志、SQL洞察日志、主备切换日志等能够了解实例运行情况的日志,帮助管理数据库。
云RDS数据库整体架构主要分为两条线。
• 其一,应用程序通过域名进行访问。
• 其二,通过WEB控制台或API接口发送指令给RDS完成相关操作。请求发送给后端消息中心,再发送给对应模块,对应模块获取到相关信息之后返回给客户端调用方。比如要通过控制台或API查看慢日志,将API请求发送给消息中心之后,消息中心会从日志系统里捞取相关时间段的日志信息,返回给客户端。
HA探测系统会定期探测后端部署在节点上实例的可用性。发现不可用或网络不可达且连续多次探测均如此时,就会下发相应的任务完成HA切换。在MySQL库下面的HA HealthCheck表会定期(一般为15s)往表里写入一条数据,探测数据库是否可写,如果不可写,则进行切换。如果个某节点的物理主机宕机或提交了大事务导致HA探测的语句无法完成binlog落盘,也会导致HA切换。因此,一般在生产业务中要避免大事务的操作。
在线迁移系统会定期检测,比如有一主一备两个实例,当备节点不可用时,会发起在线迁移,始终保证系统有一主一备两个实例能够提供高可用的能力。变配也是通过在线迁移系统完成。
备份系统会按照每个实例设置的备份频率,定期备份实例的数据。无论是快照备份还是物理备份,一般首先会选择备节点做备份。如果备节点主从延迟很大,则会选择主节点完成备份。
进行RDS MySQL备份往往在业务低峰期 ,而此时可能会同时进行运维操作,例如执行DDL变更操作可能会导致备份失败。因此,如果发现备份失败,可以主动尝试发起临时备份任务,以保证当天的备份成功。后续如果需要做快速恢复时,可以寻找最近时间点的备份文件。
通过以上一整套系统,可以保证RDS数据库的稳定性与安全性。
云数据库RDS的概览页面如上图所示,包含了该账号下RDS实例个数、即将过期个数以及已过期个数、每个地域上有哪些实例。页面上方为消息通知,右侧展示了繁忙实例、空闲实例以及近期重大功能发布。
上图为实例列表页面。如果遇到问题,可以将实例ID复制粘贴,提交相关工单反馈进行问题排查。
点击实例名称可进入实例详情页面。
上图为实例详情页面。
接下篇:https://developer.aliyun.com/article/1225649?spm=a2c6h.13148508.setting.16.187d4f0efY6Nsu