适用于 SAP HANA 的 Cloud Storage Backint 代理概览

您可以使用经 SAP 认证的适用于 SAP HANA 的 Cloud Storage Backint 代理,将 SAP HANA 备份直接从 Google Cloud、裸金属解决方案、本地或其他云平台上运行的 SAP HANA 实例发送到 Cloud Storage。

Backint 代理与 SAP HANA 相集成,因此您可以使用原生 SAP 备份和恢复功能直接从 Cloud Storage 存储和检索备份。

使用 Backint 代理时,您无需使用永久性磁盘存储进行备份。

如需了解 Backint 代理的安装说明,请参阅适用于 SAP HANA 的 Cloud Storage Backint 代理安装指南

如需详细了解 Backint 代理的 SAP 认证,请参阅以下内容:

Backint 代理配置文件

您可以通过在纯文本文件中指定参数来配置 Backint 代理。

默认配置文件名为 parameters.txt,默认位置为 /usr/sap/SID/SYS/global/hdb/opt/backint/backint-gcs/parameters.txt

您可以为每个文件指定不同的名称,以指定多个配置文件。

例如,您可以在名为 backint-log-backups.txt 的文件中指定日志备份配置,并在名为 backint-data-backups.txt 的文件中的数据备份配置。

将备份存储在 Cloud Storage 存储分区中

Backint 代理将您的 SAP HANA 备份存储在 Cloud Storage 存储分区中。

创建存储分区时,您可以选择存储分区位置和存储分区存储类别。

存储分区位置可以是单地区、双地区或多地区。选择哪种位置取决于您对数据位置的限制要求、备份和恢复的延迟时间要求,以及防止地区性中断的需要。如需了解详情,请参阅存储分区位置

在与运行 SAP HANA 实例的地区相同或接近的地区中,选择双地区或多地区存储分区。

根据您需要保留备份的时长、预期的备份访问频率和费用,选择存储类别。如需了解详情,请参阅存储类别

使用 Backint 代理多流处理数据备份

对于 SAP HANA 2.0 SP05 之前的版本,SAP HANA 支持对大于 128 GB 的数据库进行多流处理。从 SAP HANA 2.0 SP05 开始,可通过 SAP HANA 参数 parallel_data_backup_backint_size_threshold 配置此阈值。该参数指定启用多流处理的数据库备份大小下限(以 GB 为单位)。

多流处理可用于提高吞吐量和备份大于 5 TB(Cloud Storage 中的单个对象的大小上限)的数据库。

用于多流处理的最佳通道数取决于您所用的 Cloud Storage 存储分区类型以及运行 SAP HANA 的环境。此外,还需要考虑挂接到 HANA 实例的数据磁盘的吞吐量能力,以及管理员为备份活动分配的带宽。

您可以通过改变流的数量来调整吞吐量,也可以使用 Backint 代理配置文件 parameters.txt 中的 #RATE_LIMIT_MB 参数限制吞吐量。

对于多地区存储分区,最低为 8 个通道,请在 SAP HANA global.ini 配置文件中将 parallel_data_backup_backint_channels 参数设置为 8

对于单地区存储分区,最低为 12 个通道,请在 global.ini 文件中将 parallel_data_backup_backint_channels 设置为 12

根据需要调整通道数,以达到备份性能目标。

如 SAP HANA 文档中所述,每增加一个通道都需要 512 MB 的 I/O 缓冲区。通过在 global.ini 文件的备份部分中正确使用 data_backup_buffer_size 参数,指定 I/O 缓冲区的大小。如需详细了解 IO 缓冲区大小对备份时间的影响,请参阅 SAP 说明 2657261。从 HANA 2.0 SP05 开始,SAP 为此参数设置了 4 GB 的最大值。Google Cloud 中的测试并未显示将缓冲区空间提高到明显超出默认值可提供任何优势,但这一点可能会因工作负载而异。

如需详细了解多流处理,请在您的 SAP HANA 版本对应的 SAP HANA 管理指南中,参阅使用第三方备份工具多流处理数据备份

并行上传

您可以通过启用 Backint 代理的并行上传功能来提高日志备份文件的上传性能。这对于日志备份文件特别有用,因为它们无法从 SAP HANA 进行多流流式传输。

对于数据备份,您可以仅使用 SAP HANA 参数 parallel_data_backup_backint_channels 来调整 SAP HANA 备份通道的数量。

启用并行上传后,Backint 代理会将从 SAP HANA 收到的每个备份文件拆分为多个部分,然后进行并行上传,从而改善上传性能。

