This is a read-only copy of the MariaDB Knowledgebase generated on 2024-12-03. For the latest, interactive version please visit https://mariadb.com/kb/.

xtrabackup-v2 SST方法

Percona XtraBackup is not supported in MariaDB. Mariabackup is the recommended backup method to use instead of Percona XtraBackup. See Percona XtraBackup Overview: Compatibility with MariaDB for more information.

xtrabackup-v2 SST 方法使用 Percona XtraBackup 工具执行 SST。这是一种不会阻塞捐赠节点的方法。

请注意,如果您使用 xtrabackup-v2 SST 方法,则还需要在服务器上安装 socat。这是将备份从捐赠节点流式传输到加入者节点所需的。

由于 Percona XtraBackup 是第三方产品,因此可能需要额外的安装和配置。有关供应商的信息,请参阅 Percona 的 xtrabackup SST 文档

选择 Percona XtraBackup 进行 SST

要使用 xtrabackup-v2 SST 方法,必须在捐赠节点和加入者节点上设置 wsrep_sst_method=xtrabackup-v2。可以使用 SET GLOBAL 在您打算成为 SST 捐赠者的节点上动态更改它。例如:

SET GLOBAL wsrep_sst_method='xtrabackup-v2';

可以在启动节点之前的服务器 option group 中的 option file 中设置它:

[mariadb]
...
wsrep_sst_method = xtrabackup-v2

为了使 SST 正常工作,捐赠节点和加入者节点必须使用相同的 SST 方法。因此,建议在所有节点上将 wsrep_sst_method 设置为相同的值,因为任何节点通常都会成为捐赠者或加入者节点。

认证和权限

要使用 xtrabackup-v2 SST 方法,Percona XtraBackup 需要能够在捐赠节点上进行本地身份验证,以便它可以创建备份并流式传输到加入者。您可以通过设置 wsrep_sst_auth 系统变量来告诉捐赠节点使用哪个用户名和密码。它可以在您打算成为 SST 捐赠者的节点上使用 SET GLOBAL 命令进行动态更改。例如:

SET GLOBAL wsrep_sst_auth = 'xtrabackup:mypassword';

它也可以在服务器 选项组 中的 选项文件 中设置,以在启动节点之前进行设置:

[mariadb]
...
wsrep_sst_auth = xtrabackup:mypassword

某些 认证插件 不需要密码。例如,unix_socketgssapi 认证插件不需要密码。如果您使用的是不需要密码即可登录的用户帐户,则可以将 wsrep_sst_auth 的密码组件留空。例如:

[mariadb]
...
wsrep_sst_auth = xtrabackup:

执行 SST 的备份用户帐户需要具有 与 Percona XtraBackup 相同的权限,即 RELOADPROCESSLOCK TABLESREPLICATION CLIENT 全局权限。为了安全起见,您应该确保在集群中的每个节点上都设置了这些权限。Percona XtraBackup 在捐赠节点上本地连接以执行备份,因此以下用户应该足够:

CREATE USER 'xtrabackup'@'localhost' IDENTIFIED BY 'mypassword';
GRANT RELOAD, PROCESS, LOCK TABLES, REPLICATION CLIENT ON *.* TO 'xtrabackup'@'localhost';

无密码身份验证 - Unix Socket

可以使用 unix_socket 身份验证插件为执行 SST 的用户帐户提供身份验证。这将提供不需要在 wsrep_sst_auth 中配置明文密码的好处。

用户帐户必须具有与运行 mysqld 进程的操作系统用户帐户相同的名称。在许多系统上,这是配置为 user 选项的用户帐户,并且通常默认为 mysql

例如,如果已经安装了 unix_socket 身份验证插件,则可以执行以下操作以创建用户帐户:

CREATE USER 'mysql'@'localhost' IDENTIFIED VIA unix_socket;
GRANT RELOAD, PROCESS, LOCK TABLES, REPLICATION CLIENT ON *.* TO 'mysql'@'localhost';

然后,要配置 wsrep_sst_auth,可以在启动节点之前的服务器 选项组 中的 选项文件 中设置以下内容:

