MySQL高可用架构PXC(Percona XtraDB Cluster)

Percona XtraDB Cluster是MySQL高可用性和可扩展性的解决方案,Percona XtraDB Cluster提供的特性如下:

1).同步复制,事务要么在所有节点提交或不提交。

2).多主复制,可以在任意节点进行写操作。

3).在从服务器上并行应用事件,真正意义上的并行复制。

4).节点自动配置。

5).数据一致性,不再是异步复制。

Percona XtraDB Cluster完全兼容MySQL和Percona Server,表现在:

1).数据的兼容性

2).应用程序的兼容性:无需更改应用程序

1).集群是有节点组成的,推荐配置至少3个节点,但是也可以运行在2个节点上。

2).每个节点都是普通的mysql/percona服务器,可以将现有的数据库服务器组成集群,反之,也可以将集群拆分成单独的服务器。

3).每个节点都包含完整的数据副本。

优点如下:

1).当执行一个查询时,在本地节点上执行。因为所有数据都在本地,无需远程访问。

2).无需集中管理。可以在任何时间点失去任何节点,但是集群将照常工作,不受影响。

3).良好的读负载扩展,任意节点都可以查询。

缺点如下:

1).加入新节点,开销大。需要复制完整的数据。

2).不能有效的解决写缩放问题,所有的写操作都将发生在所有节点上。

3).有多少个节点就有多少重复的数据。

架构图如下:

MySQL高可用架构PXC(Percona XtraDB Cluster)

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,事务型应用下的通用的多主同步复制插件。

Galera 2.x新特性有:

1).IST(Incremental State Transfer)增量状态传输。对于WAN特别有用。

2).RSU(Rolling Schema Update)旋转更新架构。不会阻止对表进行操作。

局限性

1).目前的复制仅仅支持InnoDB存储引擎。任何写入其他引擎的表,包括mysql.*表将不会复制。但是DDL语句会被复制的,因此创建用户将会被复制,但是insert into mysql.user…将不会被复制的。

2).DELETE操作不支持没有主键的表。没有主键的表在不同的节点顺序将不同,如果执行SELECT…LIMIT… 将出现不同的结果集。

3).在多主环境下LOCK/UNLOCK TABLES不支持。以及锁函数GET_LOCK(), RELEASE_LOCK()…

4).查询日志不能保存在表中。如果开启查询日志,只能保存到文件中。

5).允许最大的事务大小由wsrep_max_ws_rows和wsrep_max_ws_size定义。任何大型操作将被拒绝。如大型的LOAD DATA操作。

6).由于集群是乐观的并发控制,事务commit可能在该阶段中止。如果有两个事务向在集群中不同的节点向同一行写入并提交,失败的节点将中止。对于集群级别的中止,集群返回死锁错误代码(Error: 1213 SQLSTATE: 40001 (ER_LOCK_DEADLOCK)).

7).XA事务不支持,由于在提交上可能回滚。

8).整个集群的写入吞吐量是由最弱的节点限制,如果有一个节点变得缓慢,那么整个集群将是缓慢的。为了稳定的高性能要求,所有的节点应使用统一的硬件。

9).集群节点建议最少3个。2个也可以运行,但是官方不推荐这么做,因为3个节点是为了预防脑裂。

10).如果DDL语句有问题将破坏集群。建议使用pt-online-schema-change操作DDL。

通过以上的简单了解,相信大家已经有了初步认识,更加深入的内容,推荐童鞋们阅读官方文档。下面我们进行环境的搭建与测试。测试机器信息如下:

注意:Percona-XtraDB-Cluster在启动以后会额外启动端口来进行状态检测,所以请开放相应的端口,默认是4567端口。我测试环境关闭了iptables。

服务器环境信息如下:

node1    192.168.0.100

node2    192.168.0.101

node3    192.168.0.102

1.安装软件依赖包(添加repl源,再安装依赖,3台server操作一样。)

[root@node1 ~]# rpm -ivh Fedoraproject.org/pub/epel/6/x86_64/epel-release-6-8.noarch.rpm

[root@node1 ~]# yuminstallperl-IO-Socket-SSL perl-DBD-MySQL perl-Time-HiRes socat nc libaio rsync -y

2.安装xtrabackup(PXC同步数据需要用到,为什么使用xtrabackup?自己查询官方文档)

内容版权声明:除非注明,否则皆为本站原创文章。

转载注明出处:https://www.heiqu.com/9e6e5d32b2c1f66b1c4b8c0b1f01d320.html