1、Galera Cluster 介绍
Galera Cluster:集成了Galera插件的MySQL集群,是一种新型的,数据不共享的,高度冗余的高可用方案,目前Galera Cluster有两个版本,分别是Percona Xtradb Cluster及MariaDB Cluster,Galera本身是具有多主特性的,即采用multi-master的集群架构,是一个既稳健,又在数据一致性、完整性及高性能方面有出色表现的高可用解决方案。
- Galera Cluster特点
- 多主架构:真正的多点读写的集群,在任何时候读写数据,都是最新的
- 同步复制:改善了主从复制延迟问题,基本上达到了实时同步
- 并发复制:从节点APPLY数据时,支持并行执行,更好的性能
- 故障切换:在出现数据库故障时,因支持多点写入,切换容易
- 热插拔:在服务期间,如果数据库挂了,只要监控程序发现的够快,不可服务时间就会非常少。在节点故障期间,节点本身对集群的影响非常小
- 自动节点克隆:在新增节点,或者停机维护时,增量数据或者基础数据不需要人工手动备份提供,Galera Cluster会自动拉取在线节点数据,最终集群会变为一致
- 对应用透明:集群的维护,对应用程序是透明的
- Galera Cluster 缺点
- 任何更新的事务都需要全局验证通过,才会在其他节点上执行,则集群性能由集群中最差性能节点决定(一般集群节点配置都是一样的)
- 新节点加入或延后较大的节点重新加入需全量拷贝数据(SST,State Snapshot Transfer),作为donor( 贡献者,如: 同步数据时的提供者)的节点在同步过程中无法提供读写
- 只支持innodb存储引擎的表
![图片[1]-MySQL 高可用-Galera Cluster-李佳程的个人主页](http://www.lijiach.com/wp-content/uploads/2022/11/image-142.png)
- Galera Cluster 包括两个组件
- Galera replication library (galera-3)
- WSREP:MySQL extended with the Write Set Replication
- WSREP复制实现:
- PXC:Percona XtraDB Cluster,是Percona对Galera的实现
- MariaDB Galera Cluster:
2、PXC 原理
![图片[2]-MySQL 高可用-Galera Cluster-李佳程的个人主页](http://www.lijiach.com/wp-content/uploads/2022/11/image-143.png)
PXC最常使用4个端口号:
- 3306:数据库对外服务的端口号
- 4444:请求SST的端口号
- 4567:组成员之间进行沟通的端口号
- 4568:用于传输IST的端口号
PXC中涉及到的重要概念和核心参数:
(1)集群中节点的数量:整个集群中节点数量应该控制在最少3个、最多8个的范围内。最少3个节点是
为了防止出现脑裂现象,因为只有在2个节点下才会出现此现象。脑裂现象的标志就是输入任何命令,返
回的结果都是unknown command。节点在集群中,会因新节点的加入或故障、同步失效等原因发生状
态的切换。
(2)节点状态的变化阶段:
![图片[3]-MySQL 高可用-Galera Cluster-李佳程的个人主页](http://www.lijiach.com/wp-content/uploads/2022/11/image-144.png)
- open: 节点启动成功,尝试连接到集群时的状态
- primary:节点已处于集群中,在新节点加入并选取donor进行数据同步时的状态
- joiner: 节点处于等待接收同步文件时的状态
- joined: 节点完成数据同步工作,尝试保持和集群进度一致时的状态
- synced: 节点正常提供服务时的状态,表示已经同步完成并和集群进度保持一致
- donor: 节点处于为新加入的节点提供全量数据时的状态
donor节点就是数据的贡献者,如果一个新节点加入集群,此时又需要大量数据的SST数据传输,就有可能因此而拖垮整个集群的性能,所以在生产环境中,如果数据量较小,还可以使用SST全量数据传输,但如果数据量很大就不建议使用这种方式,可以考虑先建立主从关系,然后再加入集群。
(3)节点的数据传输方式:
- SST:State Snapshot Transfer,全量数据传输
- IST:Incremental State Transfer,增量数据传输
SST数据传输有xtrabackup、mysqldump和rsync三种方式,而增量数据传输就只有一种方式xtrabackup,但生产环境中一般数据量较小时,可以使用SST全量数据传输,但也只使用xtrabackup方法。
(4)GCache模块:在PXC中一个特别重要的模块,它的核心功能就是为每个节点缓存当前最新的写集。如果有新节点加入进来,就可以把新数据的增量传递给新节点,而不需要再使用SST传输方式,这样可以让节点更快地加入集群中,涉及如下参数:
- gcache.size:缓存写集增量信息的大小,它的默认大小是128MB,通过wsrep_provider_options参数设置,建议调整为2GB~4GB范围,足够的空间便于缓存更多的增量信息。
- gcache.mem_size:GCache中内存缓存的大小,适度调大可以提高整个集群的性能
- gcache.page_size:如果内存不够用(GCache不足),就直接将写集写入磁盘文件中