[mariadb]
...
wsrep_sst_auth = mysql:

无密码身份验证 - GSSAPI

可以使用 gssapi 身份验证插件为执行 SST 的用户帐户提供身份验证。这将提供不需要在 wsrep_sst_auth 中配置明文密码的好处。

必须先执行以下步骤:

例如,您可以执行以下操作以在 MariaDB 中创建用户帐户:

CREATE USER 'xtrabackup'@'localhost' IDENTIFIED VIA gssapi;
GRANT RELOAD, PROCESS, LOCK TABLES, REPLICATION CLIENT ON *.* TO 'xtrabackup'@'localhost';

然后,要配置 wsrep_sst_auth,可以在启动节点之前的服务器 选项组 中的 选项文件 中设置以下内容:

[mariadb]
...
wsrep_sst_auth = xtrabackup:

选择捐赠节点

使用Percona XtraBackup创建SST的备份时,XtraBackup在备份结束时需要系统范围锁定。这是通过FLUSH TABLES WITH READ LOCK完成的。

如果集群中的特定节点通过接收所有应用程序的写入流量而充当primary节点,则通常不应将此节点用作捐赠节点,因为系统范围锁定可能会干扰应用程序。在这种情况下,您可以通过设置wsrep_sst_donor系统变量来定义一个或多个首选捐赠节点。

例如,假设我们有一个5节点集群,其中节点为node1node2node3node4node5,并且假设node1充当primary节点。可以通过在启动节点之前在服务器option group中的option file中设置以下内容来配置node2的首选捐赠节点:

[mariadb]
...
wsrep_sst_donor=node3,node4,node5,

尾随逗号告诉服务器允许在首选捐赠者不可用时使用任何其他节点作为捐赠者。因此,如果集群中只剩下node1,尾随逗号允许将其用作捐赠节点。

Socat依赖项

在SST过程中,捐赠节点使用socat将备份流式传输到加入者节点。然后加入者节点在恢复之前准备备份。为使其正常工作,必须在捐赠节点和加入者节点上都安装socat实用程序。否则,MariaDB错误日志将包含类似于以下内容的错误:

WSREP_SST: [ERROR] socat not found in path: /usr/sbin:/sbin:/usr//bin:/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin (20180122 14:55:32.993)

在RHEL/CentOS上安装Socat

在RHEL/CentOS上,可以从Extra Packages for Enterprise Linux (EPEL)存储库安装socat

TLS

