《PolarDB-X开源分布式数据库实战进阶》——PolarDB-X的部署与运维(5) https://developer.aliyun.com/article/1228807?groupCode=polardbforpg
四、 企业级运维能力
PolarDB-X Operator在2.2版本支持的企业级运维能力包括日志采集(SQL审计能力)、强一致备份恢复、备库重搭以及参数模板和参数设置四项能力。
PolarDB-X 2.2版本支持三种日志的自动采集,分别是:
• sql.log,记录全量的SQL信息,基于日志便可以构建全量的SQL审计功能。
• slow.log,记录慢SQL列表,可以帮助有效地监控PolarDB-X上是否存在慢SQL或问题SQL。
• error.log,即错误日志,可以帮助判断是否存在业务上的异常或系统上的异常。
日志文件的采集采用了Filebeats +Logstash的开源解决方案。首先,Filebeats会以daemonSet的方式部署在K8s的每个节点上,定时拉取相关日志文件,并将其投递到Logstash集群中。Logstash负责对日志文本进行解析,提取索引字段,同时将其发送给下游存储系统,默认推荐采用Elasticsearch的方式进行存储,通过Kibana的方式做可视化的查询展现。
上图展示了Kibana查询PolarDB-X SQL日志的截图,可以简单地利用查询语言,帮助定位问题SQL或高危SQL。
另外,采用Logstash的解决方案可以充分利用其多种output plugin的能力,将SQL日志或慢日志投递到不同的存储系统中,比如MongoDB、Datadog或Clickhouse,构建自己的分析业务。
PolarDB-X的备份流程分为几个步骤:
对每一个DN节点进行并行的物理备份,所有DN都备份完成之后,在增量日志里寻找一致性位点。然后,对增量的binlog日志进行裁剪,备份增量日志,进行元数据备份。
为什要寻找一致性的位点?以经典的转账场景为例来说明:如上图,有一张账户信息表,一共有4个账户a、b、c、d,其中a、b分布在DN1,c、d在DN2上。账户总金额为200元。在某一时刻,发生了a向d转账以及c向b转账。而此时恰好正在进行备份,且备份完成。如果要基于之前的备份集对数据进行恢复,则恢复出的数据应该只存在两种情况:两笔转账在DN1和DN2上都没发生或都发生了,不应该存在诸如DN1上发生而DN2上没发生的情况。即四个账户的总金额始终要保持200,保证全局数据的一致性。
而如果没有保证全局数据的一致性,如上图下方所示,a账号已经完成了转账,账户金额从100变为50,但是该50元还未到d账户中,c和b的情况类似,则会导致四个账户的总金额变成为110,这对于业务而言是不可接受的结果。
因此,我们需要找出一致性的位点,保证恢复的时刻所有该提交的事务都已完成提交,所有该回滚的事务都已全部被回滚。
备份完成之后,PolarDB-X备份集的构成如下:PolarDB-X的账号、密码、元拓扑信息等元数据;每一个DN节点的全量物理备份,同时我们会为每一个DN节点配备增量的备份日志,保证所有DN都恢复到全局一致的位点,保证恢复出的数据的一致性。
PolarDB-X的备份集目前支持多种存储方式,包括OSS、SFTP、NAS等,未来也会支持S3等更多方式。
《PolarDB-X开源分布式数据库实战进阶》——PolarDB-X的部署与运维(7) https://developer.aliyun.com/article/1228804?groupCode=polardbforpg