阿里云InfluxDB®高可用设计

  • 时间:
  • 浏览:0

数据服务高可用目前似乎是软件设计必要考虑帕累托图。在实际的工程实践中,基于需求有各种不同的外理方案,如SQL Server的share everything;Oracle RAC的share storage;GPDB/Spanner的share nothing架构;最近,基于kubenetes容器编排技术的高可用方案也这么受欢迎。

Share everything/storage架构方案一般会被具有资深研发背景的数据库厂商采用;在大帕累托图互联网初创公司由于数据库产品发展的早期技术栈中,share nothing的分布式架构使用比较广泛,它利用多副本机制来保障服务的可靠性,某个节点出现故障时,能很慢切换到备用节点继续提供服务;容器编排技术通过将服务资源进行统一封装管理,当节点故障以都不要 够快速拉起继续提供服务。

阿里云InfluxDB®的高可用分派中,也充分调研了各种技术方案:

一、基于共享存储:各个实例通过挂载共享存储,共享存储在节点故障时不要须数据迁移,都不要 即时拉起,目前在计算存储分离架构中运用比较多。对于有情况表的共享存储服务,常常必须外理用户态文件缓存和内存cache数据同步问题报告 图片,也要外理写文件冲突,必须引入类似GFS的分布式文件系统,实现比较繁杂。

关于raft的选举算法,在各篇文章涵盖完整性的介绍,这里便不再做具体描述,下面主要介绍raft数据写入流程和数据存储策略。

数据查询:数据查询类操作为缩短执行流程,采用了弱一致性方案,这么走raft流程,在请求节点执行成功后便返回给客户端。



数据写入流程如上图所示:

raft storage用于存储raft log entry,raft log由以下成员组成:

在分布式协议发展的后期,为了实现故障恢复时Master、Slave之间角色的自动轮转,实现了Paxos与Raft协议。我每个人所有所有其实 两阶段提交的Paxos与Raft协议同属于另2个 技术栈,Raft协议相对来说更易理解,在Go技术栈中运用更为广泛,故选折 了Raft一致性协议来实现高可用副本之间数据的一致性问题报告 图片。Raft协议的具体选举算法都不要 参考Paper<In Search of an Understandable Consensus Algorithm>以及译文<Raft一致性算法论文译文>。Raft协议通过先写数据操作日志,时候回放Apply操作来保证各个节点间数据的一致性。为了保证各个副本角色切换后Raft日志的一致性,Raft在日志写入和匹配的时候保证了以下型态:

二、Share nothing技术方案:Share nothing的各副本之间分为有角色管理和无角色管理你你这个。为了保证各个副本数据一致以及事务之间的隔离性,你你这个技术方案在实现细节上有较大的不同。

一根保证了任意一根日志的索引位置创建后不要改变;第二条保证了新的Leader被选举后,日志追加写入时,其它Fellower节点必须检查保证与Leader节点日志一致。时序的应用场景中,在有血块写入的业务中,必须保证写入节点不可用时候服务快速恢复,作为公有云服务,保证写入数据不丢失和查询的最终一致性,时候Raft实现比较轻量,最终亲戚亲戚我们我们 采用了Raft你你这个开源的分布式协议。

对于问题报告 图片1,阿里云InfluxDB®底层采用了自研盘古分布式存储系统,保证了数据99.9999999%的高可靠性;时候InfluxDB采用WAL机制来保障恢复重启实例中cache的写入数据;

对于问题报告 图片2,目前阿里云InfluxDB®采用了基于raft一致性协议的三副本机制,当其中某个节点故障时候保证不要 持续提供数据写入、查询服务。

高可用相对于单机版本,能提供更高服务SLA保障。本文接下来也主要针对阿里云InfluxDB®高可用设计和Raft协议组织组织结构原理展开具体描述。

本文主要从工程实践的角度出发,介绍了阿里云InfluxDB®高可用架构的实现以及raft组织组织结构机制。为了提高用户服务的SLA,当前阿里云InfluxDB®高可用版本由于商业化,技术方案也在不断的演进中。未来,亲戚亲戚我们我们 将在降低使用成本、提高性能方面做进一步提升,希望对阿里云InfluxDB®由于高可用技术感兴趣的同学能一同交流,一同打造一款服务能力更强、价格更低的阿里云InfluxDB®时序数据库产品。

阿里云InfluxDB®是一版免运维,稳定可靠,可弹性伸缩的在线时序数据库服务,目前围绕InfluxDB的TIG(Telegraf/InfluxDB/Grafana)生态和高可用服务版本由于商业化,都不要 在阿里云官网直接购买。在日常业务中,用户会比较关心另2个 问题报告 图片:

replicate时,由于next标记的索引值介于snapshot和unstable.offset之间(firstIndex<=next<=lastIndex),则从leader的持久化日志中读取entry进行同步;接着unstable ents也会发送到应用层storage中进行持久化;当storage持久化日志数据时候,便根据apply和commit信息进行回放数据操作。

阿里云InfluxDB®为了实现raft log的持久化和故障可恢复,采用了自研的hybrid storage方案,完整性都不要 参考<阿里云InfluxDB® Raft HybridStorage实现方案>。



如上图所示,阿里云InfluxDB的高可用架构侧重于AP,对于数据/元数据的写和更新,采用Raft一致性协议;为缩短查询流程,读采用了弱一致性。