随着 Cloud Storage 收到这些部分,它们会进行重新编译并作为 Backint 代理从 SAP HANA 接收的原始单个文件进行存储。单个文件必须符合 Cloud Storage 中对象的 5 TB 大小限制。

配置并行上传

您可以在 parameters.txt 配置文件中启用并行上传功能,方法是在 #PARALLEL_FACTOR 参数中指定并行上传线程的数量上限。

参数 #PARALLEL_PART_SIZE_MB(设置每个部分的大小)和 #THREADS(确定工作器线程数)仅用于高级调整。除非收到 Cloud Customer Care 的指示,否则请勿更改这些设置。很少需要更改默认值。

如需详细了解并行上传参数,请参阅 Backint 代理的配置选项

并行上传限制

并行上传功能存在以下限制:

  • 如果通过 #ENCRYPTION_KEY#KMS_KEY_NAME 配置参数启用了加密,则无法使用并行上传。加密功能与并行上传功能不能一起使用。如果您在指定 #PARALLEL_FACTOR 参数时还指定了上述任一加密参数,则 Backint 代理将退出并返回状态 1
  • 如果启用了压缩,则无法使用并行上传。压缩功能与并行上传功能不能一起使用。从 1.0.22 版开始,如果您在配置中指定了 #PARALLEL_FACTOR 参数但省略了 #DISABLE_COMPRESSION 参数,则 Backint 代理将退出并返回状态 1
  • 如果您的 Cloud Storage 存储桶实现了保留政策,则该存储桶不支持并行上传。保留政策可防止将部分重新汇编为单个文件,从而导致上传失败。

如需详细了解并行上传参数,请参阅 Backint 代理的配置选项

调整并行上传

对于日志备份,并行上传可以显著提高备份吞吐量,因为 SAP HANA 不是多流日志备份。在大多数情况下,指定 #PARALLEL_FACTOR 为 16 或更小值就足够了。如果日志量非常大,您可以通过使用较高的 #PARALLEL_FACTOR 值(例如 16)并增大 SAP HANA 参数 log_segment_size_mbmax_log_backup_size 的值来最大限度地提高吞吐量。

在某些情况下,使用较高的 #PARALLEL_FACTOR 值可能会降低总体吞吐量,例如,如果您使用大量并行备份渠道,则可能会发生这种情况。

如需限制备份使用的网络带宽,请使用 #RATE_LIMIT_MB 设置并行上传可以使用的带宽上限。

如需找到适合您的特定环境、工作负载和备份类型的设置,请使用不同的设置执行测试并衡量备份吞吐量。

Backint 代理的身份验证和访问权限控制

Google Cloud 使用服务账号来标识 Backint 代理等程序,并控制这些程序可以访问的 Google Cloud 资源。

所需的 Cloud Storage 权限

您必须向 Backint 代理的服务账号授予 Backint 代理所访问的 Google Cloud 资源的权限。Storage Object Admin 角色可提供列出、获取、创建和删除 Cloud Storage 存储分区中对象的权限。

您可以在项目级层或存储分区级层设置服务账号的权限。如果在项目级层设置权限,则会授予 Backint 代理对您的项目中所有存储分区的访问权限。如果在存储分区级层设置权限,则仅向 Backint 代理授予对单个存储分区的访问权限。如需详细了解 Cloud Storage 存储分区权限,请参阅以下内容:

Backint 代理的服务账号选项

如果 SAP HANA 在 Compute Engine 虚拟机上运行,则默认情况下,Backint 代理将使用该虚拟机的服务账号。

如果您使用虚拟机服务账号,Backint 代理将与使用虚拟机服务账号的所有其他程序和进程具有相同的项目级层权限。

如需进行最严格的访问权限控制,请为 Backint 代理创建一个单独的服务账号,并向该服务账号授予针对存储分区的存储分区级层的访问权限。

如果 SAP HANA 未在 Compute Engine 虚拟机上运行,则您必须为 Backint 代理创建一个服务账号。请在包含 Backint 代理将使用的 Cloud Storage 存储分区的 Google Cloud 项目中创建该服务账号。

为 Backint 代理创建服务账号时,您还需要创建一个服务账号密钥。 您需要将密钥存储在 SAP HANA 主机上,并在 parameters.txt 文件中指定该密钥的路径。当 SAP HANA 在 Compute Engine 虚拟机上运行时,指定密钥路径将指示 Backint 代理使用与该密钥关联的服务账号(而非虚拟机服务账号)。

在为 Backint 代理使用专用服务账号时,请定期轮替密钥,以防止未经授权的访问。

