Galera

Galera是支持mysql集群同步多主软件
多主特性:
1.同步复制,主备无延迟(其中一台数据库挂掉之后数据不会丢失)
2.支持多主同时读写,保证数据一致性
(应该是理论上的,因为我们在使用的时候也出现了不会立即同步的情况)
3.集群中各节点保存的是全量数据
4.节点添加、删除,自动检测和配置
(当新增节点或者停机某个节点维护的时候,增量数据和基础数据不需要人工手动备份,galera cluser会在线自动拉取数据,集群最终保持数据一致)
5.行级别并行复制
6.不用写binlog
 
限制:
1.集群必须是3个节点(2个也能运行)
2.存储引擎Innodb/Xtradb/Maria
题外话:
关于Xtradb和Maria是MariaDb用到的引擎,MariaDb其实就是Mysql 一个分支,目的就是完全兼容mysql。目前算是加强版了,对于用户使用没什么感知跟Mysql一样呢
Maria(Aria)是MyISAM存储引擎的增强版
Xtradb算是Innodb的加强版,MariaDb10.1版本默认的是Xtradb,10.2默认的是Innodb了
3.不支持的SQL:LOCK / UNLOCK TABLES / GET_LOCK(), RELEASE_LOCK()…
(这些是锁的相关语句吧,没怎么用过)
4.不支持XA Transaction(不懂,百度了下是分布式事务)
 
目前可以用的产品
(看到这里我才明白原来是MariaDb支持Galera Cluser,然后我们生产环境一直用的这个,我都不知道……)
 
客户端/Galera节点交互图
 
Galera复制的原理
Galera复制是一种基于认证的复制,保证一个拷贝的可序列化性
1. 事务在本地节点执行时采取乐观策略,成功广播到所有节点后再做冲突检测
(比如当一个写请求到一个节点上,该节点执行事务认为跟其他节点的事务不冲突,在本地执行完,在commit之前会将这个写集合广播到其他节点,在做冲突检测)
2. 检测出冲突时,本地事务优先被回滚
3. 每个节点独立、异步执行队列中的WS(写集合)
4. 事务T在A节点执行成功返回客户端后,其他节点保证T一定会被执行,因此有可能存在延迟,即虚拟同步
 
Galera flow control(流量控制)
问题:
Galera是同步复制(虚拟同步):由于每个节点执行速度不同,长时间运行后导致有些节点队列里面堆积了很多任务,导致执行越来越慢,会丢失一些事务。
原理:
Galera内部实现了flow control作用就是协调各个节点,保证各个节点执行事务的速度大于队列增长的速度,避免丢失事务。
整个Galera Cluser中,同时只能有一个节点进行广播,每个节点都会获取广播的机会,当慢节点的执行队列超过一定长度,它会广播一个FC_PAUSE消息。所有节点收到消息后都会暂缓广播。直到慢节点执行队列缩小到一定长度,Galera Cluser数据同步又开始恢复。
 
posted @ 2019-06-27 17:31  嗨~好久不见~  阅读(2103)  评论(1编辑  收藏  举报