昆仑分布式数据库存储集群 Fullsync 机制
一、背景
在Kunlun-storage Fullsync机制开发完成之前,我们一直在使用MySQL Group Replication(MGR)实现存储集群高可用。
为了实现更好的数据写入性能包括更高的吞吐量和更短的延时,以及降低对存储系统和网络带宽的消耗,并且在高可用方面实现更加灵活的策略,我们在kunlun-storage中设计并开发了Fullsync高可用机制。
二、Kunlun-storage Fullsync功能简介
Kunlun-storage Fullsync概况和原理
Kunlun-storage Fullsync的前提条件
gtid_mode=on,enforce_gtid_consistency=1
log_slave_updates=ON
binlog_format=row, i.e. 使用Row based replication
所有主备节点都使用binlog
会话都使用binlog,即sql_log_bin=true。如果把一个会话的sql_log_bin设置为false则此会话中fullsync机制不工作但是其他会话中fullsync仍然工作。
enable_fullsync = ON 打开fullsync全局开关
thread_handling=2或者0, 即kunlun-storage的fullsync机制适用于线程池(thread_handling=2)以及每个线程处理一个事务(thread_handling=0)的情况。
Kunlun-storage Fullsync的功能设计与实现
如果disable_fullsync_on_slave_ack_timeout=1,那么fullsync会自动退化为异步。这样后续等待的事务将不再做fullsync等待。当主节点再次收到备机ack后,会自动启用fullsync机制。
如果disable_fullsync_on_slave_ack_timeout=0,那么fullsync等待超时的会话,会返回错误(错误号9000)给客户端,对于昆仑数据库集群来说,就是计算节点收到了这个错误,会触发主备切换。
COM_BINLOG_ACK使用kunlun-storage的客户端库文件及其mysql.h 头文件编译程序,然后调用 mysql_send_binlog_ack() 函数发送ACK。kunlun-storage fullsync功能使用此方法发送ACK给其主节点。
SLAVE server_id CONSISTENT TO file_index offsetSQL 语句这种方法可以使用任何社区版mysql客户端库,kunlun-storage的主节点可以正确处理该语句,把它当作确认ACK。此方法特别适合各种binlog存储组件。
Kunlun-storage Fullsync的优势
点击阅读原文
推荐阅读
KunlunBase架构介绍
KunlunBase技术优势介绍
KunlunBase技术特点介绍
KunlunBase集群基本概念介绍
END
昆仑数据库是一个HTAP NewSQL分布式数据库管理系统,可以满足用户对海量关系数据的存储管理和利用的全方位需求。
应用开发者和DBA的使用昆仑数据库的体验与单机MySQL和单机PostgreSQL几乎完全相同,因为首先昆仑数据库支持PostgreSQL和MySQL双协议,支持标准SQL:2011的 DML 语法和功能以及PostgreSQL和MySQL对标准 SQL的扩展。同时,昆仑数据库集群支持水平弹性扩容,数据自动拆分,分布式事务处理和分布式查询处理,健壮的容错容灾能力,完善直观的监测分析告警能力,集群数据备份和恢复等 常用的DBA 数据管理和操作。所有这些功能无需任何应用系统侧的编码工作,也无需DBA人工介入,不停服不影响业务正常运行。
昆仑数据库具备全面的OLAP 数据分析能力,通过了TPC-H和TPC-DS标准测试集,可以实时分析新的业务数据,帮助用户发掘出数据的价值。昆仑数据库支持公有云和私有云环境的部署,可以与docker,k8s等云基础设施无缝协作,可以轻松搭建云数据库服务。
请访问 http://www.kunlunbase.com/ 获取更多信息并且下载昆仑数据库软件、文档和资料。
KunlunBase项目已开源
【GitHub:】
https://github.com/zettadb
【Gitee:】
https://gitee.com/zettadb
相关文章