​Archery DBpass→NineData,数据库审计工具升级换代最佳实践(1)

云掣YunChe4天前客户案例48
在 2022 年 4 月至 2023 年 3 月期间,经过DevOPS、DBA以及研发团队的密切协作与不懈努力,云掣为某电商行业客户实施了一系列数据库架构升级和深度优化策略,显著将每月数据库的告警事件数量从 1402 个降低至每月 22 个,并且实现了持续的告警事件下降趋势。

然而,自 2023 年下旬以来数据库的告警事件数量出现反弹,并长期稳定在每月 50-70个,未能进一步降低。自2024年开始甚至呈现出恶化的迹象,高于100的报警数量开始陆续出现。为此云掣对根因进行深入剖析同时对 SOP 记录的数据进行了分析,发现主要是由于一些长期累积的人因问题所导致,且无法单纯通过人工或流程管控以及培训去解决,也超出了SOP应对的范围,导致严重的重复性应对和人力消耗。
因此,云掣启动了DBpass平台的迭代优化项目,从Archery DBpass升级到NineData,依靠数据库管控平台的优势,提升生产数据库操作标准化、可维护性、可靠性、性能。从而实现生产46台数据库,每月告警数量小于5个的稳定性 SLA 目标,为客户的业务稳定和用户体验保驾护航。

 现存痛点

 数据库查询风险

经过数据库生产环境历史事件数据分析,我们发现查询类事务的影响占比非常大,过去Archery 帮助我们管控住了结构和数据变更,但部分查询类事务没有得到有效管控,并且这块的问题发酵得日益严重,甚至威胁到生产稳定和安全。
举例说明如下图,24年 3 月份危及生产环境稳定服务得数据库事件(总数49个)的 SQL 操作类型占比分析,其中查询操作造成的数据库告警占比高达 42%。
image.png
经过深入数据分析和 SOP 记录调查,造成这 42% 查询问题的主要原因如下:
原因一:少数拥有数据库连接信息的人(leader 级|分组长级| 核心backup人员)为了紧急 hotfix 修复或者紧急核查线上问题数据时,直接连接数据库执行SQL,从而造成数据库资源波动。这部分SQL研发人员没有途径给到DBA确认风险或者判断是否有更好的执行方式。Archery DBpass仅支持数据库结构和数据变更审核,查询事务没有做任何限制。
原因二:新版本代码上线,或者修复数据的紧急事件,又或者临时执行的SQL任务,无法给到DBA确认风险。DBA和DevOPS 只有被动得在24小时监控体系反馈的突然发生的CPU耗尽的危险事件中,发现异常SQL 或缺少索引或 Slow SQL,然后进行紧急应对,生产风险巨大,同时相关人员长此以往损耗巨大。
原因三:由于Archery查询功能不够完善,研发人员更乐于使用类似于DataGrip这类专业数据库连接工具,但是每位使用者的数据库能力以及对规范和生产环境的安全意识水平都有高低,这就造成研发直接连接数据库会有风险。

 数据库结构变更风险

每个月的数据库告警里,有差不多38%都是因为数据库结构变更造成的,期间通常会出现只读延迟告警和IOPS使用率告警。虽然一般会被列入计划内的变更,但本质上是对生产稳定的威胁,同时会引发相当规模的应对人员启用应对流程,造成人员损耗和浪费,我们必须避免这种灾害可能,从而避免服务不可用的情况发生,同时把有限的应对人力集中到需要的地方去。
另外,数据库结构变更,分为两种类型,分别是:

  • Online DDL:无锁变更,在执行过程中不会锁表,表可以正常读写。

  • Copy DDL:有锁变更,在执行过程中全程锁表,会堵塞写入,业务不能正常写入数据。

如果遇到必须全程锁表变更的情况,就会非常麻烦。例如之前订单组,遇到核心下单表Copy DDL变更,如果直接执行的话,可能会影响到正常下单。经过多方技术评估,最终把变更放在凌晨05:00执行(低峰期,下单人数很少)由 DBA 和研发在线监控,SQL 执行了 3 分钟,刚好期间没有用户下单,未出现锁等待的情况。如果期间有用户下单,那么就会直接造成用户下单失败,造成巨大损失。
结构变更造成的数据库告警事件占比约有 38%,其中 98% 的变更分别会造成以下影响:

  • IOPS 使用率抖动:这意味着在此期间数据库的性能会变的不稳定,SQL 语句的执行效率时快时慢,反映到用户身上,用户的操作会时快时慢,甚至失败,影响线上服务稳定以及造成用户使用体验下降。
  • 只读延迟:业务会读取到旧数据,业务上不能接受,当延迟过高系统甚至会将所有的请求转发到主节点,造成主节点的负载飙升,极端情况下可能会出现主节点崩坏,从而导致生产环境故障无法提供服务,这是绝对不能发生的。

