zoukankan      html  css  js  c++  java
  • Percona XtraDB Cluster高可用与状态快照传输(PXC 5.7 )

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

  • 相关阅读:
    张硕组兽棋测试报告(整理——郑云飞)
    5.6任务进展情况(整理——郑云飞)
    5.5任务进展情况(整理——祁子梁)
    android-读取MediaProvider
    android-effect
    window下载android 最新源码
    android-mediaplayer播放
    android-基础编程-Notification
    android-基础编程-ViewPager
    android-glsurfaceview Activity框架程序
  • 原文地址:https://www.cnblogs.com/andy6/p/9760665.html
Copyright © 2011-2022 走看看