PXC集群介绍

学习目标:

  • 掌握PXC集群MySQL方案的原理
  • 掌握PXC集群的强一致性
  • 掌握PXC集群的高可用方案

首先对于单机单节点数据库来说,在高并发的情况下性能会变得很差。下面是一段性能测试代码:

1
2
3
4
5
6
7
mysqlslap -hlocalhost -uroot -pabc123456 -P3306 
--concurrency=5000 --iterations=1 --auto-generate-sql
--auto-generate-sql-load-type=mixed
--auto-generate-sql-add-autoincrement
--engine=innodb
--number-of-queries=5000
--debug-info

我们可以按照不同指标执行压力测试。

参数解释:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
-concurrency 代表并发数量,多个可以用逗号隔开,concurrency=10,50,100, 并发连接线程数分别是10、50、100个并发。

--engines 代表要测试的引擎,可以有多个,用分隔符隔开。

--iterations 代表要运行这些测试多少次。

--auto-generate-sql 代表用系统自己生成的SQL脚本来测试。

--auto-generate-sql-load-type 代表要测试的是读还是写还是两者混合的(read,write,update,mixed)

--number-of-queries 代表总共要运行多少次查询。每个客户运行的查询数量可以用查询总数/并发数来计算。

--debug-info 代表要额外输出CPU以及内存的相关信息。

--number-int-cols :创建测试表的 int 型字段数量

--auto-generate-sql-add-autoincrement : 代表对生成的表自动添加auto_increment列,从5.1.18版本开始

--number-char-cols 创建测试表的 char 型字段数量。

--create-schema 测试的schema,MySQL中schema也就是database。

--query 使用自定义脚本执行测试,例如可以调用自定义的一个存储过程或者sql语句来执行测试。

--only-print 如果只想打印看看SQL语句是什么,可以用这个选项。
MySQL高性能高可用集群方案

方案一:PXC集群方案

image-20180605104420124

PXC集群方案如上图所示,底层为pxc搭建MySQL集群,使用HA进行负载均衡分配查询,上层使用MyCat按照一定算法进行SQL数据切分。为什么要进行数据切分呢?(是因为当单个数据表达到两千万行之后就会出现性能瓶颈)PXC集群是以性能换取数据强一致性。

PXC(Percona XtraDB Cluster)原理:

image-20180606091946548

建议PXC使用PerconaServer

方案二:Replication集群方案

image-20180605110740607

Replication集群方案如上图所示,与PXC集群采用的强一致性不同的是Replication采用的是同步机制。这种非强一致性可能存在同步未及时(网络影响等)导致客户端查询数据不一致。

适合保存一些日志数据。

联合使用:

image-20180605111412670

我们可以将两种集群方案一起使用,高价值数据使用PXC集群,海量低价值使用Replication集群,通过MyCat切片数据。同时我们也可以使用缓存进行数据的临时存储。

PXC方案与Replication方案对比
PXC方案

image-20180606092348871

PXC的数据同步是双向的,在任何一个节点写入数据都会同步到其他节点之中。也就是说在任何一个MySQL节点上我们可以同时读写数据。

Replication方案

image-20180606092622194

Replication的数据同步是单向的,在Master中写入数据是可以在Slave中读取,然而在Slave中写入数据是不能在Master中读取不到的。也就是说不能再一个节点同时读取数据。

同步机制示意图

image-20180606093119885

我们在一个节点中写入数据,需要根据同步机制将数据同步到其他节点,并且在其他节点成功提交事务,才算写入成功,然后第一个节点再把写入成功的结果告诉客户端。

异步复制示意图

image-20180606093551386

我们在一个节点写入数据,当提交事务成功后会返回给客户端成功,但是在同步第二个节点的时候万一出现同步失败,我们是无法从第二个节点读取到数据的。

总结:

PXC的数据强一致性是因为采用了同步复制,事务在所有集群节点要么同时提交,要么不提交。

Replication采用异步复制,无法保证数据的一致性。

知识就是财富
如果您觉得文章对您有帮助, 欢迎请我喝杯水!