但是,除了上述的大部分情况,还有少数的特殊情况。影响范围不仅会导致延迟和IOPS 抖动,还会有一个更严重的风险,那就是锁表。会堵塞业务的写入操作,如果是核心表,可能会直接影响到用户下单,必要时需要停掉相关业务才能执行变更,也就意味着我们的生产环境无法持续稳定提供线上服务。

 建设内容

 直连数据库的风险解决方案

如下图,一些研发人员通过紧急修复的机会掌握数据库连接信息,通过五花八门的连接工具,就可以访问数据库,且没有统一的规范限制。

NineData 平台中有数百条规范限制,通过规范可以强制把所有人都拉到同一水平线上,从而满足研发人员查询数据库需求的同时,保障生产数据库的安全。
image.png
Archery 仅是一个审核变更平台,而 NineData 则是一个数据库管控平台,提供不亚于 DataGrip 等专业查询工具的操作体验,最重要的是可以通过设置统一的规范和粒度更为细致的权限,帮助我们主动拦截掉可能会对生产环境造成影响的 SQL 语句。
如下图,NineData 内置数百条语句编写规范,可以由DBA及运维人员按照环境等级配置,只要 SQL 命中规范就会阻止。
image.png
SQL 命中规范后,提出改进建议,帮助研发人员改进低效 SQL 语句,有效降低问题语句发生的可能性,从而避免危及生产环境稳定的情况。
图片
根据历史数据分析,如果使用 NineData 作为数据库统一访问入口,预计每月可以有效拦截违规操作,提高SQL语句效能标准下限,预计可减少 25-30% 的数据库告警事件。

  代码中的SQL风险解决方案

前文提到,造成数据库告警事件,查询占比 42%,分别是由直连数据和代码中的某些 SQL 以及业务的临时发布或者一次批量任务造成的,如果 SQL 执行效率不高或者并发过大,就非常容易危及数据库的平稳运行,从而导致生产环境稳定性风险。
NineData 提供了一个SQL 代码审核功能,通过该功能,研发人员可以通过 SQL 文件、代码包、XML 等多种方式,在代码上线前,把 SQL 提交给 NineData 平台,平台中的内置规则和优化策略会对 SQL 进行智能预审,将不符合规范的 SQL 会被拦截,当然,研发也可以选择直接提交,由 DBA 来把最后一道关。
举例说明,如下图,NineData 平台会将一些简单的缺少索引的 SQL 拦截并提出建议。
图片
根据历史数据分析,如果使用 NineData 的 SQL 代码审核功能,预计每月可以有效减少 15-20% 的数据库告警事件。

  数据库结构变更锁表风险解决方案

相比于老的 Archery DBpass 平台,NineData 提供了无锁 DDL 变更功能。可以把 DDL 降级为批量 DML ,从而实现无延迟不锁表的结构变更,这是一个业内少有的能力,明显提升了数据库的稳定性和可维护性。

根据历史数据分析,如果使用 NineData 的 gh-ost DDL 结构变更,预计每月可以有效减少 25% 的告警事件。而且上面提到的 锁表风险,都可以转化为无锁变更,无需停业务,不会影响用户体验,完全消灭了线上风险。

 核心价值

 优化建议开发效率提升——数据归档和清理

数据库表中的数据不能任其无限增长,到达某个临界值会降低表的查询性能,且大表会降低数据库的可维护性。所以各业务组都会遇到清理无效数据场景,每个业务组都有不同清理数据的方式。
以商品组为例,虽然清理数据的频次不高,但每次清理数据的行数都是几亿行一次。
根据规范,物理删除业务数据一般是不被允许的,往往是由于外部压力,例如,空间不够,扩容会产生额外费用。技术角度来说,表太大会降低可维护性和性能。删除数据的操作都是研发自己写脚本清理,所以过程中需要实时关注进度,避免删错数据或者并发过大对数据库造成额外的影响。
下图是与商品组某位研发的采访记录,非常具有代表性。研发人员也希望数据清理操作,能够流程化、标准化、自动化,从而降低线上操作风险。
图片
NineData 提供了数据归档与清理的功能,研发人员只需要简单的配置删除的数据范围,提交审批流程,平台就可以自动分批清理,让数据清理和归档操作更加标准化和自动化
图片
使用 NineData 数据归档与清理功能,可以减少研发工作量,清理数据的操作,只需要在平台上提交流程即可,统一标准,合规可追踪,不用担心怕删错数据或并发过大影响线上,提高了删数据操作工作的标准化、流程化以及操作安全。

 流程效率提升——导入导出

