跳至主要內容

KunlunBase 金融级高可靠性

Klustron大约 7 分钟

KunlunBase 金融级高可靠性

KunlunBase的金融级高可靠性,由一系列能力和技术组成了一个完整的技术体系,这些能力和机制就像一块块坚硬的巨石,组成了klustron坚不可摧的金融级更高可靠性技术体系。

Klustron 完备的金融级高可靠能力,确保了Klustron集群在发生各种软硬件和网络故障的情况下,可以快速自动恢复运行并且保持数据正确完整和一致性,无需任何人工干预,极大地减轻了DBA的工作负荷。

Klustron 的高可靠能力体系是在Klustron集群后台自动运行,DBA并不需要为此做日常运维管理工作,应用开发者也不需要为此做任何应用开发工作。阅读本章相关文档可以了解Klustron 金融级高可靠性技术体系的各项技术的工作原理。

高可用性( High Availability )

首先,Klustron-storage 实例组成的存储集群(storage shard, 简称 shard)具备高可用性,也就是说在shard 主节点故障后,KunlunBase可以确保所有提交成功的事务的数据正确,一致,不丢失,即RPO = 0;同时保障KunlunBase集群可以持续提供数据读写访问和事务处理服务,即RTO < 30s。

简单来说,Kunlun-storage节点通过binlog 主备复制让备机持续收到主机的数据变更,并且其fullsync 技术确保对于每一个正在提交的事务,只有备机确认收到其事务全部binlog之后,主机才向KunlunBase的计算节点确认事务分支提交成功。然后计算节点才向客户端应用确认事务提交成功,因此客户端收到确认提交成功的事务,其在所有shard上的事务分支都已经存在于那个shard的若干个备机节点,所以主备切换时,新的主节点一定含有全部事务分支的数据更新。

在主节点故障时KunlunBase的fullsync HA 技术可以及时发现主节点故障并选举出新的主节点,并且让其他备节点从新的主节点继续复制数据更新。

Klustron 的存储集群 (storage shard) 使用 Klustron-storage 组成 2*N+1 个节点的主备复制集群,主备节点通过 binlog replication 把主节点的数据变更复制到备节点,由备节点重放数据变更事件从而实现主备数据的最终一致性。Klustron 使用特有的 fullsync 技术确保在主节点提交或者 prepare 的任何一个事务,其 binlog 会被指定数量的 备机收到完成 relay log 刷盘,才会返回成功给对应的计算节点。通常对于一个拥有 2*N+1 个节点的 shard ,Klustron 会默认设置每个已提交的事务都要复制到至少 N 个备机,这就确保了shard在任何时候有N个节点同时发生故障,Klustron总可以选出一个拥有全部已提交和 prepared 的事务的备节点作为新的主节点,继续承担数据读取和写入负载。

在主节点故障后,计算节点可以自动切换存储集群主节点( auto failover ),无需人工干预。

关于Fullsync和Fullsync HA的工作原理,详见 Klustron Fullsync技术介绍Klustron Fullsync HA 技术介绍.

Klustron-storage 的XA事务处理

klustron团队在kunlun-storage中修复和填补了社区版MySQL的一系列XA事务故障恢复的漏洞和空白,让kunlun-storage 可以做到执行XA事务过程中节点故障重启恢复后不丢数据,详见这篇文章了解我们做了哪些工作

分布式事务处理的故障恢复能力

Klustron 的分布式事务处理具备健壮完备的故障恢复能力( crash safety&fault tolerance ),确保集群任何节点故障或者网络故障,不会导致集群停止服务或者用户数据丢失或者不一致。其中,计算节点故障不会丢失用户数据或者系统元数据或者导致数据不一致,唯一的影响是应用软件的客户端连接断开,导致正在执行的事务自动回滚。只要还有一个计算节点在运行,KunlunBase集群就仍然可以正常读写。而且用户可以随时增加更多计算节点,新增的计算节点自动完成元数据更新,然后开始正常工作。

一个数据库服务器启动后,KunlunBase的所有节点,包括计算节点,存储节点,元数据集群节点都会被 KunlunBase的集群管理组件自动拉起,并且自动完成数据恢复,把数据恢复到节点上次退出前一致的状态。

Klustron 通过分布式事务两阶段提交技术 确保节点/网络故障时可以保障客户端发起的分布式事务 的ACID属性 --- 已提交的事务的数据更新不会丢失或者损坏或者导致任何错误

分布式DDL事务处理和DDL复制

一个 Klustron 集群可以包含任意数量的计算节点,并且随时按需增减计算节点。Klustron的分布式DDL事务处理和DDL复制技术 确保客户端连接其中任何一个计算节点执行 DDL 语句后,这个 DDL 语句会自动被本集群所有其他计算节点执行,并且本集群所有计算节点执行所有 DDL 的顺序完全相同,从而确保所有计算节点有完全相同的元数据。执行每一个这样的 DDL 语句事务涉及计算节点,元数据节点,存储节点发生故障不会导致 DDL 语句执行和复制重放出现错误,可以确保事务ACID。

多机房高可用能力

从Klustron-1.2版本开始,Klustron不仅可以做到集群层面的高可用,在服务器故障时确保集群持续提供服务并且数据不会丢失损坏,还可以做到机房级别的高可用。也就是即使一个机房整体全部同时故障了,Klustron集群仍然可以正常工作并且持续提供服务,不丢失损坏数据。这需要适当的方式来多机房安装和部署Klustron集群,详见 多机房高可用集群双活 相关的技术文档。

必须的关键变量设置

Klustron的金融级高可靠体系生效的关键变量设置已经在计算节点和存储节点的配置模板文件中设置妥当,用户不应该修改。如果修改了这些变量的值,那么就可能无法达到上述高可靠、高可用能力。关键变量及其正确值如下。

存储节点和元数据节点

innodb_doublewrite=1
innodb_flush_log_at_trx_commit =1
sync_binlog = 1
enable_fullsync = true
fullsync_consistency_level = N, 如果存储 shard 有3个节点,那么 N 就是1,如果shard有4或5个节点,则 N = 2。即 N 是满足 shard 节点数量 <= 2 * N + 1 的最小正整数,并且shard的节点数量必须 大于 1。
fullsync_relaylog_fsync_ack_level = 2

计算节点

fsync = on
synchronous_commit=on
full_page_writes=on
wal_writer_flush_after=0

本章目录: