数据同步一致性_MySQL数据库之Haproxy+PXC集群搭建(上)

本文介绍了基于Galera协议的Percona XtraDB Cluster(PXC)集群,强调其数据一致性、实时同步和高可用性。PXC采用多主复制,支持并发复制,能实现服务无缝切换,但受限于仅支持InnoDB引擎、存在写扩大问题。对比了PXC与传统Replication的区别,并提及PXC常用端口的用途。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

概述

今天主要分享一下pxc方面内容,下面先看下mysql数据库pxc集群理论方面内容..


1、基于Galere协议的高可用方案:pxc

Galera是Codership提供的多主数据同步复制机制,可以实现多个节点间的数据同步复制以及读写,并且可保障数据库的服务高可用及数据一致性。

基于Galera的高可用方案主要有MariaDB Galera Cluster和Percona XtraDB Cluster(简称PXC),目前PXC用的会比较多一些。

mariadb的集群原理跟PXC一样,maridb-cluster其实就是PXC,两者原理是一样的。


2、PXC 简介

pxc是一套 MySQL 高可用集群解决方案,与传统的基于主从复制模式的集群架构相比 PXC 最突出特点就是解决了诟病已久的数据复制延迟问题,基本上可以达到实时同步。而且节点与节点之间,他们相互的关系是对等的。PXC 最关注的是数据的一致性,对待事物的行为时,要么在所有节点上执行,要么都不执行,它的实现机制决定了它对待一致性的行为非常严格,这也能非常完美的保证 MySQL 集群的数据一致性;

Percona XtraDB Cluster,与MGR的多主模式很相似,但是采用的协议与实现细节不同,PXC为Percona MySQL分支集群。

相比社区版本MySQL,集群性能更佳稳定,更为成熟,如果不想投入较多维护成本,可以采用该分支版本集群,缺点就是无法与官方发布统一,一些官方新特性无法使用。

PXC集群主要由两部分组成:Percona Server with XtraDB和Write Set Replication patches(使用了Galera library,一个通用的用于事务型应用的同步、多主复制插件)。

注意一半以上的节点宕机时pxc集群就无法使用了。

ce851ca6293c47cfa993dfb2bc0f427e.png

3、PXC特性

PXC集群中,存储引擎使用的是percona xtrabackup,集群架构采用的是Galera Cluster,一种多主结构的集群。所以要安装percona存储引擎与 Galera依赖。

一般来说,中小型规模的时候,采用这种架构是最省事的。两个节点可以采用简单的一主一从模式,或者双主模式,并且放置于同一个VLAN中,在master节点发生故障后,利用keepalived/heartbeat的高可用机制实现快速切换到slave节点。

pxc具备以下特性:

  • 完全兼容 MySQL。
  • 同步复制,事务要么在所有节点提交或不提交。
  • 多主复制,可以在任意节点进行写操作。
  • 在从服务器上并行应用事件,真正意义上的并行复制。
  • 节点自动配置,数据一致性,不再是异步复制。
  • 故障切换:因为支持多点写入,所以在出现数据库故障时可以很容易的进行故障切换。
  • 自动节点克隆:在新增节点或停机维护时,增量数据或基础数据不需要人工手动备份提供,galera cluster会自动拉取在线节点数据,集群最终会变为一致;

PXC最大的优势:强一致性、无同步延迟


4、PXC的优缺点

4.1、PXC的优点

1)服务高可用;

2)数据同步复制(并发复制),几乎无延迟;

3)多个可同时读写节点,可实现写扩展,不过最好事先进行分库分表,让各个节点分别写不同的表或者库,避免让galera解决数据冲突;

4)新节点可以自动部署,部署操作简单;

5)数据严格一致性,尤其适合电商类应用;

6)完全兼容MySQL;

4.2、pxc缺点

虽然PXC有这么多好处,但也有些局限性:

1)只支持InnoDB引擎;当前版本(5.6.20)的复制只支持InnoDB引擎,其他存储引擎的更改不复制。然而,DDL(Data Definition Language) 语句在statement级别被复制,并且,对mysql.*表的更改会基于此被复制。例如CREATE USER...语句会被复制,但是 INSERT INTO mysql.user...语句则不会。

(也可以通过wsrep_replicate_myisam参数开启myisam引擎的复制,但这是一个实验性的参数)。

2)PXC集群一致性控制机制,事有可能被终止,原因如下:集群允许在两个节点上同时执行操作同一行的两个事务,但是只有一个能执行成功,另一个会被终止,集群会给被终止的

客户端返回死锁错误(Error: 1213 SQLSTATE: 40001 (ER_LOCK_DEADLOCK)).

3)写入效率取决于节点中最弱的一台,因为PXC集群采用的是强一致性原则,一个更改操作在所有节点都成功才算执行成功。

4)所有表都要有主键;

5)不支持LOCK TABLE等显式锁操作;

6)锁冲突、死锁问题相对更多;

7)不支持XA;

8)集群吞吐量/性能取决于短板;

9)新加入节点采用SST时代价高;

10)存在写扩大问题;

11)如果并发事务量很大的话,建议采用InfiniBand网络,降低网络延迟;

事实上,采用PXC的主要目的是解决数据的一致性问题,高可用是顺带实现的。因为PXC存在写扩大以及短板效应,并发效率会有较大损失,类似semi sync replication机制。

5、 PXC与Replication的区别

mysql数据库常见的集群方案一般有replication和PXC集群两种,方案大致如下:

6e80ac18acdf8032d12b42d4bb24bb0a.png

两个方案优劣对比如下:

a8eccc7ab057b7a3df2cacbe1b04b2ff.png

6、PXC 常用端口

  • 3306:数据库对外服务的端口号。
  • 4444:请求SST的端口。
  • 4567:组成员之间进行沟通的一个端口号
  • 4568:用于传输IST。

名词解释:

  • WS:write set写数据集,写/更新事务
  • IST:Incremental State Transfer 增量同步
  • SST:State Snapshot Transfe 全量同步。
  • SST支持的方法有:mysqldump,rsync ,xtrabackup 。
    mysqldump,rsync同步需要READ LOCK, (SST applies FLUSH TABLES WITH READ LOCK command)
  • xtrabackup 在整个同步数据过程中不需要READ LOCK。
    配置参数:wsrep_sst_method=xtrabackup-v2
  • UUID:节点状态改变及顺序的唯一标识
  • GTID:Global Transaction ID,由UUID和sequence number偏移量组成。wsrep api中定义的集群内部全局事务id,用于记录集群中发生状态改变的唯一标识以及队列中的偏移量。
  • WSRWP API:在DBMS库和wsrep provider之间提供接口

后面再分享下HAproxy和PXC集群搭建方面的内容,感兴趣的朋友可以关注下!

663319afd4c32ddfbb21968e8433bde6.png
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值