网站首页 > 开源技术 正文
一、概述
Percona XtraDB集群是一个完全开源的MySQL高可用性解决方案。 它将Percona服务器和Percona XtraBackup与Galera库集成,以实现同步多主复制。一个集群由节点组成,其中每个节点包含同一节点上同步的一组数据(也就是说在任何一个节点进行写入操作,都会同步给其它所有节点写入到自己的磁盘。这点跟Oracle Rac有本质的区别,Rac是多个节点连同一个共享存储,假如Oracle的共享存储挂了,整个集群就挂了。而Mysql pxc中任何一台机器挂了,集群照常运转,因为节点间并不共享磁盘。)。 建议的配置至少有3个节点,但也可以有2个节点。 每个节点是一个常规的MySQL服务器实例(例如,Percona服务器)。 您可以将现有的MySQL服务器实例转换为节点,并使用此节点作为基础运行群集。 也可以从群集中分离任何节点,并将其用作常规MySQL服务器实例。
官方文档:https://www.percona.com/doc/percona-xtradb-cluster/LATEST/index.html
二、特点
1.优点
- 多主架构:真正的多点读写的集群,在任何时候读写数据,都是最新的。
- 同步复制:集群不同节点之间数据同步,没有延迟,在数据库挂掉之后,数据不会丢失。
- 并发复制:从节点在APPLY数据时,支持并行执行,有更好的性能表现。
- 故障切换:在出现数据库故障时,因为支持多点写入,切得非常容易。
- 热插拔:在服务期间,如果数据库挂了,只要监控程序发现的够快,不可服务时间就会非常少。在节点故障期间,节点本身对集群的影响非常小。
- 自动节点克隆:在新增节点,或者停机维护时,增量数据或者基础数据不需要人工手动备份提供,PXC会自动拉取在线节点数据,最终集群会变为一致。
- 对应用透明:集群的维护,对应用程序是透明的,几乎感觉不到。
以上几点,足以说明PXC是一个既稳健,又在数据一致性、完整性及高性能方面有出色表现的高可用解决方案。
2.缺点
- 配置新节点的开销。 添加新节点时,必须从现有节点中的一个复制完整数据集。 如果是100GB,则复制100GB。
- 这不能用作有效的写入缩放解决方案。 当您将写入流量运行到2个节点,而将所有流量运行到1个节点时,写入吞吐量可能会有所改善,但您不能期望太多。 所有写入仍然必须在所有节点上进行。
- 重复的数据,3个节点就会有3个重复的数据。
3.使用限制
- 复制只适用于InnoDB存储引擎。任何写入其他类型的表,包括系统(mysql.*)表复制。由于pxc只作用于innodb引擎,而mysql自带的系统库(mysql)里面有些表是MyISAM的存储引擎,因此不能直接对系统库(mysql)的表进行dml操作,比如INSERT INTO mysql.user…。而是使用CREATE USER…,这个是没有问题的,而且也是正确的方式。
- 不支持的查询:(不支持LOCK TABLES和UNLOCK TABLES语句)
– LOCK TABLES and UNLOCK TABLES is not supported in multi-master setups
– Lock functions, such as GET_LOCK(), RELEASE_LOCK(), and so on
- 查询日志不能定向到表格。如果启用查询日志记录,则必须将日志转发到文件:log_output = file (参数不能是TABLE)
- 允许的最大事务大小由wsrep_max_ws_rows和wsrep_max_ws_size变量。 LOAD DATA INFILE处理将每隔10 000行提交一次。所以大transactions由于LOAD DATA将被拆分为一系列小型transactions。
- 由于可能的提交回滚,XA(分布式)事务不受支持。
- 由于集群级乐观并发控制,事务发出COMMIT可能仍会中止阶段。
- 整个集群的写入吞吐量受最弱节点的限制。如果一个节点变慢,则整个集群变慢。
- 群集的最小建议大小是3个节点(不超过8个节点)。第三个节点可以是一个arbitrator。
- 不支持binlog_rows_query_log_events变量。
- 在SST或XtraBackup中使用的备份锁可能会崩溃。
- 新建表必须要有主键,否则对表进行dml操作会报以下错误:ERROR 1105 (HY000): Percona-XtraDB-Cluster prohibits use of DML command on a table (hello.world) without an explicit primary key with pxc_strict_mode = ENFORCING or MASTER
4.与MySQL Replication区别
Percona XtraDB Cluster与MySQL Replication区别在于:
分布式系统的CAP理论:
- C— 一致性,所有节点的数据一致。
- A— 可用性,一个或多个节点失效,不影响服务请求。
- P— 分区容忍性,节点间的连接失效,仍然可以处理请求。
任何一个分布式系统,需要满足这三个中的两个:
- MySQL Replication: 可用性和分区容忍性;
- Percona XtraDB Cluster: 一致性和可用性;
因此MySQL Replication并不保证数据的一致性,而Percona XtraDB Cluster提供数据一致性。
Percona XtraDB Cluster组件:
Percona XtraDB Cluster基于XtraDB的Percona Server以及包含写复制集补丁,使用Galera 2.x library,事务型应用下的通用的多主同步复制插件。
三、原理介绍
PXC可以实现集群中数据的高度一致性,并且在每个节点上,生成的Binlog顺序都是一样的,这与Galera内部,实现的并发控制机制是分不开的。所有的上层到下层的同步、复制、执行、提交都是通过并发控制机制来管理的。这样才能保证上层的逻辑性,下层数据的完整性等。
当多个事务同时操作相同的数据资源时,这个资源在集群中是不受任何一个Session影响的,直到有一个Session对这个数据资源进行了成功的Commit操作,这时,其他的Session的所有操作实际上已经不可能成功了,当其他的事务尝试做Commit,会直接返回一个因为deadlock事务失败回滚的信息。
这与mysql默认的机制不同,在mysql innodb默认的情况下,当我们在其他事务中对某个id的数据进行update;此时我们发起一个事务对这个数据进行需要获得排它锁的操作,操作将会进行等待,直到超时失败或者现在持有排它锁的事务提交,当前事务将继续。
原理分析:
1.当client端执行dml操作时,将操作发给server,server的native进程处理请求2、client端收到ok,执行commit,server将复制写数据集发给group(cluster),cluster中每个动作对应一个GTID
2.其它server接收到并通过验证(合并数据)后,执行appyl_cb动作和commit_cb动作,若验证没通过,则会退出处理
3.当前server节点验证通过后,执行commit_cb,并返回,若没通过,执行rollback_cb
4.只要当前节点执行了commit_cb和其它节点验证通过后就可返回
四、搭建PXC时注意点
首先要规范集群中节点的数量,整个集群中节点数控制在最少3个、最多8个范围内。最少3个节点是为了防止出现脑裂现象,因为只有在两个节点下才会出现此现象。脑裂现象的标志就是输入任何命令、返回结果都是unkown command,节点在集群中,会因为新节点的加入或者故障,同步失效等而发生状态的切换。
--节点状态变化阶段:
open:节点启动成功,尝试连接到集群。
primary:节点已处于集群中,在新节点加入时,选取donor进行数据同步时会产生的状态。
joiner:节点处于等待接收同步文件时的状态。
joined:节点完成数据同步的工作,尝试保持和集群进度一致。
synced:节点正常提供服务的状态,表示已经同步完成并和集群进度保持一致。
doner:节点处于为新加入的节点提供全量数据时的状态。
注意:doner节点就是数据的贡献者,如果一个新节点加入集群,此时又需要大量数据的SST传输,就有可能因此而拖垮整个集群的性能。所以在生产环境中,如果数据量小,还可以使用SST全量传输,但如果数据量很大就不建议使用这种方式了。可以考虑先建立主从关系,再加入集群。
五、端口说明
3306:数据库对外服务端口
4444:SST(State Snapshot Transfer )全量传输端口, 即数据镜象传输,可配置:xtrabackup , rsync ,mysqldump
4567:成员通信端口
4568:IST(Incremental State Transfer )增量传输端口(相对于SST的增量),只能配置xtrabackup。
猜你喜欢
- 2024-10-23 「干货来袭」MySQL架构总结(mysql数据库架构图)
- 2024-10-23 Linux下搭建MySQL集群(linux下搭建mysql集群功能)
- 2024-10-23 MySQL Galera Cluster的特性和不足之处介绍
- 2024-10-23 Docker+K8S 集群环境搭建及分布式应用部署
- 2024-10-23 浅析开源数据库MySQL架构(浅析开源数据库mysql架构)
- 2024-10-23 MySQL死锁分析与解决之路(mysql死锁的原因及解决方法)
- 2024-10-23 k8s环境中的MySQL集群解决方案(k8s ingress mysql)
- 2024-10-23 高可用MySQL集群实战教程,详解主从复制搭建步骤
- 2024-10-23 看完这篇还不懂 MySQL 主从复制,可以回家躺平了
- 2024-10-23 高可用性、负载均衡的mysql集群解决方案
你 发表评论:
欢迎- 最近发表
- 标签列表
-
- jdk (81)
- putty (66)
- rufus (78)
- 内网穿透 (89)
- okhttp (70)
- powertoys (74)
- windowsterminal (81)
- netcat (65)
- ghostscript (65)
- veracrypt (65)
- asp.netcore (70)
- wrk (67)
- aspose.words (80)
- itk (80)
- ajaxfileupload.js (66)
- sqlhelper (67)
- express.js (67)
- phpmailer (67)
- xjar (70)
- redisclient (78)
- wakeonlan (66)
- tinygo (85)
- startbbs (72)
- webftp (82)
- vsvim (79)
本文暂时没有评论,来添加一个吧(●'◡'●)