Percona XtraDB Cluster解析(转载)

介绍:

Percona 数据库是是MySQL的衍生版本,Percona XtraDB Cluster是基于Percona实现的的高可用集群 简称PXC集群;

1)集群是有节点组成的,推荐配置至少3个节点,但是也可以运行在2个节点上。
2)每个节点都是普通的mysql/percona服务器,可以将现有的数据库服务器组成集群,反之,也可以将集群拆分成单独的服务器。
3)每个节点都包含完整的数据副本。
PXC集群主要由两部分组成:Percona Server with XtraDB和Write Set Replication patches(使用了Galera library,一个通用的用于事务型应用的同步、多主复制插件)

特性:

1)同步复制,事务要么在所有节点提交或不提交。
2)多主复制,可以在任意节点进行写操作。
3)在从服务器上并行应用事件,真正意义上的并行复制。
4)节点自动配置,数据一致性,不再是异步复制。
PXC最大的优势:强一致性、无同步延迟

优点:

1.服务高可用;
2.数据同步复制(并发复制),几乎无延迟;
3.多个可同时读写节点,可实现写扩展,不过最好事先进行分库分表,让各个节点分别写不同的表或者库,避免让galera解决数据冲突;
4.新节点可以自动部署,部署操作简单;
5.数据严格一致性,尤其适合电商类应用;
6.完全兼容MySQL;
不足之处(也是我们后续要面对的问题):
a.只支持InnoDB引擎;当前版本(5.6.20)的复制只支持InnoDB引擎,其他存储引擎的更改不复制。然而,DDL(Data Definition Language) 语句在statement级别
被复制,并且,对mysql.*表的更改会基于此被复制。例如CREATE USER...语句会被复制,但是 INSERT INTO mysql.user...语句则不会。
(也可以通过wsrep_replicate_myisam参数开启myisam引擎的复制,但这是一个实验性的参数)。
b.PXC集群一致性控制机制,事有可能被终止,原因如下:集群允许在两个节点上同时执行操作同一行的两个事务,但是只有一个能执行成功,另一个会被终止,集群会给被终止的
客户端返回死锁错误(Error: 1213 SQLSTATE: 40001 (ER_LOCK_DEADLOCK)).
c.写入效率取决于节点中最弱的一台,因为PXC集群采用的是强一致性原则,一个更改操作在所有节点都成功才算执行成功。
d.所有表都要有主键;
e.不支持LOCK TABLE等显式锁操作;
f.锁冲突、死锁问题相对更多;
g.不支持XA;
h.集群吞吐量/性能取决于短板;
i.新加入节点采用SST时代价高;
j.存在写扩大问题;
k.如果并发事务量很大的话,建议采用InfiniBand网络,降低网络延迟;
事实上,采用PXC的主要目的是解决数据的一致性问题,高可用是顺带实现的。因为PXC存在写扩大以及短板效应,并发效率会有较大损失,类似semi sync replication机制。

工作原理:

客户端执行dml将操作发给Sever ,Sever的native进程进行处理,客户端发起commit时,Server 将数据同步这个Cluster Group,每个节点并记录GTID,然后其他Server 接受数据并验证通过后执行apply_cb commit_cb处理,若通过执行commit_cb,若没有通过则回滚。

运行端口分布

PXC会使用大概是4个端口号
3306:数据库对外服务的端口号
4444:请求SST SST: 指数据一个镜象传输 xtrabackup , rsync ,mysqldump 
4567: 组成员之间进行沟通的一个端口号
4568: 传输IST用的。相对于SST来说的一个增量
posted @ 2017-11-23 16:03  91King  阅读(1297)  评论(0)    收藏  举报