在运维过程中,研发也有数据导入和导出的需求,之前的流程都会先给到 DBA 需求,SQL任务由 SRE 团队人员,通过腾讯云的 DMC服务平台 手动执行 后,导出 SQL 文件,然后再发送给研发人员。

NineData 支持数据导入导出,只需要提交工单,DBA 和 leader 审批后,就可以将数据以 SQL、CSV、Excel 的格式自动化 导出。
相当于之前的工作是人工操作的,通过 NineData 这些操作都可以自动化完成。

  数据安全——数据追踪和变更备份

我们使用的腾讯云数据库,提供了实例级别的数据恢复功能,因此想要恢复数据的话,需要花费的时间和数据量成正比,数据量越大恢复所花费的时间就越长。而且即便业务只想恢复某张表的某几条记录,仍然需要恢复整个数据库实例,往往需要 1~3 小时,而且腾讯云一般是把数据恢复到一个全新的数据库实例中,新购的实例也需要不菲的费用。
NineData 有一项技术,叫数据追踪和回滚,变相为我们提供了行级别的表数据回滚能力,并且是将数据恢复到原实例,节省新购实例的费用。恢复耗时上,根据线上实际操作结果,都可以在 5~20 分钟内恢复数据,大大提升了我们数据库线上灾备恢复的时间。
数据丢失的故障,往往是因为bug、人为误操作造成的。虽然说发生概率较小。如果万一发生此类故障,导致用户数据丢失,不能及时恢复数据的话,这不仅会影响我们的商誉,还可能导致用户流失和销售业绩损失。NineData 可以将数据恢复的时间变得很短,在紧急情况下帮助我们快速恢复数据回到业务正轨,从而避免或减少这些损失。
通过 NineData 可以减少数据库在数据丢失故障中的 RTO(表示从数据丢失到数据完全恢复所需的时间)由原来的 1~3 小时,缩短至 5~20 分钟
在试用过程中,已有业务组通过 NineData 数据追踪和变更备份的功能,快速修复了错误的数据

相关文章

统一融合,云掣助力知名烟草集团打通互联网营销平台数据脉络

统一融合,云掣助力知名烟草集团打通互联网营销平台数据脉络

某烟草集团,集卷烟生产销售、烟草物资配套供应、科研以及多元化经营等为一体,在卷烟产销总量、全国市场覆盖率、国际市场销量等多项指标上均位居行业前列。该集团基于微信服务号运营,策划了以烟包二维码为载体,通...

ACOS统一监控-医保交付案例

ACOS统一监控-医保交付案例

1.项目背景目前某省会级医保信息系统全面上线,系统采用医疗保障应用框架HSAF,该框架推动平台从集中式走向分布式,统一了应用框架。医保信息系统正式上线后,需要服务医保定点机构,市民医保结算及大量的业务...

图片

首先将腾讯云的ES集群全量快照备份至腾讯云COS中,待全量快照备份完成后,再使用阿里云的在线迁移服务功能,将腾讯云COS中的快照数据在线迁移至阿里云OSS。快照数据迁移完毕后,登录阿里云ES集群进行快照恢复操作即可,当所有的索引健康状态变为green,就表明快照恢复任务完成。
增量快照的备份恢复流程与全量快照的备份流程一致,区别仅在于,增量快照的备份恢复流程进行到最后一步快照恢复操作时,需要提前将阿里云ES集群中的索引状态修改为close,待快照数据全部恢复完成后,索引的健康状态会默认变为green。


 建设内容

Step1:环境准备


预先在阿里云购买可1:1安装的集群,即资源规格、集群插件与当前腾讯云ES集群一致的阿里云6.7.0版本ES集群,然后提前将腾讯云中全量的ES集群数据通过快照迁移的方式迁移到阿里云ES集群中。


Step2:代码验证


客户公司的研发人员对迁移后的集群数据进行灰度测试,包括客户端连接、写入、读取等功能的代码测试。


Step3:割接前的流程梳理确认

  1. 确定写入的链路,并读取业务方负责人信息;
  2. 准备好防止数据丢失和保障数据一致的预案;
  3. 明确回滚方案。

