远程备份存储
2.10 版引入
远程备份存储为 OpenSearch 用户提供了一种新的数据防丢失方式,通过自动创建所有索引事务的备份并将其发送到远程存储。为了启用此功能,还必须启用分段复制。有关更多信息,请参阅分段复制。
使用远程备份存储时,当写入请求到达主分片时,该请求仅在主分片上索引到 Lucene。然后,相应的事务日志将上传到远程存储。OpenSearch 不会将写入请求发送到副本,而是执行主术语验证以确认请求源分片仍然是主分片。主术语验证确保如果当前主分片被隔离且不知道集群管理器正在选举新的主分片,则其将失败。
在主分片上作为刷新、刷新和合并流程的一部分创建分段后,这些分段将上传到远程分段存储,副本分片从相同的远程分段存储获取副本。这可以防止主分片执行任何写入操作。
配置远程备份存储
远程备份存储是一个集群级别设置。它只能在引导集群时启用。引导完成后,远程备份存储无法启用或禁用。这提供了集群级别的持久性。
与配置的远程集群的通信发生在存储库插件接口中。所有现有的存储库插件实现,例如 Azure Blob 存储、Google Cloud 存储和 Amazon 简单存储服务 (Amazon S3),都与远程备份存储兼容。
确保集群中所有节点上的远程存储设置配置方式相同。如果不同,则属性与所选集群管理器节点不同的节点将引导失败。
要为给定集群启用远程备份存储,请在 opensearch.yml
中提供远程存储库详细信息作为节点属性,示例如下所示
# Repository name
node.attr.remote_store.segment.repository: my-repo-1
node.attr.remote_store.translog.repository: my-repo-2
# Segment repository settings
node.attr.remote_store.repository.my-repo-1.type: s3
node.attr.remote_store.repository.my-repo-1.settings.bucket: <Bucket Name 1>
node.attr.remote_store.repository.my-repo-1.settings.base_path: <Bucket Base Path 1>
node.attr.remote_store.repository.my-repo-1.settings.region: us-east-1
# Translog repository settings
node.attr.remote_store.repository.my-repo-2.type: s3
node.attr.remote_store.repository.my-repo-2.settings.bucket: <Bucket Name 2>
node.attr.remote_store.repository.my-repo-2.settings.base_path: <Bucket Base Path 2>
node.attr.remote_store.repository.my-repo-2.settings.region: us-east-1
有关配置远程集群状态设置的更多信息,请参阅远程集群状态。这是集群元数据持久化到远程存储所需的。
您无需为分段、事务日志和状态使用三个不同的远程存储库。这三个存储可以共享同一个存储库。
在引导过程中,opensearch.yml
中列出的远程备份存储库会自动注册。集群创建并配置 remote_store
设置后,该集群中创建的所有索引都将开始将数据上传到配置的远程存储。
相关集群设置
您可以使用以下集群设置来调整远程备份集群如何处理每个工作负载。
字段 | 数据类型 | 描述 |
---|---|---|
cluster.default.index.refresh_interval | 时间单位 | 在未提供 index.refresh_interval 设置时设置刷新间隔。当您希望在集群中的所有索引上设置默认刷新间隔并支持 searchIdle 设置时,此设置会很有用。您不能将间隔设置得低于 cluster.minimum.index.refresh_interval 设置。 |
cluster.minimum.index.refresh_interval | 时间单位 | 设置最小刷新间隔并将其应用于集群中的所有索引。cluster.default.index.refresh_interval 设置应高于此设置的值。如果在索引创建期间 index.refresh_interval 设置低于最小值,则索引创建将失败。 |
cluster.remote_store.translog.buffer_interval | 时间单位 | 执行定期事务日志更新时使用的事务日志缓冲区间隔的默认值。此设置仅在索引设置 index.remote_store.translog.buffer_interval 不存在时有效。 |
cluster.remote_store.translog.max_readers | 整数 | 设置远程备份索引的最大打开事务日志文件数。这限制了每个分片的事务日志文件总数。达到此限制后,远程存储会刷新事务日志文件。默认值为 1000 。最低要求为 100 。 |
从备份恢复
要从远程备份恢复索引(例如在节点故障事件中),请使用以下选项之一
仅恢复未分配的分片
curl -X POST "https://:9200/_remotestore/_restore" -H 'Content-Type: application/json' -d'
{
"indices": ["my-index-1", "my-index-2"]
}
'
恢复给定索引的所有分片
curl -X POST "https://:9200/_remotestore/_restore?restore_all_shards=true" -ku admin:<custom-admin-password> -H 'Content-Type: application/json' -d'
{
"indices": ["my-index"]
}
'
如果启用了安全插件,用户必须具有 cluster:admin/remotestore/restore
权限。有关配置用户权限的信息,请参阅访问控制。
潜在用例
您可以使用远程备份存储来
- 恢复红色集群或索引。
- 如果
index.translog.durability
设置为request
,则无论副本数量如何,恢复所有数据直到上次确认的写入。
基准
OpenSearch 项目已使用 OpenSearch Benchmark 工具中可用的多个工作负载选项运行远程存储。本节总结了以下工作负载的基准测试结果
每个工作负载都针对多个批量索引客户端配置进行了测试,以模拟不同程度的请求并发。
您的结果可能因集群拓扑、硬件、分片数量和合并设置而异。
集群、分片和测试配置
对于这些基准测试,我们使用了以下集群、分片和测试配置
- 节点:三个节点,每个节点使用数据、摄取和集群管理器角色
- 节点实例:Amazon EC2 r6g.xlarge
- OpenSearch Benchmark 主机:单个 Amazon EC2 m5.2xlarge 实例
- 分片配置:三个分片,带一个副本
- 安装了默认 S3 设置的
repository-s3
插件
StackOverflow
下表列出了 so
工作负载的基准测试结果,远程事务日志缓冲区间隔为 250 毫秒。
8 个批量索引客户端(默认) | 16 个批量索引客户端 | 24 个批量索引客户端 | ||||||||
---|---|---|---|---|---|---|---|---|---|---|
文档复制 | 远程启用 | 百分比差异 | 文档复制 | 远程启用 | 百分比差异 | 文档复制 | 远程启用 | 百分比差异 | ||
索引吞吐量 | 平均值 | 29582.5 | 40667.4 | 37.47 | 31154.9 | 47862.3 | 53.63 | 31777.2 | 51123.2 | 60.88 |
索引吞吐量 | P50 | 28915.4 | 40343.4 | 39.52 | 30406.4 | 47472.5 | 56.13 | 30852.1 | 50547.2 | 63.84 |
索引延迟 | P90 | 1716.34 | 1469.5 | -14.38 | 3709.77 | 2799.82 | -24.53 | 5768.68 | 3794.13 | -34.23 |
HTTP 日志
下表列出了 http_logs
工作负载的基准测试结果,远程事务日志缓冲区间隔为 200 毫秒。
8 个批量索引客户端(默认) | 16 个批量索引客户端 | 24 个批量索引客户端 | ||||||||
---|---|---|---|---|---|---|---|---|---|---|
文档复制 | 远程启用 | 百分比差异 | 文档复制 | 远程启用 | 百分比差异 | 文档复制 | 远程启用 | 百分比差异 | ||
索引吞吐量 | 平均值 | 149062 | 82198.7 | -44.86 | 134696 | 148749 | 10.43 | 133050 | 197239 | 48.24 |
索引吞吐量 | P50 | 148123 | 81656.1 | -44.87 | 133591 | 148859 | 11.43 | 132872 | 197455 | 48.61 |
索引延迟 | P90 | 327.011 | 610.036 | 86.55 | 751.705 | 669.073 | -10.99 | 1145.19 | 817.185 | -28.64 |
纽约出租车
下表列出了 http_logs
工作负载的基准测试结果,远程事务日志缓冲区间隔为 250 毫秒。
8 个批量索引客户端(默认) | 16 个批量索引客户端 | 24 个批量索引客户端 | ||||||||
---|---|---|---|---|---|---|---|---|---|---|
文档复制 | 远程启用 | 百分比差异 | 文档复制 | 远程启用 | 百分比差异 | 文档复制 | 远程启用 | 百分比差异 | ||
索引吞吐量 | 平均值 | 93383.9 | 94186.1 | 0.86 | 91624.8 | 125770 | 37.27 | 93627.7 | 132006 | 40.99 |
索引吞吐量 | P50 | 91645.1 | 93906.7 | 2.47 | 89659.8 | 125443 | 39.91 | 91120.3 | 132166 | 45.05 |
索引延迟 | P90 | 995.217 | 1014.01 | 1.89 | 2236.33 | 1750.06 | -21.74 | 3353.45 | 2472 | -26.28 |
结果表明,在索引延迟超过平均远程上传时间的情况下,性能有持续的提升。当您增加批量索引客户端的数量时,启用远程的配置可提供高达 60-65% 的索引吞吐量增益。有关更详细的结果,请参阅问题 #9790。
后续步骤
要跟踪远程备份存储的未来增强功能,请参阅问题 #10181。