暂无图片
暂无图片
暂无图片
暂无图片
暂无图片

Galera架构

原创 小气鬼 2022-06-15
516

Galera replication是什么

MySQL DBA及开发应该都知道MySQL源生复制及semi-sync半同步复制,它们都基于MySQL binlog,原生复制是完全异步的,master不需要保证slave接收并执行了binlog,能够保证master最大性能,但是slave可能存在延迟,主备数据无法保证一致性,在不停服务的前提下如果master宕机让slave顶上,就会丢失数据,semi-sync在异步复制基础上增加了数据保护的考虑,master必须确认slave收到binlog后(但不保证slave执行了事务)才能最终提交事务,在没有退化(延迟较大时可能发生)成异步复制之前可以保证数据安全,此时master挂掉之后,slave可以在apply完所有relay log后切换成master提供读写服务


Galera replication是codership提供的MySQL数据同步方案,具有高可用,易于扩展等特点,它将多个MySQL节点组织成一个cluster


Galera replication特性

1. 同步复制,主备无延迟
2.
支持多主同时读写,保证数据一致性
3.
集群中各节点保存全量数据
4.
节点添加/删除,自动检测和配置
5.
行级别并行复制
6.
不需要写binlog

 

相对于MySQL源生复制和semi-sync,Galera replication比较有吸引力的特性:
1.
同步复制,主备无延迟,master宕机后slave可以立即顶上并提供服务(semi-sync需要apply完所有relay log)
2.
事务冲突检测保证数据一致性,多个节点可以同时读写数据,可以极大简化数据访问
3.
行级别并行复制,MySQL 5.6之前slave sql线程只有一个,这个长期饱受诟病,是导致slave落后master的主要原因

 

Galera replication原理

Galera replication是一种Certification based replication,保证one-copy serializability,理论基于这两篇论文:Don’t be lazy, be consistent 和 Database State Machine Approach

 

Galera replication采取的是乐观策略,即事务在一个节点提交时,被认为与其他节点上的事务没有冲突,首先在本地“执行”(之所以带引号,是因为事务没有执行完)后再发送到所有节点做冲突检测,存在两种情况下需要回滚事务:
1. WS
复制到其它节点,被加到每个节点的slave trx queue中,与queue中前面的trxs在做certification test时发现冲突
2. WS
通过了certification test后被保证一定会执行,在它执行过程中,如果该节点上有与其冲突的local trxs(Local phase),回滚local trxs

 

因此事务在commit节点广播后,节点之间不交换是否冲突的信息,各个节点独立异步的处理该事务certification based replication协议保证:
1.
事务在所有节点上要么都commit,要么都rollback/abort
2.
事务在所有节点的执行顺序一致

 

Certification based replication所依赖的基础技术:
Group Communication System
1) Atomic delivery (
事务传输要么成功传给了所有节点,要么都失败)
2) Total order (
事务在所有节点中的顺序一致)
3) Group maintenance (
每个节点知道所有节点的状态)

 

 

「喜欢这篇文章,您的关注和赞赏是给作者最好的鼓励」
关注作者
【版权声明】本文为墨天轮用户原创内容,转载时必须标注文章的来源(墨天轮),文章链接,文章作者等基本信息,否则作者和墨天轮有权追究责任。如果您发现墨天轮中有涉嫌抄袭或者侵权的内容,欢迎发送邮件至:contact@modb.pro进行举报,并提供相关证据,一经查实,墨天轮将立刻删除相关内容。

评论