分布式核心数据库的高可用是保证业务连续性的基础,本文主要介绍GoldenDB的同步技术(gSync)以及各个组件节点的高可用技术实现,加深对GoldenDB分布式数据库高可用实现的理解。
GoldenDB高可用
GoldenDB同步技术
MySQL半同步复制

主从复制的完成通过以下三个进程实现的
主库 binary log dump 线程:当从库连接主库时,主库会创建一个log dump 线程,用于发送bin-log的内容。在读取bin-log中的操作时,此线程会对主库上的bin-log加锁,当读取完成,甚至在发动给从库之前,锁会被释放。 从库I/O线程:当从库执行start slave命令之后,从库会创建一个I/O线程用来连接主库,请求主库中更新的bin-log。I/O线程接收到主库binlog dump 进程发来的更新之后,保存在本地relay-log中。
从库SQL线程:SQL线程负责读取relay log中的内容解析成具体的操作并执行,最终保证主从数据的一致性。

半同步复制必须在主库和从库两端同时开启,如果在主库上没打开,或者从库上没有开启,主库都会使用异步方式复制
从库在连接到主库时会询问主库是不是配置了半同步
如果半同步复制主库从库节点都开启了,那么此时主库的事务线程在提交时会被阻塞并等待,会出现两种情况:至少一个从库节点ack通知主库已经收到了所有这个事务的Binlog日志;或者一直等待直到超过配置的超时参数rpl_semi_sync_master_timeout,这种情况下半同步复制将自动关闭,转换为异步复制
从库节点只有在接收到某一个事务的所有Binlog,将其写入并Flush到Relay Log文件之后,才会ack通知对应主库上面的等待线程。
如果在等待过程中,等待时间已经超过了设置的超时时间,没有任何一个从节点通知当前事务,那么此时主库会自动转换为异步复制,当至少一个半同步从节点赶上来时,主库便会自动转换为半同步方式的复制。

在MySQL中安装半同步模块并设置参数rpl_semi_sync_master_enabled开启半同步复制:
mysql> set global rpl_semi_sync_master_enabled = 1;
mysql> set global rpl_semi_sync_master_timeout = 2000;
1.1.2 GoldenDB中的同步技术(gSync)
编者注:GoldenDB的同步技术是在mySql半同步的基础上进行了优化,申请多项专利,名称是gSync

1)并行复制
原生MySQL中binlog dump thread和SQL thread是单线程的,在GoldenDB中使用多线程对此进行了优化。
2)线程池
减少线程重复创建和销毁开销,提高性能
线程池预先创建一定数量的线程,在监听到新的连接请求时,线程池直接从现有线程中分配线程提供服务。服务结束后该线程不会直接销毁,而是去处理其它请求,避免了线程和内存对象的频繁创建和销毁,减少了上下文切换,提高了资源利用率。
系统保护,防止DB雪崩
线程池技术同时也限制了并发线程数,即限制了MySQL运行的线程数。当连接或请求超过设置的最大线程数时候,新的请求需要排队,防止DB出现雪崩,保护底层DB。
3)机房间的数据同步方式
本地机房和同城机房数据采用快同步复制
本地机房和同城机房元数据采用快同步复制
本地机房/同城机房和异地机房间数据采用异步复制
本地机房/同城机房和异地机房间元数据采用快同步复制
同城机房GTM采用实时同步复制,异地机房GTM不从主机房同步数据





