Percona XtraDB Cluster(下称PXC)高可用集群支持任意节点在运行期间的重启,升级或者意外宕机,即它解决了单点故障问题。那在这个意外宕机或者重启期间,该节点丢失的数据如何再次进行同步呢?本文介绍了在节点故障和重启PXC如何实现高可用以及状态快照传输的几种方法优缺点。

一、高可用

在具有3个节点的基本设置中,如果您关闭任何节点,Percona XtraDB集群将继续运行。在任何时候,您都可以关闭任何节点来执行维护或进行配置更改。即使在非计划的情况下(如节点崩溃或者通过网络无法使用),Percona XtraDB集群将继续工作,您将能够在工作节点上运行查询。

如果在节点关闭期间数据发生更改,则节点在再次加入群集时可以使用两个选项:

  状态快照传输State Snapshot Transfer(SST),即将所有数据从一个节点复制到另一个时。

  通常在新节点加入集群并从现有节点接收所有数据时使用SST。Percona XtraDB集群中有三种可用的SST方法:

    mysqldump
    rsync
    xtrabackup

  mysqldump与rsync的缺点是,当数据正在被复制的时候,您的集群状态将变为只读(这2个SST方式使用了FLUSH TABLES WITH READ LOCK)

  使用SST xtrabackup方式,在整个同步过程中,不需要读锁(READ LOCK),仅用于同步.frm文件(与常规备份相同)。

  增量状态传输Incremental State Transfer(IST)是指仅将增量更改从一个节点复制到另一个节点时。

  即使没有将群集锁定在只读状态,SST可能会影响并干扰服务的正常运行。 IST可以避免这种情况。 如果某个节点短时间内关闭,它能够获取仅仅发生故障时刻的更改。 IST是在节点上使用缓存机制来实现。 每个节点都包含一个高速缓存,最后N次更改的环形缓冲区(大小可配置),并且该节点能够传输该高速缓存的一部分。 显然,只有当传输所需的变化量小于N时才能完成IST。如果它超过N,那么加入节点必须执行SST。

可以使用以下命令监视节点的当前状态:

SHOW STATUS LIKE ‘wsrep_local_state_comment’ ;
当一个节点处于状态Synced (6)时,它是集群的一部分并可以对外提供服务

二、状态快照传输

状态快照传输(SST)是从一个节点(捐献者)到加入节点(加入者)的完整数据拷贝。当新节点加入群集时使用它。为了与群集同步,新节点必须从已经是群集一部分的节点接收数据。

Percona XtraDB集群中有三种可用的SST方法:

  mysqldump
  rsync
  xtrabackup

mysqldump和rsync缺点是捐献节点变为READ-ONLY当数据被复制时。另一方面,Xtrabackup SST使用备份锁定,这意味着Galera提供程序不会像FTWRL(带有读锁的刷新表)那样暂停。SST方法可以使用wsrep_sst_method变量进行配置。

注意

如果gcs.sync_donor变量设置为Yes (默认为No),那么如果捐献节点被SST阻塞,则整个集群将被阻塞。

1、选择SST捐献节点

如果没有可用的节点可以安全地执行增量状态传输(IST),则群集默认为SST。
如果有可用的节点可以执行IST,则集群首选远程节点上的本地节点作为捐献节点。
如果没有本地节点可用于执行IST,则群集将选择一个远程节点作为捐献节点。
如果有多个本地和远程节点可以执行IST,则群集将选择最高seqno的节点作为捐献节点。

2、使用Percona Xtrabackup

默认的SST方法是使用Percona XtraBackup的xtrabackup-v2。这是利用备份锁的最少阻塞方法。XtraBackup在捐献节点上本地运行,因此在捐献节点上设置正确的用户凭证非常重要。为了让Percona XtraDB集群使用XtraBackup执行SST,需要在wsrep_sst_auth变量中设置用于连接到捐献节点的证书。除了凭证之外,还需要在服务器配置文件my.cnf中指定datadir,否则传输过程将失败。

有关所需凭据的更多信息,请参阅XtraBackup手册。

要测试凭据是否可用,请在捐献节点上使用wsrep_sst_auth变量中指定的用户名和密码运行innobackupex。例如,如果值wsrep_sst_auth是root:Passw0rd,在innobackupex命令应该是这样的:

innobackupex –user = root –password = Passw0rd /tmp/
Percona XtraBackup SST配置文档中提供了有关此方法的详细信息。

3、使用mysqldump

此方法使用标准mysqldump实用程序来转储来自捐献节点的所有数据库,并将其导入加入节点。要使此方法有效,wsrep_sst_auth需要使用根证书设置变量。这种方法是最慢的,它在SST期间执行全局锁定,这阻止了对捐献节点的写入。

用于此方法的脚本是/usr/bin/wsrep_sst_mysqldump ,它包含在Percona XtraDB Cluster二进制包中。

4、运用 rsync

此方法使用rsync将文件从捐献节点复制到加入节点。在某些情况下,这可能比使用XtraBackup更快,但它需要一个全局数据锁定,这将阻止写入到捐献节点。此方法不需要在wsrep_sst_auth变量中设置根凭证。

用于此方法的脚本是/usr/bin/wsrep_sst_rsync ,它包含在Percona XtraDB Cluster二进制包中。

5、表空间不在数据目录中的表的SST

例如:

CREATE TABLE t1 (c1 INT PRIMARY KEY ) DATA DIRECTORY = ‘/alternative/directory’ ;

结果取决于SST方法:

SST使用 rsync

SST会报告成功,但表格的数据不会被复制,因为rsync只是复制文件。您将无法访问joiner节点上的表:
mysql> select * from t1;
ERROR 1812 (HY000): Tablespace is missing for table sbtest.t1.