如果您使用由 Cloud Key Management Service 生成的客户管理的加密密钥来加密 Cloud Storage 中的备份,则需要向服务账号授予访问加密密钥的权限。如需了解详情,请参阅将 Cloud KMS 密钥分配给服务账号

Google Cloud API 和元数据服务器的访问权限

Backint 代理需要在备份和恢复操作期间访问以下 Google Cloud IP 地址和主机:

  • 用于访问 Cloud Storage:
    • 代理的 1.0.14 版和更高版本:storage.googleapis.com
    • 1.0.13 版和更早版本:www.googleapis.com
  • oauth2.googleapis.com,用于身份验证(如果您在 #SERVICE_ACCOUNT 属性中指定了服务账号)。
  • 169.254.169.254,用于 Compute Engine 实例元数据服务器,该服务器默认解析内部 DNS 名称。
  • metadata.google.internal,也用于虚拟机实例元数据。

如果 Backint 代理和 SAP HANA 在无法访问互联网的 Compute Engine 虚拟机上运行,则需要配置专用 Google 访问通道,以便 Backint 代理可与 Cloud Storage 交互,如果使用专用服务账号,用于向 Google Cloud 验证自己的身份。

要配置专用 Google 访问权限,请参阅配置专用 Google 访问权限

代理服务器和 Backint 代理

默认情况下,Backint 代理会绕过任何 HTTP 代理,并且不会读取操作系统中的代理环境变量,例如 http_proxyhttps_proxyno_proxy

如果您没有替代方案,或者您的组织了解性能影响,并且具有支持通过代理服务器路由备份的性能所需的专业知识,则可以将 Backint 代理配置为使用代理。

Backint 代理的代理设置包含在 net.properties 文件中:

/usr/sap/SID/SYS/global/hdb/opt/backint/backint-gcs/jre/conf/net.properties

备份和恢复时绕过代理服务器

虽然 Backint 代理默认绕过代理服务器,但您可以通过在 /usr/sap/SID/SYS/global/hdb/opt/backint/backint-gcs/jre/conf/net.properties 文件的 http.nonProxyHosts 参数中指定所需的 Google Cloud 域名和 IP 地址来明确指定绕过。例如:

http.nonProxyHosts=localhost|127.|[::1]|.googleapis.com|169.254.169.254|metadata.google.internal

备份和恢复时使用代理服务器

如需将 Backint 代理配置为通过代理服务器发送备份,请在文件 /usr/sap/SID/SYS/global/hdb/opt/backint/backint-gcs/jre/conf/net.properties 中指定代理主机和端口号参数。

对于虚拟机实例元数据的查询,Backint 代理不能使用代理,因此您必须在 http.nonProxyHosts 参数中指定实例元数据的域名和 IP 地址。

以下示例展示了 Backint 代理的有效代理配置:

http.proxyHost=proxy-host
http.proxyPort=proxy-port
http.nonProxyHosts=localhost|127.*|[::1]|169.254.169.254|metadata.google.internal
https.proxyHost=proxy-host
https.proxyPort=proxy-port

Backint 代理的更新

Google Cloud 会定期发布 Backint 代理的新版本,您可以免费下载和安装。

在生产环境中将 Backint 代理更新到新版本之前,请务必在非生产环境中测试新版本。

如需更新 Backint 代理,SAP HANA 主机需要支持对 https://www.googleapis.com/ 的远程 HTTP 请求。

如需将 Backint 代理的现有实例更新为新版本,请参阅将 Backint 代理更新到新版本

备份加密

Cloud Storage 在将数据写入磁盘之前,始终会对您的数据进行加密。如需应用您自己的另一层加密,您可以为 Backint 代理备份的服务器端加密提供自己的加密密钥。

您可以通过两种方式向 Backint 代理提供密钥:

如需使用客户管理的加密密钥,请在 parameters.txt 文件的 #KMS_KEY_NAME 参数中指定密钥的路径。您还需要向虚拟机或 Backint 代理服务账号授予对密钥的访问权限。如需详细了解如何向服务账号授予对加密密钥的访问权限,请参阅将 Cloud KMS 密钥分配给服务账号

如需使用客户提供的加密密钥,请在 parameters.txt 文件的 #ENCRYPTION_KEY 参数中指定密钥的路径。密钥必须是采用 base64 编码的 AES-256 密钥字符串,如客户提供的加密密钥中所述。

加密限制

加密功能存在以下限制:

  • 如果同时指定了 #KMS_KEY_NAME#ENCRYPTION_KEY,则 Backint 代理将失败并退出,显示状态为 1。

  • 如果使用 #KMS_KEY_NAME#ENCRYPTION_KEY 指定了 #PARALLEL_FACTOR,则 Backint 代理将失败并退出,显示状态为 1。

配置参数说明

您可以在 parameters.txt 配置文件中为 Backint 代理指定多个选项。

首次下载 Backint 代理时,parameters.txt 文件仅包含两个参数:

  • #BUCKET
  • #DISABLE_COMPRESSION

请注意,# 是参数的一部分,而不是注释指示符。

另起一行指定每个参数。用空格分隔参数和值。

Backint 代理配置参数如下表所示。

参数和值 说明
#BUCKET bucket-name 此为必需参数,用于指定 Backint 代理在其中读写内容的 Cloud Storage 存储分区的名称。Backint 代理使用存储分区的存储类创建备份对象,并支持所有存储类。Backint 代理使用 Compute Engine 默认加密来加密静态数据。
#CHUNK_SIZE_MB MB 高级调整参数

在备份或恢复操作期间,控制发送到 Cloud Storage 的 HTTPS 请求的大小。默认块大小为 100 MB,这意味着往返 Cloud Storage 的单个 HTTP 请求流将保持开启状态,直到传输了 100 MB 的数据为止。

除非收到 Customer Care 指示,否则请勿修改此设置。它平衡了吞吐量和可靠性,因此很少需要更改。

由于 Backint 代理会在操作失败之前多次重试失败的 HTTP 请求,因此块大小越小,请求失败时需要重新传输的数据就越少。虽然更大的块可以提高吞吐量,但在请求失败时需要使用更多的内存和时间来重新发送数据。

#DISABLE_COMPRESSION

此为可选参数,用于在 Backint 代理将备份写入 Cloud Storage 存储桶时停用默认的即时压缩。#DISABLE_COMPRESSION 是默认指定的。

建议指定 #DISABLE_COMPRESSION。尽管压缩减少了 Cloud Storage 中备份的存储费用,但它在备份操作期间需要更多的 CPU 处理,并且会减慢有效的备份吞吐量。

无论是否开启此设置,Backint 代理在恢复操作期间都支持压缩或未压缩的备份文件。

#ENCRYPTION_KEY path/to/key/file 指定 Cloud Storage 用于加密备份的客户提供的加密密钥的路径。您必须指定以 base64 编码的 AES-256 密钥的完全限定路径。

您不能使用 #KMS_KEY_NAME 或 #PARALLEL_FACTOR 指定 #ENCRYPTION_KEY。

如需详细了解如何在 Google Cloud 中使用自己的加密密钥,请参阅客户提供的加密密钥

#KMS_KEY_NAME path/to/key/file 指定由 Cloud Key Management Service 生成的客户管理的加密密钥的路径。Cloud Storage 使用此密钥来加密备份。

如果 SAP HANA 在 Compute Engine 虚拟机上运行,则该密钥必须可供虚拟机访问。如果 SAP HANA 不在 Google Cloud 上运行,则 Cloud KMS 密钥必须与 Backint 代理服务账号相关联。如需了解相关信息,请参阅服务账号

请使用以下格式指定路径:projects/key_project/locations/location/keyRings/key_ring_name/cryptoKeys/key_name

其中:

  • key_project 是与密钥关联的项目的 ID。
  • location 是密钥的地区可用性。如需了解详情,请参阅 Cloud KMS 的位置类型
  • key_ring_name 是包含该密钥的密钥环的名称。
  • key_name 是密钥的名称。

您不能使用 #ENCRYPTION_KEY 或 #PARALLEL_FACTOR 指定 #KMS_KEY_NAME。

如需详细了解如何在 Google Cloud 上管理自己的加密密钥,请参阅客户管理的加密密钥

#MAX_GCS_RETRY integer 定义 Backint 代理对失败的 Cloud Storage 读写尝试的最大重试次数。默认值为 5,这是建议的值。
#PARALLEL_FACTOR integer

用于启用并行上传并设置并行上传数量上限的可选参数。值“1”会停用并行上传。默认值为“1”。

在以下情况下,请勿启用并行上传:

  • 目标存储桶使用保留政策。
  • 指定了 #ENCRYPTION_KEY#KMS_KEY_NAME
#PARALLEL_PART_SIZE_MB integer 高级调整参数

设置并行上传的每个部分的大小(以 MB 为单位)。默认值为 128 MB。

除非收到 Customer Care 指示,否则请勿修改此设置。很少需要更改默认设置。

#RATE_LIMIT_MB integer 此为可选参数,用于设置备份或恢复操作期间 Compute Engine 出站带宽的上限,以 MB 计。默认情况下,Google Cloud 不会限制 Backint 代理的网络带宽。设置后,吞吐量可能会有所不同,但不会超过指定的限制。
#SERVICE_ACCOUNT path/to/key/file 此为可选参数,用于指定在不使用 Compute Engine 默认身份验证时,指向 JSON 编码的 Google Cloud 服务账号密钥的完全限定路径。指定 #SERVICE_ACCOUNT 可指示 Backint 代理在向 Cloud Storage 服务进行身份验证时使用密钥。建议使用 Compute Engine 默认身份验证。
#THREADS integer 高级调整参数

设置工作器线程数。默认是机器中的处理器数量。

除非收到 Customer Care 指示,否则请勿修改此设置。很少需要更改默认设置。

#READ_IDLE_TIMEOUT integer 高级调整参数

设置 Backint 代理等待打开备份文件的最长时间(以毫秒为单位)。默认值为 1000。

除非收到 Customer Care 指示,否则请勿修改此设置。很少需要更改默认设置。

#HTTP_READ_TIMEOUT integer 高级调整参数

设置从 Cloud Storage API 请求读取响应的超时(以毫秒为单位)。默认值为 -1(无超时)。

除非收到 Customer Care 指示,否则请勿修改此设置。很少需要更改默认设置。

Backint 代理的日志记录

除了 SAP HANA 在 backup.log 中保留的日志外,Backint 代理还将操作事件和通信错误事件写入 /usr/sap/SID/SYS/global/hdb/opt/backint/backint-gcslogs 子目录的日志文件中。

当日志文件大小达到 10 MB 时,Backint 代理将轮替日志文件。

如有必要,您可以在 /usr/sap/SID/SYS/global/hdb/opt/backint/backint-gcs/logging.properties 中修改 Backint 代理的日志记录配置。

Backint 代理也支持 Cloud Logging。如需启用 Cloud Logging,请参阅适用于 SAP HANA 的 Cloud Storage Backint 代理安装指南

在 SAP HANA 高可用性部署中使用 Backint 代理

在 SAP HANA 高可用性集群中,您需要在集群中的每个节点上安装 Backint 代理。

为高可用性集群中的每个 SAP HANA 实例使用相同的 Cloud Storage 存储分区规范相同的 Backint 代理配置。您可以使用相同的存储分区规范,因为在正常操作期间,只有高可用性配置中的活跃 SAP HANA 实例会将备份写入 Cloud Storage。辅助系统处于复制模式。这适用于数据、日志和目录备份。

此外,Pappemaker 等应用集群软件会阻止脑裂情况,此时集群中的多个 SAP HANA 系统认为它是主实例。

但是,在维护活动期间,当停用集群时,如果备用数据库已从复制中移除并从中恢复,则您需要确保仅在主数据库上触发备份。

由于 Backint 代理不知道哪个 SAP HANA 系统当前是活跃系统,并且没有调度或触发机制,因此您需要使用 SAP 机制(例如 SAP ABAP 事务 DB13。

SAP ABAP 应用通过虚拟 IP 连接到高可用性集群,因此触发器始终路由到活跃的 SAP HANA 实例。

如果备份触发器在每个服务器上在本地定义,例如本地操作系统脚本,并且主要系统和辅助系统都认为它们是活跃系统,则它们可能尝试写入备份存储分区。

在 SAP HANA 灾难恢复部署中使用 Backint 代理

在灾难恢复配置中,当使用另一个 SAP HANA 系统复制功能,另一个 Google Cloud 区域中的 SAP HANA 的恢复实例保持同步时,请为恢复实例指定不同于主实例的存储分区 SAP HANA 系统使用。

虽然灾难恢复系统通常处于复制模式,因此无法运行备份本身,但在常规灾难恢复测试期间,恢复实例已联机并可能触发备份。如果发生这种情况,并且恢复系统不会使用单独的存储分区,则备份可能会覆盖主数据库中的数据。

对于需要从灾难恢复区域进行备份的实际灾难,您可以更新 Backint 代理配置以引用主要高可用性系统使用的多区域存储分区。

在 SAP HANA 横向扩容系统中使用 Backint 代理

在 SAP HANA 横向扩容系统中,您需要在系统中的每个节点上安装 Backint 代理。

如需简化对 parameters.txt 配置文件的管理,或者如果您正在使用 Backint 代理服务账号密钥,则可以将这些文件置于共享 NFS 目录中。