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
版权声明:本文为博主原创文章,转载请附上博文链接!

最新文章

  1. GCC的gcc和g++区别
  2. 【Bugly干货】关于 Android N 那些你不知道的事儿
  3. 【07_226】Invert Binary Tree
  4. 出现Bad command or the file name的原因
  5. postfix之dovecot
  6. Java笔记(十)……面向对象II封装(Encapsulation)
  7. PHP中的session会话创建打印释放销毁;
  8. MongoDB 介绍及Windows下安装
  9. soapUI通过groovy脚本设置超时时间
  10. 关于python的元类
  11. 创建简单的MVC项目
  12. redis之sentinel概述
  13. 兼容的Ajax
  14. Jenkins安装后无法安装插件
  15. Linux ansible 常用模块二
  16. Mcafee(麦咖啡) 无法升级的解决办法(威流验证)
  17. shell中下载最新版本或指定版本的办法(Dockerfile 中通用)
  18. 解决镜像无法删除的问题multiple repositories
  19. Android studio button 按钮 四种绑定事件的方法
  20. hadoop命令运行,去除:WARN util.NativeCodeLoader: Unable to load native-hadoop library for your platform 警告

热门文章

  1. C语言获取系统时间的几种方式
  2. system的消息队列实例
  3. Codeforces Round #485 (Div. 2) C题求三元组(思维)
  4. Python 基础关于编码
  5. MySql笔记之数据备份与还原
  6. binarysearchtree
  7. Microsoft Project 常用快捷键
  8. 【webdriver自动化】使用unittest实现自动登录163邮箱然后新建一个联系人
  9. Gauss error function
  10. Git版本退回和修改