迁移到远程支持存储
2.15 版引入
远程支持存储提供了一种新的方式来防止数据丢失,它会自动创建所有索引事务的备份并将其发送到远程存储。要使用此功能,必须启用段复制。
您可以通过滚动升级机制将基于文档复制的集群迁移到远程支持存储。
滚动升级,有时也称为*节点替换升级*,可以在运行中的集群上执行,几乎没有停机时间。节点将单独停止并原地迁移。或者,节点可以一个接一个地停止并由远程支持主机替换。在此过程中,您可以继续在集群中索引和查询数据。
迁移准备
在对 OpenSearch 集群进行任何更改之前,请查看升级 OpenSearch,了解有关备份配置文件和创建集群状态和索引快照的建议。
在迁移到远程支持存储之前,请升级到 OpenSearch 2.15 或更高版本。
在升级到 OpenSearch 2.15 之前,请拍摄集群快照并将其远程存储。OpenSearch 2.15 节点无法还原为文档复制。如果需要撤消迁移,请执行全新的 OpenSearch 安装并从远程快照恢复。远程存储快照允许您在迁移过程中出现问题时检索和恢复它。
执行升级
-
在开始使用 集群健康 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 }
-
禁用分片复制,以防止在节点脱机时创建分片副本。这会停止 Lucene 索引段在集群节点上的移动。您可以通过查询
_cluster/settings
API 端点来禁用分片复制,如以下示例所示PUT "/_cluster/settings?pretty" { "persistent": { "cluster.routing.allocation.enable": "primaries" } }
您应该收到类似于以下内容的响应
{ "acknowledged" : true, "persistent" : { "cluster" : { "routing" : { "allocation" : { "enable" : "primaries" } } } }, "transient" : { } }
-
在集群上执行以下刷新操作,将事务日志条目提交到 Lucene 索引
POST "/_flush?pretty"
您应该收到类似于以下内容的响应
{ "_shards" : { "total" : 4, "successful" : 4, "failed" : 0 } }
-
将
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" : { } } }
- 检查您的集群并确定要升级的第一个节点。
-
在
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>
-
停止您要迁移的节点。删除容器时不要删除与容器关联的卷。新的 OpenSearch 容器将使用现有卷。**删除卷将导致数据丢失**。
-
部署一个运行相同 OpenSearch 版本并映射到与您删除的容器相同卷的新容器。
-
在新节点上运行 OpenSearch 后,查询
_cat/nodes
端点以确认其已加入集群。等待集群再次变为绿色。 -
对集群中的每个节点重复步骤 2 到 5。
-
重新启用分片复制,使用类似于以下内容的命令
PUT "/_cluster/settings?pretty" { "persistent": { "cluster.routing.allocation.enable": "all" } }
您应该收到类似于以下内容的响应
{ "acknowledged" : true, "persistent" : { "cluster" : { "routing" : { "allocation" : { "enable" : "all" } } } }, "transient" : { } }
-
使用集群健康 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 }
-
使用以下命令清除
remote_store.compatibility_mode
和migration.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 。 |