12.3.5. Percona XtraDB Cluster
PXC 是一套 MySQL 高可用集群解决方案,与传统的基于主从复制模式的集群架构相比 PXC 最突出特点就是解决了诟病已久的数据复制延迟问题,基本上可以达到实时同步。而且节点与节点之间,他们相互的关系是对等的。PXC 最关注的是数据的一致性,对待事物的行为时,要么在所有节点上执行,要么都不执行,它的实现机制决定了它对待一致性的行为非常严格,这也能非常完美的保证 MySQL 集群的数据一致性。
12.3.5.1. PXC特性和优点
完全兼容 MySQL。
同步复制,事务要么在所有节点提交或不提交。
多主复制,可以在任意节点进行写操作。
在从服务器上并行应用事件,真正意义上的并行复制。
节点自动配置,数据一致性,不再是异步复制。
故障切换:因为支持多点写入,所以在出现数据库故障时可以很容易的进行故障切换。
自动节点克隆:在新增节点或停机维护时,增量数据或基础数据不需要人工手动备份提供,galera cluster会自动拉取在线节点数据,集群最终会变为一致;
12.3.5.2. PXC的局限和劣势
复制只支持InnoDB 引擎,其他存储引擎的更改不复制
写入效率取决于节点中最慢的一台
12.3.5.3. Percona XtraDB Cluster 的一些使用限制(PXC 5.7)
Percona XtraDB Cluster有众多的优秀特性,使得mysql集群得以轻松实现。但是不要忽略了它的一些限制。如果你无法接受,或者你的应用程序或数据库(比如使用了memory引擎)对限制无法做出调整,那PXC对你而言是不合适。限制有哪些呢,下文是其描述。
转载地址:https://blog.csdn.net/leshami/article/details/79802817
1、存储引擎: 基于PXC的复制仅适用于InnoDB存储引擎。 对其他存储引擎的表,包括mysql.*表之类的系统表,任何写入都不会被复制。 那创建用户那岂不是无法同步了?关于这个问题。对于基于DDL方式的语句还是被支持的。 DDL语句使用基于语句级别的方式来实现(即不使用row模式)。 对mysql.*表的所有已DDL方式的更改都将以语句级别式进行复制。 如:CREATE USER… DDL被复制(语句级) INSERT INTO mysql.user… myisam存储引擎,不会被复制,因为非DDL语句 当然也可以配置wsrep_replicate_myisam参数实现(不建议使用)
2、不支持的查询: LOCK TABLES在多主模式中不支持UNLOCK TABLES以及LOCK TABLES 锁定功能,如GET_LOCK(),RELEASE_LOCK()等也不被支持
3、查询日志不能定向到表: 如果启用查询日志记录,则必须将日志转发到文件 使用general_log和general_log_file选择查询日志记录和日志文件名称 log_output = file # Author : Leshami # Blog : https://blog.csdn.net/leshami
4、最大事务大小: 允许的最大事务大小由wsrep_max_ws_rows和wsrep_max_ws_size变量定义 LOAD DATA INFILE方式处理每10000行提交一次。对于大的事务将被分解众多小型事务
5、集群乐观并发控制: PXC集群使用乐观并发控制,事务发出COMMIT可能仍会在该阶段中止 可以有两个事务写入相同的行并在单独的Percona XtraDB集群节点中提交,并且只有其中一个可以成功提交。 失败的将被中止。对于集群级中止,Percona XtraDB集群返回死锁错误代码: (Error: 1213 SQLSTATE: 40001 (ER_LOCK_DEADLOCK)).
6、由于可能的提交回滚,XA事务不受支持: 7、硬件配置短板限制: 整个群集的写吞吐量受最弱节点的限制。如果一个节点变慢,整个集群变慢。 如果您对稳定的高性能有要求,那么它应该由相应的硬件支持。
8、建议的最小群集大小是3个节点。第三个节点可以是仲裁者。 9、InnoDB虚假更改功能不受支持。 10、enforce_storage_engine=InnoDB与wsrep_replicate_myisam=OFF(默认)不兼容 。 11、binlog_rows_query_log_events变量不受支持。 12、高负载时避免ALTER TABLE … IMPORT / EXPORT 在集群模式下运行Percona XtraDB集群时,请避免ALTER TABLE … IMPORT / EXPORT工作负载。 如果未在所有节点上同步执行,则可能导致节点不一致。
12.3.5.4. PXC 常用端口
3306:数据库对外服务的端口号。
4444:请求SST的端口。
4567:组成员之间进行沟通的一个端口号
4568:用于传输IST。
12.3.5.5. 名词解释
SST(State Snapshot Transfer): 全量传输
IST(Incremental state Transfer):增量传输