当心
保护备份位置并严格限制已有权访问数据库中所有数据的用户对备份的访问权限,这一点十分重要。破坏备份意味着破坏数据库。完整备份和对象级别备份都驻留在备份主机上,即存储备份和存档的计算机系统。在备份主机上,Vertica 将备份保存在特定的备份位置(目录)中。
您必须先设置备份主机,然后才能创建备份。
备份位置中的存储格式类型必须支持 fcntl lockf (POSIX) 文件锁定。
完整备份和对象级别备份都驻留在备份主机上,即存储备份和存档的计算机系统。在备份主机上,Vertica 将备份保存在特定的备份位置(目录)中。
您必须先设置备份主机,然后才能创建备份。
备份位置中的存储格式类型必须支持 fcntl lockf (POSIX) 文件锁定。
您可以使用 vbr
将数据库备份到一个或多个主机(称为备份主机),这些主机可位于数据库群集之外。
您可以使用一个或多个备份主机或单个云存储桶来备份数据库。使用 vbr
配置文件可指定群集中的每个节点应使用哪个备份主机。
在备份到本地群集之外的主机之前,先配置 vbr
要使用的目标备份位置。所用的备份主机必须满足以下条件:
可通过 SSH 从数据库群集访问。
数据库管理员帐户可执行免密码 SSH 访问。
已安装 Vertica rpm 或 Python 3.7 及 rsync 3.0.5 或更高版本。
如果使用状态防火墙,请将 tcp_keepalive_time
和 tcp_keepalive_intvl sysctl
设置配置为使用小于防火墙超时值的值。
vbr
依赖 TCP 转发将连接从数据库主机转发到备份主机。对于 copycluster 和复制任务,必须在两组主机上均启用 TCP 转发。与备份主机的 SSH 连接不需要 SSH 转发。
如果默认情况下尚未设置,请在 /etc/ssh/sshd_config 中设置 AllowTcpForwarding = Yes
,然后向每个主机上的 sshd 发送 SIGHUP 信号。有关更多信息,请参阅 Linux sshd 文档。
如果未启用 TCP 转发,则需要该转发的任务将会失败,并显示以下消息:“连接到远程主机时出错: 请检查 SSH 设置,且所有节点上均已安装相同的 Vertica 版本。(Errors connecting to remote hosts: Check SSH settings, and that the same Vertica version is installed on all nodes.)”
在单节点群集上,vbr
使用随机的大数字端口创建本地 ssh 隧道。如果将 PermitOpen
设置为限制该端口,则上述操作将会失败。注释掉 sshd_config 中的 PermitOpen
行。
为完整备份或对象级别备份创建单独的配置文件,每个配置文件采用不同的名称。此外,使用相同的节点、备份主机和目录位置对。为每个数据库指定不同的备份目录位置。
您必须先准备目标备份目录,然后 vbr
才能备份数据库。运行任务类型为 init
的 vbr
,为备份过程创建必需清单。您只需执行一次 init 进程。之后,Vertica 将自动维护清单。
无论计划在何处保存数据备份,均需考虑站点对历史备份的磁盘要求。此外,如果使用多个存档,则多个存档可能需要更多的磁盘空间。Vertica 建议每个备份主机的空间至少是数据库节点占用空间大小的两倍。无论站点备份计划和保留要求的具体情况如何,均应遵循此建议。
要估计数据库大小,请使用 storage_containers
系统表的 used_bytes
列,如下例所示:
=> SELECT SUM(used_bytes) FROM storage_containers WHERE node_name='v_mydb_node0001';
total_size
------------
302135743
(1 row)
您必须验证源数据库节点和目标备份主机之间的任何防火墙均允许连接,以便在端口 50000 上执行 SSH 和 rsync。
备份主机运行的 rsync 和 Python 版本必须与 Vertica 安装包中提供的版本相同。
要允许 vbr
访问备份主机,
数据库超级用户必须满足两个要求:
在每台备份主机上都有一个帐户,且对备份目录具有写入权限。
可执行从每个数据库群集主机到相应备份主机的免密码 SSH 访问。
如何满足这些要求取决于您的平台和基础设施。
备份主机之间的 SSH 访问以及从备份主机到数据库节点的访问并不是必需的。
如果您的站点未使用集中登录系统(例如 LDAP),则通常可使用 useradd
命令或通过 GUI 管理工具添加用户。有关详细信息,请参阅您的 Linux 分发版文档。
若平台支持,可使用 ssh-copy-id
命令将数据库管理员的 SSH 标识文件从其中一个数据库节点复制到备份位置,从而启用免密码 SSH 登录。例如,若要将 SSH 标识文件从某个节点复制到名为 backup01
的备份主机:
$ ssh-copy-id -i dbadmin@backup01|
Password:
尝试使用 "ssh dbadmin@backup01"
登录到计算机。然后,检查 ~/.ssh/authorized_keysfile
的内容,确认未添加您不想包括的额外键。
$ ssh backup01
Last login: Mon May 23 11:44:23 2011 from host01
重复上述步骤,将数据库管理员的 SSH 标识复制到用于备份数据库的所有备份主机中。
复制数据库管理员的 SSH 标识后,您应能够从群集中的任意节点登录到备份主机,而不收到输入密码的提示。
如果配置要求将多个节点备份到一个备份主机 (n:1),请增加 SSH 后台程序 (sshd
) 的并发 SSH 连接数。默认情况下,每个主机上的并发 SSH 连接数为 10
,该值是在 sshd_config
文件中通过 MaxStartups
关键字设置的。每个备份主机的 MaxStartups
值应大于要备份到此备份主机的主机总数。有关配置 MaxStartups
的详细信息,请参考该参数的手册页。
为硬链接本地配置文件指定 backupHost
参数时,请使用 Admintools 所知的数据库主机名(或 IP 地址)。不要使用节点名称。设置群集时使用的是主机名(或 IP 地址)。backupHost
参数请勿使用 localhost
。
要查询节点名称和主机名:
=> SELECT node_name, host_name FROM node_resources;
node_name | host_name
------------------+----------------
v_vmart_node0001 | 192.168.223.11
v_vmart_node0002 | 192.168.223.22
v_vmart_node0003 | 192.168.223.33
(3 rows)
由于您要创建本地备份,请使用方括号 [] 将主机映射到本地主机。有关详细信息,请参考 [mapping]。
[Mapping]
v_vmart_node0001 = []:/home/dbadmin/data/backups
v_vmart_node0002 = []:/home/dbadmin/data/backups
v_vmart_node0003 = []:/home/dbadmin/data/backups
要将 Enterprise 模式或 Eon 模式数据库备份到受支持的云存储位置,需将参数添加到备份配置文件中。可以从本地群集或云提供商的虚拟服务器中创建这些备份。但还需要一些额外的配置。
有关配置身份验证和加密的信息,请参阅云存储的其他注意事项。
要将任何 Eon 模式或 Enterprise 模式群集备份到云存储目标,备份配置文件必须包含 [CloudStorage] 部分。Vertica 提供了一个示例云存储配置文件,您可以复制和编辑该文件。
环境变量支持采用安全方式传递备份位置的凭据。在以下备份场景中,Eon 和 Enterprise 模式数据库需要环境变量:
在 Google Cloud Platform (GCP) 上,从 Vertica 备份到 Google Cloud Storage (GCS)。
如果要备份到 GCS,则需具有基于哈希的消息身份验证代码 (HMAC) 密钥,其中包含访问 ID 和秘密访问密钥。有关如何创建 HMAC 密钥的说明,请参阅 GCP 上 Eon 模式的先决条件。
从内部部署数据库备份到以下任何存储位置:
Amazon Web Services (AWS)
任何与 S3 兼容的存储
Azure Blob 存储(仅限 Enterprise 模式)
内部部署数据库备份要求您使用环境变量传递凭据。您不能对跨端点备份使用其他认证方法。
任何不使用 Azure 托管标识管理资源的 Azure 用户环境。
vbr 日志将记录您何时发送环境变量。出于安全目的,不会记录环境变量所代表的值。有关查看 vbr 日志的详细信息,请参阅备份和还原故障排除。
所有 Enterprise 模式和 Eon 模式数据库都需要下表中所述的环境变量:
Eon 模式数据库需要下表中描述的环境变量:
如果用户环境不使用 Azure 托管标识管理资源,则必须使用环境变量提供凭据。如果在使用 Azure 托管标识的环境中设置环境变量,则使用环境变量设置的凭据优先于 Azure 托管标识凭据。
您可以在两个单独的 Azure 帐户之间进行备份和还原。跨帐户操作需要每个帐户的凭据配置 JSON 对象和端点配置 JSON 对象。每个环境变量都接受一个或多个以逗号分隔的 JSON 对象的集合。
跨帐户和跨区域的备份和还原操作可能会导致性能下降。有关性能和成本的详细信息,请参阅 Azure 文档。
Azure Blob 存储环境变量如下表所述:
以下命令将 Azure Blob 存储环境变量导出到当前 shell 会话:
$ export VbrCredentialConfig=[{"accountName": "account1","blobEndpoint": "host[:port]","accountKey": "account-key1","sharedAccessSignature": "sas-token1"}]
$ export VbrEndpointConfig=[{"accountName": "account1", "blobEndpoint": "host[:port]", "protocol": "http"}]
如果您要备份到受支持的云存储位置,则需额外执行一些一次性配置。如果备份的群集正在云中的实例上运行,则还需额外执行一些步骤。对于 Amazon Web Services (AWS),您可能会选择加密备份。这需要额外执行一些步骤。
默认情况下,存储桶访问仅限于公共存储桶。对于其他存储桶的一次性操作(例如备份和还原数据库),请使用适当的凭据。有关其他信息,请参阅 Google Cloud Storage 参数和 S3 参数。
与任何存储位置一样,您必须使用 vbr
init
任务对云存储位置进行初始化。
由于云存储不支持文件锁定,因此 Vertica 使用本地文件系统或云存储文件系统处理备份期间的文件锁定。您可以使用 vbr 配置文件中的
cloud_storage_backup_file_system_path
参数来识别此位置。在备份期间,Vertica 将在您的本地或云实例上创建一个锁定的标识文件,并在云存储备份位置创建一个重复文件。只要文件匹配,Vertica 就会继续备份,并在备份完成时释放锁定文件。只要文件始终保持相同,您就可以使用云存储位置来执行备份和还原任务。
如果锁定位置中的文件与备份位置中的文件不同步,则备份和还原任务将会失败并显示错误消息。您可以使用 --cloud-force-init
参数重新运行 init
任务,从而解决锁定不一致问题:
$ /opt/vertica/bin/vbr --task init --cloud-force-init -c filename.ini
如果您要从基于 Google Cloud Platform 的群集备份到 Google Cloud Storage (GCS),则必须向 GCS 公共存储位置提供身份验证。按照配置与云存储之间的备份中的详细说明设置环境变量,以对 GCS 存储进行身份验证。
有关其他身份验证信息(包括如何创建基于哈希的消息身份验证代码 (HMAC) 密钥),请参阅 GCP 上 Eon 模式的先决条件。
如果从基于 EC2 的群集备份到 S3,则必须向 S3 主机提供身份验证。无论选择何种身份验证类型,您的凭据均不会离开 EC2 群集。Vertica 支持以下身份验证类型:
AWS 凭据文件
环境变量
IAM 角色
AWS 凭据文件 - 您可以通过 ~/.aws/credentials 在 EC2 启动程序主机上手动创建配置文件。
[default]
aws_access_key_id = YOUR_ACCESS_KEY
aws_secret_access_key = YOUR_SECRET_KEY
有关凭据文件的更多信息,请参考 Amazon Web Services 文档。
环境变量 - Amazon Web Services 提供以下环境变量:
AWS_ACCESS_KEY_ID
AWS_SECRET_ACCESS_KEY
在启动程序上使用这些变量为您的 S3 主机提供身份验证。当会话结束时,AWS 会删除这些变量。有关更多信息,请参考 AWS 文档。
IAM 角色 - 创建 AWS IAM 角色,并授予该角色访问您的 EC2 群集和 S3 资源的权限。建议使用此方法管理长期访问权限。有关更多信息,请参考 Amazon Web Services 文档。
使用本机服务器端 S3 加密功能,可以对 Amazon S3 的备份进行加密。有关 Amazon S3 加密的更多信息,请参考 Amazon 文档。
Vertica 支持以下形式的 S3 加密:
使用 Amazon S3 管理密钥 (SSE-S3) 的服务器端加密
使用 AES-256 加密备份
Amazon 管理加密密钥
使用 AWS KMS 管理密钥 (SSE-KMS) 的服务器端加密
使用 AES-256 加密备份
需要 Amazon 密钥管理服务提供加密密钥
S3 存储桶必须与加密密钥来自同一区域
允许审核用户活动
启用备份加密之后,Vertica 将在创建备份时对其进行加密。如果在创建初始备份后启用加密,则仅对启用加密后添加的增量备份进行加密。为了确保备份完全加密,请在启用加密之后创建新备份。
要启用加密,请将以下设置添加到配置文件中:
cloud_storage_encrypt_transport:在传输期间将备份加密。如果使用 SSE-KMS 加密,则必须启用此参数。
cloud_storage_encrypt_at_rest:启用备份加密。如果启用加密但不提供 KMS 密钥,则 Vertica 将使用 SSE-S3 加密。
cloud_storage_sse_kms_key_id:如果使用 KMS 加密,请使用此参数提供密钥 ID。
有关这些设置的更多信息,请参阅 [CloudStorage]。
以下示例显示了备份的 KMS 加密的典型配置。
[CloudStorage]
cloud_storage_encrypt_transport = True
cloud_storage_encrypt_at_rest = sse
cloud_storage_sse_kms_key_id = 6785f412-1234-4321-8888-6a774ba2aaaa
仅限 Eon 模式
要备份使用 HDFS 内部部署存储的 Eon 模式数据库,公共存储和备份位置必须使用相同的 HDFS 凭据和域。支持所有 vbr 操作(除了 copycluster 以外)。
Vertica 支持用于 vbr 操作的 Kerberos 身份验证、高可用性名称节点和 TLS(线路加密)。
要使用 HDFS 上的公共存储在内部部署备份 Eon 模式,则需提供备份配置文件。在 [CloudStorage] 部分中,提供 cloud_storage_backup_path 和 cloud_storage_backup_file_system_path 值。
如果您在 Hadoop 群集中使用 Kerberos 身份验证或高可用性 NameNode,则 vbr 实用程序要求访问您在引导文件(此文件在数据库安装期间创建)中设置的相同值。在备份文件的 [misc] 部分中包含这些值。
下表将 vbr 配置选项映射到其关联的引导文件参数:
例如,如果 KerberosServiceName 在引导文件中设置为 principal-name,则在 [Misc] 中将 kerberos_service_name 设置为 principal-name 配置文件的部分。
Vertica 支持在公共存储和备份位置之间使用线路加密的 vbr 操作。使用备份配置文件的[CloudStorage]部分中的 cloud_storage_encrypt_transport 参数来配置加密。
要启用加密:
将 cloud_storage_encrypt_transport 设置为 true
。
对 cloud_storage_backup_path 使用 swebhdfs://
协议。
如果不使用加密:
将 cloud_storage_encrypt_transport 设置为 false
。
对 cloud_storage_backup_path 使用 webhdfs://
协议。
Vertica 不支持 Hadoop 存储的静态加密。