Link Search Menu Expand Document Documentation Menu

迁移到远程支持存储

2.15 版引入

远程支持存储提供了一种新的方式来防止数据丢失,它会自动创建所有索引事务的备份并将其发送到远程存储。要使用此功能,必须启用段复制

您可以通过滚动升级机制将基于文档复制的集群迁移到远程支持存储。

滚动升级,有时也称为*节点替换升级*,可以在运行中的集群上执行,几乎没有停机时间。节点将单独停止并原地迁移。或者,节点可以一个接一个地停止并由远程支持主机替换。在此过程中,您可以继续在集群中索引和查询数据。

迁移准备

在对 OpenSearch 集群进行任何更改之前,请查看升级 OpenSearch,了解有关备份配置文件和创建集群状态和索引快照的建议。

在迁移到远程支持存储之前,请升级到 OpenSearch 2.15 或更高版本。

在升级到 OpenSearch 2.15 之前,请拍摄集群快照并将其远程存储。OpenSearch 2.15 节点无法还原为文档复制。如果需要撤消迁移,请执行全新的 OpenSearch 安装并从远程快照恢复。远程存储快照允许您在迁移过程中出现问题时检索和恢复它。

执行升级

  1. 在开始使用 集群健康 API 之前,请验证您的 OpenSearch 集群的健康状况。在升级之前解决任何索引或分片分配问题,以确保数据得到保留。状态为**绿色**表示所有主分片和副本分片均已分配。您可以使用类似于以下内容的命令查询 _cluster/health API 端点

    GET "/_cluster/health?pretty"
    

    您应该收到类似于以下内容的响应

    {
        "cluster_name":"opensearch-dev-cluster",
        "status":"green",
        "timed_out":false,
        "number_of_nodes":4,
        "number_of_data_nodes":4,
        "active_primary_shards":1,
        "active_shards":4,
        "relocating_shards":0,
        "initializing_shards":0,
        "unassigned_shards":0,
        "delayed_unassigned_shards":0,
        "number_of_pending_tasks":0,
        "number_of_in_flight_fetch":0,
        "task_max_waiting_in_queue_millis":0,
        "active_shards_percent_as_number":100.0
    }
    
  2. 禁用分片复制,以防止在节点脱机时创建分片副本。这会停止 Lucene 索引段在集群节点上的移动。您可以通过查询 _cluster/settings API 端点来禁用分片复制,如以下示例所示

    PUT "/_cluster/settings?pretty"
    {
        "persistent": {
            "cluster.routing.allocation.enable": "primaries"
        }
    }
    

    您应该收到类似于以下内容的响应

    {
      "acknowledged" : true,
      "persistent" : {
        "cluster" : {
          "routing" : {
            "allocation" : {
              "enable" : "primaries"
            }
          }
        }
      },
      "transient" : { }
    }
    
  3. 在集群上执行以下刷新操作,将事务日志条目提交到 Lucene 索引

    POST "/_flush?pretty"
    

    您应该收到类似于以下内容的响应

    {
      "_shards" : {
        "total" : 4,
        "successful" : 4,
        "failed" : 0
      }
    }
    
  4. cluster.remote_store.compatibility_mode 设置为 mixed 以允许远程支持存储节点加入集群。然后将 cluster.migration.direction 设置为 remote_store,这将把新索引分配给远程支持数据节点。以下示例使用集群设置 API 更新了上述设置

    PUT "/_cluster/settings?pretty"
    {
        "persistent": {
            "cluster.remote_store.compatibility_mode": "mixed",
            "cluster.migration.direction" :  "remote_store"
        }
    }
    

    您应该收到类似于以下内容的响应

    {
      "acknowledged" : true,
      "persistent" : {
         "cluster" : { 
         "remote_store" : {
           "compatibility_mode" : "mixed",
           "migration.direction" :  "remote_store"
         }
       },
       "transient" : { }
     }
    }
    
  5. 检查您的集群并确定要升级的第一个节点。
  6. opensearch.yml 中提供远程存储库详细信息作为节点属性,如以下示例所示

    # Repository name
    node.attr.remote_store.segment.repository: my-repo-1
    node.attr.remote_store.translog.repository: my-repo-2
    node.attr.remote_store.state.repository: my-repo-3
       
    # 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
       
    # Enable Remote cluster state cluster setting
    cluster.remote_store.state.enabled: true
       
    # Remote cluster state repository settings
    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>
       
    
  7. 停止您要迁移的节点。删除容器时不要删除与容器关联的卷。新的 OpenSearch 容器将使用现有卷。**删除卷将导致数据丢失**。

  8. 部署一个运行相同 OpenSearch 版本并映射到与您删除的容器相同卷的新容器。

  9. 在新节点上运行 OpenSearch 后,查询 _cat/nodes 端点以确认其已加入集群。等待集群再次变为绿色。

  10. 对集群中的每个节点重复步骤 2 到 5。

  11. 重新启用分片复制,使用类似于以下内容的命令

    PUT "/_cluster/settings?pretty"
    {
        "persistent": {
            "cluster.routing.allocation.enable": "all"
        }
    }
    

    您应该收到类似于以下内容的响应

    {
      "acknowledged" : true,
      "persistent" : {
        "cluster" : {
          "routing" : {
            "allocation" : {
              "enable" : "all"
            }
          }
        }
      },
      "transient" : { }
    }
    
  12. 使用集群健康 API 确认集群健康,如以下命令所示

    GET "/_cluster/health?pretty"
    

    您应该收到类似于以下内容的响应

    {
      "cluster_name" : "opensearch-dev-cluster",
      "status" : "green",
      "timed_out" : false,
      "number_of_nodes" : 4,
      "number_of_data_nodes" : 4,
      "discovered_master" : true,
      "active_primary_shards" : 1,
      "active_shards" : 4,
      "relocating_shards" : 0,
      "initializing_shards" : 0,
      "unassigned_shards" : 0,
      "delayed_unassigned_shards" : 0,
      "number_of_pending_tasks" : 0,
      "number_of_in_flight_fetch" : 0,
      "task_max_waiting_in_queue_millis" : 0,
      "active_shards_percent_as_number" : 100.0
    }
    
  13. 使用以下命令清除 remote_store.compatibility_modemigration.direction 设置,以便不允许非远程节点加入集群

    PUT "/_cluster/settings?pretty"
    {
        "persistent": {
            "cluster.remote_store.compatibility_mode": null,
             "cluster.migration.direction" :  null
        }
    }
    

    您应该收到类似于以下内容的响应

    {
      "acknowledged" : true,
      "persistent" : { 
         "cluster.remote_store.compatibility_mode": null,
          "cluster.migration.direction" :  null
       },
       "transient" : { }
    }
    

迁移到远程存储现已完成。

使用以下集群设置来启用迁移到远程支持集群。

字段 数据类型 描述
cluster.remote_store.compatibility_mode 字符串 设置为 strict 时,仅允许创建非远程或远程节点,具体取决于初始集群类型。设置为 mixed 时,允许远程和非远程节点加入集群。默认为 strict
cluster.migration.direction 字符串 仅在远程支持存储节点上创建新分片。默认为 None
剩余 350 字符

有问题?

想做出贡献?