此SST方法支持三种不同的TLS方法。可以通过在MariaDB配置文件的[sst]部分中设置encrypt选项来选择特定方法。选项如下:

  • 使用内置于socat中的OpenSSL加密的TLS(encrypt=2
  • 使用具有与Galera兼容的证书和密钥的OpenSSL加密的TLS(encrypt=3
  • 使用具有与MariaDB兼容的证书和密钥的OpenSSL加密的TLS(encrypt=4

请注意,encrypt=1是指已弃用并删除的TLS加密方法。

使用内置于Socat的OpenSSL加密进行TLS

要生成与此加密方法兼容的密钥,可以遵循这些说明

例如:

  • 首先,生成密钥和证书:
FILENAME=sst
openssl genrsa -out $FILENAME.key 1024
openssl req -new -key $FILENAME.key -x509 -days 3653 -out $FILENAME.crt
cat $FILENAME.key $FILENAME.crt >$FILENAME.pem
chmod 600 $FILENAME.key $FILENAME.pem
  • 在某些系统上,您还必须将dhparams添加到证书中:
openssl dhparam -out dhparams.pem 2048
cat dhparams.pem >> sst.pem
  • 然后将证书和密钥复制到集群中的所有节点。
  • 然后,在集群中的所有节点上配置以下内容:
[sst]
encrypt=2
tca=/etc/my.cnf.d/certificates/sst.crt
tcert=/etc/my.cnf.d/certificates/sst.pem

但是用适用于您系统的路径替换路径。

这应该允许加密您的SST。

使用 OpenSSL 加密和 Galera 兼容证书和密钥的 TLS

要生成与此加密方法兼容的密钥,您可以按照这些说明进行操作。

例如:

  • 首先,生成密钥和证书:
# CA
openssl genrsa 2048 > ca-key.pem
openssl req -new -x509 -nodes -days 365000 \
-key ca-key.pem -out ca-cert.pem
 
# server1
openssl req -newkey rsa:2048 -days 365000 \
-nodes -keyout server1-key.pem -out server1-req.pem
openssl rsa -in server1-key.pem -out server1-key.pem
openssl x509 -req -in server1-req.pem -days 365000 \
-CA ca-cert.pem -CAkey ca-key.pem -set_serial 01 \
-out server1-cert.pem
  • 然后,在群集中的所有节点上复制证书和密钥。
  • 然后,在群集中的所有节点上配置以下内容:
[sst]
encrypt=3
tkey=/etc/my.cnf.d/certificates/server1-key.pem
tcert=/etc/my.cnf.d/certificates/server1-cert.pem

但用适用于您系统的路径替换这些路径。

这样应该可以加密您的 SST。

使用 OpenSSL 加密和 MariaDB 兼容证书和密钥的 TLS

要生成与此加密方法兼容的密钥,您可以按照这些说明进行操作。

例如:

  • 首先,生成密钥和证书:
# CA
openssl genrsa 2048 > ca-key.pem
openssl req -new -x509 -nodes -days 365000 \
-key ca-key.pem -out ca-cert.pem
 
# server1
openssl req -newkey rsa:2048 -days 365000 \
-nodes -keyout server1-key.pem -out server1-req.pem
openssl rsa -in server1-key.pem -out server1-key.pem
openssl x509 -req -in server1-req.pem -days 365000 \
-CA ca-cert.pem -CAkey ca-key.pem -set_serial 01 \
-out server1-cert.pem
  • 然后,在群集中的所有节点上复制证书和密钥。
  • 然后,在群集中的所有节点上配置以下内容:
[sst]
encrypt=4
ssl-ca=/etc/my.cnf.d/certificates/ca-cert.pem
ssl-cert=/etc/my.cnf.d/certificates/server1-cert.pem
ssl-key=/etc/my.cnf.d/certificates/server1-key.pem

但用适用于您系统的路径替换这些路径。

这样应该可以加密您的 SST。

日志

xtrabackup-v2 SST 方法有自己的日志记录,不在 MariaDB Server 日志记录之外。

记录到 SST 日志

默认情况下,在捐赠节点上,它记录到innobackup.backup.log。此日志文件位于datadir中。

默认情况下,在加入节点上,它记录到innobackup.prepare.loginnobackup.move.log。这些日志文件位于.sst目录中,该目录是位于datadir内部的隐藏目录。

每个后续 SST 都会覆盖这些日志文件,因此如果 SST 失败,最好在启动另一个 SST 之前将它们复制到安全位置,以便可以分析日志文件。请参见 MDEV-17973

将日志记录到 Syslog

您可以通过在 选项文件[sst] #option-groups 中设置以下内容,将 SST 日志重定向到 syslog:

[sst]
sst-syslog=1

您还可以通过在 选项文件[mysqld_safe] #option-groups 中设置以下内容,将 SST 日志重定向到 syslog:

[mysqld_safe]
syslog

使用 IPv6 地址执行 SST

如果您正在使用 IPv6 地址执行 Percona XtraBackup SST,则需要将 socat 实用程序传递给 pf=ip6 选项。这可以通过在 选项文件[sst] #option-groups 中设置 sockopt 选项来完成。例如:

[sst]
sockopt=",pf=ip6"

有关更多信息,请参见 MDEV-18797

使用 Percona XtraBackup 手动执行 SST

在某些情况下,如果 Galera Cluster 的自动 SST 反复失败,则执行“手动 SST”可能会有所帮助。请参见以下页面以了解如何执行此操作:

参见

Content reproduced on this site is the property of its respective owners, and this content is not reviewed in advance by MariaDB. The views, information and opinions expressed by this content do not necessarily represent those of MariaDB or any other party.