Step4:割接前的数据迁移

  1. 关闭阿里云ES集群的白名单,禁止研发测试的数据写入,保障集群环境单一可靠;
  2. 清空阿里云ES集群的脏数据、数据验证、历史快照的恢复和同步记录;
  3. 进行增量快照的恢复和同步,并保持验证,直至割接前;
  4. 如果第2步和第4步有重合的部分,为了防止数据污染,需要在阿里云ES集群中再进行一次历史数据清空和增全量恢复的动作。

Step5:割接开始

  1. 研发人员提前将配置文件的地址修改为阿里云ES集群连接内网的地址,并设置业务不上线生效;
  2. 关闭腾讯云ES集群的业务数据写入;
  3. 最后一次进行增量数据快照和恢复动作,将数据补齐;
  4. 开启阿里云ES集群的白名单;
  5. 设置切换配置生效,并进行上线动作,完成读写业务后,再切换到阿里云ES集群;
  6. 进行读写验证;
  7. 关闭腾讯云ES集群的白名单;
  8. 测试工程师进行回归测试

Step6:回滚

  1. 将阿里云ES集群的白名单关闭,停止写入数据;
  2. 恢复腾讯云ES集群的白名单,并将配置文件的地址改回腾讯云ES集群生效;
  3. 回滚方案生效,业务数据(kafka、mysql)重新消费写入腾讯云ES集群。



 知识拓展

 快照备份


ES集群基于快照的迁移方式
需通过 snapshot api 接口进行迁移,基本原理是从源ES集群创建索引快照,然后在目标ES集群中进行快照恢复。通过snapshot api方式进行数据迁移时,特别需要注意ES集群的版本,目标ES集群的主版本号要大于等于源ES集群的主版本号。
例如:6.x中的6为主版本号,那么此集群所创建的快照就不能在7.x版本的集群中恢复。
快照迁移支持索引数据的增量备份和恢复迁移
由于二次快照是在前一次快照的索引数据基础之上,再增加新数据的快照,包括了索引数据的增、删、改等新变动。那么在二次快照之后,新的ES集群实例恢复后,新数据与源ES集群实例数据将保持一致。
二次快照备份恢复的时长
由于二次快照的数据量低于首次快照,所以耗时会比首次快照备份的时间短。


 logstash迁移同步


logstash的版本
应与目标ES集群的主版本号相同。例如:目标ES集群为6.8.2版本,则logstash也需要使用6.8版本。
索引type的问题
不同版本的ES集群对索引type的约束也不同,所以在跨大版本迁移ES集群时,可能会出现因为索引type而导致目标集群写入失败等情况。这是因为logstash的增量数据同步基于时间字段,所以要求字段类型为@timetamp时,才能按照时间同步数据。若时间字段为long、text等非标准的类型,则无法按照时间同步数据。
硬件和网络配置要求
logstash对网络带宽和服务器CPU、内存、磁盘的要求较高,如果想实时同步大量数据,就必须提升硬件和网络配置。


 总结


此次迁云方案效率实现了业务停机时间的最小化,迅速响应了客户公司的需求,并确保了迁移前后数据的一致性。


从腾讯云到阿里云,ES集群跨云迁移技术原理及最佳实践

本文旨在通过一次腾讯云ES集群在线迁移至阿里云ES集群的成功客户案例,结合云掣在多次客户数据迁移过程中总结出的宝贵经验,与大家详细地分享快照迁移ES集群的技术原理和最佳实践,有助于满足各行业领域客户跨...

可观测运维作战实践-ACOS全链路监控案例

可观测运维作战实践-ACOS全链路监控案例

在时间十分紧迫前提下为客户建设一套监控体系实践就是一次作战!下面问题怎么解呢?1、客户现状痛点?2、适合客户全链路监控怎么搭建?3、故障突袭应急筹备方案?4、acos团队面临内外夹击挑战?5、作战结果...

MSP服务为客户交出满意答卷

MSP服务为客户交出满意答卷

运维背景浙江创创鱼信息科技有限公司与我们MSP运维团队已合作了三年以上,随着创创鱼业务系统的稳步发展,业务规模和数据量持续增长,对IT运维体系和能力的要求也不断提高。在MSP技术团队和创创鱼研发团队的...

混合云网络建设

混合云网络建设

项目背景    云计算经过十余年突飞猛进的发展,已经迎来新的黄金十年,进入普惠发展期。据相关机构调研,随着产业结构持续优化,服务部署形态趋于多元化,融合了私有云安全性和公有云开放性...

发表评论    

◎欢迎参与讨论,请在这里发表您的看法、交流您的观点。