Link Search Menu Expand Document Documentation Menu

远程集群状态

2.10 版引入

远程支持存储的远程集群状态功能可防止因集群中大多数集群管理器节点永久丢失而导致的任何集群状态元数据丢失。

集群状态是一个内部数据结构,包含集群的元数据,包括以下内容:

  • 索引设置
  • 索引映射
  • 集群中分片的活动副本
  • 集群级别设置
  • 数据流
  • 模板

集群状态元数据由选定的集群管理器节点管理,对集群的正常运行至关重要。当集群永久丢失大多数集群管理器节点时,集群可能会经历数据丢失,因为最新的集群状态元数据可能不存在于幸存的集群管理器节点中。将集群中所有集群管理器节点的状态持久化到远程支持存储可以提供更好的持久性。

启用远程集群状态功能后,集群元数据将发布到集群中配置的远程存储库。灾难恢复后,无论何时启动新的集群管理器节点,这些节点都将使用远程存储库中存储的最新元数据自动引导。这提供了元数据持久性。

您可以独立于远程支持数据存储启用远程集群状态。

如果需要数据持久性,必须启用远程支持数据存储,如远程存储文档中所述。

配置远程集群状态

可以在引导集群时启用远程集群状态设置。远程集群状态启用后,可以通过更新设置并对所有节点执行滚动重启来禁用它。

要为给定集群启用远程集群状态,请将以下集群级别和存储库设置添加到集群的 opensearch.yml 文件中:

# Enable Remote cluster state cluster setting
cluster.remote_store.state.enabled: true

# Remote cluster state repository settings
node.attr.remote_store.state.repository: my-remote-state-repo
node.attr.remote_store.repository.my-remote-state-repo.type: s3
node.attr.remote_store.repository.my-remote-state-repo.settings.bucket: <Bucket Name 3>
node.attr.remote_store.repository.my-remote-state-repo.settings.base_path: <Bucket Base Path 3>
node.attr.remote_store.repository.my-remote-state-repo.settings.region: <Bucket region>

除了强制性静态设置,您还可以根据集群要求配置以下动态设置:

设置 默认值 描述
cluster.remote_store.state.index_metadata.upload_timeout 20s 已弃用。请改用 cluster.remote_store.state.global_metadata.upload_timeout
cluster.remote_store.state.global_metadata.upload_timeout 20s 等待集群状态上传完成的时间。
cluster.remote_store.state.metadata_manifest.upload_timeout 20s 等待清单文件上传完成的时间。清单文件包含单个集群状态下上传的每个文件的详细信息,包括索引元数据文件和全局元数据文件。
cluster.remote_store.state.cleanup_interval 300s 异步远程状态清理任务运行的间隔。此任务会删除任何旧的远程状态文件。

限制

远程集群状态功能有以下限制:

  • 启用远程集群状态时,无法运行不安全的引导脚本。当大多数集群管理器节点丢失并且集群宕机时,用户需要替换任何剩余的集群管理器节点并重新种子化节点才能引导新的集群。

远程集群状态发布

集群管理器节点处理集群状态的更新。然后,它通过本地传输层将更新后的集群状态发布到所有追随者节点。启用 remote_store.publication 功能后,集群状态会在每次状态更新期间备份到远程存储。追随者节点可以直接从远程存储获取状态,从而减少集群管理器节点在发布方面的开销。

要启用此功能,请在 opensearch.yml 中配置以下设置:

# Enable Remote cluster state publication
cluster.remote_store.publication.enabled: true

启用此设置不会改变发布流程,追随者节点在从远程存储下载更新的集群状态之前不会向集群管理器节点发送确认。

您必须启用远程集群状态功能才能使远程发布工作。要修改远程发布行为,可以使用以下路由表存储库设置,其中包含远程集群状态中每个索引的分片分配详细信息:

# Remote routing table repository settings
node.attr.remote_store.routing_table.repository: my-remote-routing-table-repo
node.attr.remote_store.repository.my-remote-routing-table-repo.type: s3
node.attr.remote_store.repository.my-remote-routing-table-repo.settings.bucket: <Bucket Name 3>
node.attr.remote_store.repository.my-remote-routing-table-repo.settings.region: <Bucket region>

您无需为状态和路由使用不同的远程存储库,因为状态和路由可以使用相同的存储库设置。

要配置远程发布,请使用以下集群设置。

设置 默认值 描述
cluster.remote_store.state.read_timeout 20s 等待追随者节点上远程状态下载完成的时间。
cluster.remote_store.state.path.prefix ""(空字符串) 要添加到 Blob 存储中索引元数据文件的固定前缀。
cluster.remote_store.index_metadata.path_type HASHED_PREFIX 用于在 Blob 存储中创建索引元数据路径的路径类型。有效值为 FIXEDHASHED_PREFIXHASHED_INFIX
cluster.remote_store.index_metadata.path_hash_algo FNV_1A_BASE64 用于在 Blob 存储中构建索引元数据路径前缀或中缀的算法。如果 cluster.remote_store.index_metadata.path_type 设置为 HASHED_PREFIXHASHED_INFIX,则应用此设置。有效的算法值为 FNV_1A_BASE64FNV_1A_COMPOSITE_1
cluster.remote_store.routing_table.path.prefix ""(空字符串) 要添加到 Blob 存储中索引路由文件的固定前缀。
剩余 350 字符

有问题?

想要贡献?