SST 使用mysqldump
按预期工作。如果文件不存在,它将被创建。否则,它将尝试使用该文件(如果该文件没有预期的格式,则返回错误)。

使用Percona XtraBackup的SST

XtraBackup会将表格还原到joiner节点上的相同位置。如果目标目录不存在,它将被创建。如果目标文件已经存在,则会返回错误,因为XtraBackup无法清除不在数据目录中的表空间。

三、更多参考

https://www.percona.com/doc/percona-xtradb-cluster/LATEST/features/highavailability.html
https://www.percona.com/doc/percona-xtradb-cluster/LATEST/manual/state_snapshot_transfer.html

---------------------
作者:Leshami
来源:CSDN
原文:https://blog.csdn.net/leshami/article/details/79908071?utm_source=copy
版权声明:本文为博主原创文章,转载请附上博文链接!

Percona XtraDB Cluster高可用与状态快照传输(PXC 5.7 )的更多相关文章

  1. 部署Percona XtraDB Cluster高可用和多Master集群

    http://www.it165.net/admin/html/201401/2306.html http://www.oschina.net/p/percona-xtradb-cluster/ ht ...

  2. MySQL高可用方案-PXC(Percona XtraDB Cluster)环境部署详解

    MySQL高可用方案-PXC(Percona XtraDB Cluster)环境部署详解 Percona XtraDB Cluster简称PXC.Percona Xtradb Cluster的实现是在 ...

  3. mysql高可用之PXC(Percona XtraDB Cluster)

    简介 Percona XtraDB Cluster是MySQL高可用性和可扩展性的解决方案,Percona XtraDB Cluster提供的特性如下: 1).同步复制,事务要么在所有节点提交或不提交 ...

  4. 搭建高可用mysql系列(1)-- Percona XtraDB Cluster介绍

    Percona XtraDB Cluster (下文简称PXC)是一个开源的mysql 高可用解决方案.它将Percona Server和Percona XtraBackup与Galera库集成在一起 ...

  5. Galera Cluster 实现mysql的高可用 (Percona XtraDB Cluster)

    Galera Cluster 实现mysql的高可用 (Percona XtraDB Cluster) # 基础搭建 # 设备:三台主机 192.168.47.101 192.168.47.102 1 ...

  6. 搭建高可用mysql系列(2)-- Percona XtraDB Cluster 安装

    本文主要介绍在 centos 下 Percona XtraDB Cluster(下文简称PXC) 的安装, 个人的系统版本信息如下: [root@c2-d09 worker]# more /etc/r ...

  7. 15、高可用 PXC(percona xtradb cluster) 搭建

    安装环境: 集群名 pxc_lk 节点1: 192.168.1.20 节点2: 192.168.1.21 节点3: 192.168.1.22   所有节点安装 wget http://www.perc ...

  8. PXC5.7(Percona XtraDB Cluster)+HAproxy+Keepalived 集群部署

    Percona-XtraDB-Cluster+Haproxy 搭建集群环境 环境准备及服务器信息: 配置防火墙 firewall-cmd --add-port=3306/tcp --permanent ...

  9. Percona XtraDB Cluster集群

    官网参考地址: https://www.percona.com/doc/percona-xtradb-cluster/LATEST/configure.html 前期准备: 都用的root权限或使用s ...

随机推荐

  1. <Maven><Dependency><Conflict><Could not resolve>

    maven conflict solution: scenerio: Runtime Error: ``` java.lang.SecurityException: class "javax ...

  2. ios scrollView代理的用法

    // // ZQRViewController.m // 03-图片缩放 // // Created by apple on 17-08-25. // #import "ZQRViewCon ...

  3. kbmMWUnidac直接SQLServer

    UniDAC支持SQLServer直联了,当时就测试过在kbmMW中用直联方式,结果不尽人意,kbmMWServer在执行sql时会出地址错误,就一直没有进一步测试.今天听xalion说,是因为当直联 ...

  4. ubantu 常用命令

    1.显示日期与时间的命令:date 2.显示日历的命令:cal 3.简单好用的计算器:bc 4.热键“命令补全或文件补齐”:Tab 5.热键“中断目前程序”:Ctrl+C 6.热键“键盘输入结束(En ...

  5. scrapy中自动补全url

    url = "https:" + url 或者url = response.urljoin(url) #这里代表的是自动补全url

  6. python day07作业答案

    1. sum=0 a=input() for i in a: sum=sum+int(i)**3 if sum==int(a): print('水仙数') 2. lst=[100,2,6,9,1,10 ...

  7. JAVA中的Set

    Set中存放的是没有重复的数据,下说记录一下使用中的小细节. 1.HashSet 区分大小写: Set<String> set1 = new HashSet<String>() ...

  8. String中对字符串进行操作的一些方法

    1.substring 作用:根据字符串下标进行截取 public class StrTest { public static void main(String[] args) { String a ...

  9. 微信小程序中时间转化为时间戳(安卓和苹果兼容性)

    在IOS中时间显示NAN,后来才知道是由于安卓和IOS时间解析时间的时间格式不一致: 在安卓机中2018-06-21 16:00:21 IOS识别的格式是 2018/06/21: 所以在处理IOS机器 ...

  10. logminer实战之生产环境写入数据字典,dg环境查询拷贝日志,测试环境进行挖掘,输出结果

    应客户需要,对某一天的日志进行挖掘,分析日均归档日志切换数量20增长至40的原因,是什么表的dml操作导致的日志量剧增,最终定位某个应用(需要客户自己进行甄别) 操作说明及介绍: 1.客户10.2.0 ...