elasticsearch-node
编辑elasticsearch-node编辑
elasticsearch-node
命令允许您对已关闭的节点执行某些不安全的操作,这些操作只有在节点关闭时才能执行。此命令允许您调整节点的 角色,不安全地编辑集群设置,并且可能能够在灾难后恢复一些数据或启动节点,即使它与磁盘上的数据不兼容。
概要编辑
bin/elasticsearch-node repurpose|unsafe-bootstrap|detach-cluster|override-version [-E <KeyValuePair>] [-h, --help] ([-s, --silent] | [-v, --verbose])
描述编辑
此工具有多种模式
-
elasticsearch-node repurpose
可用于从节点中删除不需要的数据,如果该节点以前是 数据节点 或 主节点,但已被重新分配,不再具有其中一个角色。 -
elasticsearch-node remove-settings
可用于从集群状态中删除持久性设置,以防集群状态包含阻止集群形成的不兼容设置。 -
elasticsearch-node remove-index-settings
可用于从集群状态中删除索引设置,以防集群状态包含阻止集群形成的不兼容索引设置。 -
elasticsearch-node remove-customs
可用于从集群状态中删除自定义元数据,以防集群状态包含阻止加载集群状态的损坏元数据。 -
elasticsearch-node unsafe-bootstrap
可用于执行不安全的集群引导。它强制其中一个节点使用其本地集群元数据副本自行形成一个全新的集群。 -
elasticsearch-node detach-cluster
允许您将节点从一个集群移动到另一个集群。这可用于将节点移动到使用elasticsearch-node unsafe-bootstrap
命令创建的新集群中。如果无法执行不安全的集群引导,它还允许您将节点移动到全新的集群中。 -
elasticsearch-node override-version
允许您启动节点,即使数据路径中的数据是由不兼容版本的 Elasticsearch 编写的。这有时可能允许您降级到早期版本的 Elasticsearch。
JVM 选项编辑
CLI 工具使用 64MB 的堆运行。对于大多数工具来说,这个值是可以的。但是,如果需要,可以通过设置 CLI_JAVA_OPTS
环境变量来覆盖它。例如,以下操作将 elasticsearch-node
工具使用的堆大小增加到 1GB。
export CLI_JAVA_OPTS="-Xmx1g" bin/elasticsearch-node ...
更改节点的角色编辑
在某些情况下,您可能希望重新分配节点,而不遵循 正确的重新分配流程。 elasticsearch-node repurpose
工具允许您删除任何多余的磁盘数据,并在重新分配节点后启动节点。
预期用途是
- 停止节点
- 通过设置
node.roles
来更新elasticsearch.yml
,如您所愿。 - 在节点上运行
elasticsearch-node repurpose
- 启动节点
如果您在没有 data
角色但具有 master
角色的节点上运行 elasticsearch-node repurpose
,它将删除该节点上任何剩余的碎片数据,但会保留索引和集群元数据。如果您在没有 data
和 master
角色的节点上运行 elasticsearch-node repurpose
,它将删除任何剩余的碎片数据和索引元数据,但会保留集群元数据。
如果包含的数据在集群中的其他节点上不可用,则运行此命令会导致上述索引的数据丢失。只有在您理解并接受可能的后果时才运行此工具,并且只有在确定无法干净地重新分配节点后才运行。
该工具提供了要删除的数据的摘要,并在进行任何更改之前要求确认。您可以通过传递详细 (-v
) 选项来获取有关受影响的索引和碎片的详细信息。
删除持久性集群设置编辑
在某些情况下,节点可能包含阻止集群形成的持久性集群设置。由于集群无法形成,因此无法使用 集群更新设置 API 来删除这些设置。
elasticsearch-node remove-settings
工具允许您强制从磁盘上的集群状态中删除这些持久性设置。该工具将要删除的设置列表作为参数,并且还支持通配符模式。
预期用途是
- 停止节点
- 在节点上运行
elasticsearch-node remove-settings 要删除的设置名称
- 对所有其他主节点重复此操作
- 启动节点
删除索引设置编辑
在某些情况下,索引可能包含阻止集群形成的索引设置。由于集群无法形成,因此无法使用 更新索引设置 API 来删除这些设置。
elasticsearch-node remove-index-settings
工具允许您强制从磁盘上的集群状态中删除这些索引设置。该工具将要删除的索引设置列表作为参数,并且还支持通配符模式。
预期用途是
- 停止节点
- 在节点上运行
elasticsearch-node remove-index-settings 要删除的索引设置名称
- 对所有节点重复此操作
- 启动节点
从集群状态中删除自定义元数据编辑
在某些情况下,节点可能包含自定义元数据(通常由插件提供),这些元数据会阻止节点启动并从磁盘加载集群。
elasticsearch-node remove-customs
工具允许您强制删除有问题的自定义元数据。该工具将要删除的自定义元数据名称列表作为参数,并且还支持通配符模式。
预期用途是
- 停止节点
- 在节点上运行
elasticsearch-node remove-customs 要删除的自定义名称
- 对所有其他主节点重复此操作
- 启动节点
灾难后恢复数据编辑
有时 Elasticsearch 节点会暂时停止,可能是因为需要执行一些维护活动,也可能是因为硬件故障。在您解决临时状况并重新启动节点后,它将重新加入集群并正常继续。根据您的配置,即使集群中的一个或多个节点停止,集群也可能保持完全可用。
有时,在节点停止后可能无法重新启动它。例如,节点的主机可能出现无法修复的硬件问题。如果集群仍然可用,您可以在另一个主机上启动一个新的节点,Elasticsearch 将将此节点带入集群,以代替失败的节点。
每个节点都将数据存储在由 path.data
设置 定义的数据目录中。这意味着在发生灾难时,您也可以通过将数据目录移动到另一个主机来重新启动节点,前提是这些数据目录可以从故障主机中恢复。
Elasticsearch 需要来自大多数主节点的响应才能选举主节点并更新集群状态。这意味着,如果您有三个主节点,即使其中一个节点出现故障,集群也将保持可用。但是,如果三个主节点中的两个节点出现故障,则集群将不可用,直到至少其中一个节点重新启动。
在极少数情况下,可能无法重新启动足够多的节点来恢复集群的可用性。如果发生此类灾难,您应该从最近的快照构建一个新的集群,并重新导入自该快照创建以来摄取的任何数据。
但是,如果灾难足够严重,则可能也无法从最近的快照中恢复。不幸的是,在这种情况下,没有办法避免数据丢失,但您可能可以使用 elasticsearch-node
工具来构建一个包含来自失败集群中某些数据的新的集群。
绕过版本检查编辑
Elasticsearch 写入磁盘的数据旨在由当前版本和有限的未来版本读取。它通常无法由旧版本读取,也无法由比当前版本高一个主要版本的版本读取。存储在磁盘上的数据包括写入数据的节点的版本,Elasticsearch 在启动时会检查它是否与该版本兼容。
在极少数情况下,您可能希望绕过此检查并使用由不兼容版本写入的数据启动 Elasticsearch 节点。如果存储数据的格式已更改,这可能无法正常工作,这是一个有风险的过程,因为格式可能会以 Elasticsearch 可能错误解释的方式更改,从而导致数据丢失,并且不会发出任何警告。
要绕过此检查,您可以使用 elasticsearch-node override-version
工具将数据路径中存储的版本号覆盖为当前版本,从而使 Elasticsearch 认为它与磁盘上的数据兼容。
不安全的集群引导edit
如果至少有一个剩余的符合主节点资格的节点,但无法重新启动大多数节点,则 elasticsearch-node unsafe-bootstrap
命令将不安全地覆盖集群的 投票配置,就像执行另一个 集群引导过程 一样。然后,目标节点可以使用目标节点本地保存的集群元数据自行形成一个新集群。
这些步骤会导致任意数据丢失,因为目标节点可能没有保存最新的集群元数据,并且这些过时的元数据可能导致无法使用集群中的某些或所有索引。
由于不安全的引导会形成一个包含单个节点的新集群,因此在运行它之后,您必须使用 elasticsearch-node detach-cluster
工具 将任何其他幸存节点从失败的集群迁移到这个新集群。
当您运行 elasticsearch-node unsafe-bootstrap
工具时,它会分析节点的状态并在采取任何操作之前要求确认。在要求确认之前,它会报告运行该工具的节点上的集群状态的术语和版本,如下所示
Current node cluster state (term, version) pair is (4, 12)
如果您有多个节点可以选择运行此工具,那么您应该选择一个术语尽可能大的节点。如果有多个节点具有相同的术语,请选择版本最大的节点。此信息标识具有最新集群状态的节点,这将最大程度地减少可能丢失的数据量。例如,如果第一个节点报告 (4, 12)
,而第二个节点报告 (5, 3)
,则第二个节点更可取,因为它的术语更大。但是,如果第二个节点报告 (3, 17)
,则第一个节点更可取,因为它的术语更大。如果第二个节点报告 (4, 10)
,则它与第一个节点具有相同的术语,但版本更小,因此第一个节点更可取。
运行此命令会导致任意数据丢失。只有在您理解并接受可能的后果,并且已经用尽所有其他恢复集群的可能性后,才运行此工具。
使用此工具的操作顺序如下
- 确保您确实无法访问集群中至少一半的符合主节点资格的节点,并且无法通过将它们的数据路径移动到健康的硬件来修复或恢复它们。
- 停止所有剩余的节点。
- 选择一个剩余的符合主节点资格的节点,如上所述,使其成为新当选的主节点。
- 在此节点上,运行
elasticsearch-node unsafe-bootstrap
命令,如下所示。验证该工具是否报告了Master node was successfully bootstrapped
。 - 启动此节点并验证它是否被选为主节点。
- 运行
elasticsearch-node detach-cluster
工具(如下所述)在集群中的所有其他节点上。 - 启动所有其他节点并验证每个节点是否都加入了集群。
- 调查集群中的数据,以发现在此过程中是否有任何数据丢失。
当您运行该工具时,它会确保用于引导集群的节点没有运行。重要的是,所有其他符合主节点资格的节点在运行此工具时也必须停止,但该工具不会检查这一点。
消息 Master node was successfully bootstrapped
并不意味着没有数据丢失,它只是意味着该工具能够完成其工作。
将节点从其集群中分离edit
节点在集群之间移动是不安全的,因为不同的集群具有完全不同的集群元数据。没有办法安全地将两个集群的元数据合并在一起。
为了防止无意中加入错误的集群,每个集群在首次启动时都会创建一个唯一的标识符,称为集群 UUID。每个节点都会记录其集群的 UUID,并拒绝加入具有不同 UUID 的集群。
但是,如果节点的集群已永久失败,则可能希望尝试将其移动到新集群。 elasticsearch-node detach-cluster
命令允许您通过重置节点的集群 UUID 将其从其集群中分离。然后,它可以加入具有不同 UUID 的另一个集群。
例如,在不安全的集群引导之后,您需要将所有其他幸存节点从其旧集群中分离,以便它们可以加入新的、不安全引导的集群。
只有在至少有一个幸存的符合主节点资格的节点时,不安全的集群引导才有可能。如果没有剩余的符合主节点资格的节点,则集群元数据将完全丢失。但是,各个数据节点也包含与其分片相对应的索引元数据的副本。这有时允许新集群将这些分片导入为 悬挂索引。在丢失集群中所有符合主节点资格的节点之后,您可以通过创建一个新集群,然后使用 elasticsearch-node detach-cluster
命令将任何幸存节点移动到这个新集群中,有时可以恢复一些索引。在新集群完全形成后,使用 悬挂索引 API 列出、导入或删除任何悬挂索引。
导入悬挂索引时存在数据丢失的风险,因为数据节点可能没有索引元数据的最新副本,并且没有关于 哪些分片副本已同步 的任何信息。这意味着可能选择一个过时的分片副本作为主副本,并且一些分片可能与导入的映射不兼容。
执行此命令会导致任意数据丢失。只有在您理解并接受可能的后果,并且已经用尽所有其他恢复集群的可能性后,才运行此工具。
使用此工具的操作顺序如下
- 确保您确实无法访问集群中所有符合主节点资格的节点,并且无法通过将它们的数据路径移动到健康的硬件来修复或恢复它们。
- 启动一个新集群并验证它是否正常。此集群可能包含一个或多个全新的符合主节点资格的节点,或者可能是如上所述形成的不安全引导的集群。
- 停止所有剩余的数据节点。
- 在每个数据节点上,运行
elasticsearch-node detach-cluster
工具,如下所示。验证该工具是否报告了Node was successfully detached from the cluster
。 - 如有必要,配置每个数据节点以 发现新集群。
- 启动每个数据节点并验证它是否已加入新集群。
- 等待所有恢复完成,并调查集群中的数据,以发现在此过程中是否有任何数据丢失。使用 悬挂索引 API 列出、导入或删除任何悬挂索引。
消息 Node was successfully detached from the cluster
并不意味着没有数据丢失,它只是意味着该工具能够完成其工作。
参数edit
-
repurpose
- 更改节点的角色时,删除多余的数据。
-
unsafe-bootstrap
- 指定不安全地引导此节点作为新的单节点集群。
-
detach-cluster
- 指定不安全地将此节点从其集群中分离,以便它可以加入不同的集群。
-
override-version
- 覆盖数据路径中存储的版本号,以便节点可以启动,即使它与磁盘上的数据不兼容。
-
remove-settings
- 强制从磁盘上的集群状态中删除提供的持久集群设置。
-
-E <KeyValuePair>
- 配置设置。
-
-h, --help
- 返回所有命令参数。
-
-s, --silent
- 显示最少的输出。
-
-v, --verbose
- 显示详细的输出。
示例edit
将节点重新用作专用主节点edit
在此示例中,将以前的数据节点重新用作专用主节点。首先,在节点的 elasticsearch.yml
配置文件中,将节点的设置更新为 node.roles: [ "master" ]
。然后运行 elasticsearch-node repurpose
命令来查找并删除多余的分片数据
node$ ./bin/elasticsearch-node repurpose WARNING: Elasticsearch MUST be stopped before running this tool. Found 2 shards in 2 indices to clean up Use -v to see list of paths and indices affected Node is being re-purposed as master and no-data. Clean-up of shard data will be performed. Do you want to proceed? Confirm [y/N] y Node successfully repurposed to master and no-data.
将节点重新用作仅协调节点edit
在此示例中,将以前保存数据的节点重新用作仅协调节点。首先,在节点的 elasticsearch.yml
配置文件中,将节点的设置更新为 node.roles: []
。然后运行 elasticsearch-node repurpose
命令来查找并删除多余的分片数据和索引元数据
node$./bin/elasticsearch-node repurpose WARNING: Elasticsearch MUST be stopped before running this tool. Found 2 indices (2 shards and 2 index meta data) to clean up Use -v to see list of paths and indices affected Node is being re-purposed as no-master and no-data. Clean-up of index data will be performed. Do you want to proceed? Confirm [y/N] y Node successfully repurposed to no-master and no-data.
删除持久集群设置edit
如果您的节点包含阻止集群形成的持久集群设置,即无法使用 集群更新设置 API 删除,则可以运行以下命令来删除一个或多个集群设置。
node$ ./bin/elasticsearch-node remove-settings xpack.monitoring.exporters.my_exporter.host WARNING: Elasticsearch MUST be stopped before running this tool. The following settings will be removed: xpack.monitoring.exporters.my_exporter.host: "10.1.2.3" You should only run this tool if you have incompatible settings in the cluster state that prevent the cluster from forming. This tool can cause data loss and its use should be your last resort. Do you want to proceed? Confirm [y/N] y Settings were successfully removed from the cluster state
您也可以使用通配符删除多个设置,例如使用
node$ ./bin/elasticsearch-node remove-settings xpack.monitoring.*
删除索引设置编辑
如果您的索引包含阻止集群形成的索引设置,您可以运行以下命令来删除一个或多个索引设置。
node$ ./bin/elasticsearch-node remove-index-settings index.my_plugin.foo WARNING: Elasticsearch MUST be stopped before running this tool. You should only run this tool if you have incompatible index settings in the cluster state that prevent the cluster from forming. This tool can cause data loss and its use should be your last resort. Do you want to proceed? Confirm [y/N] y Index settings were successfully removed from the cluster state
您也可以使用通配符删除多个索引设置,例如使用
node$ ./bin/elasticsearch-node remove-index-settings index.my_plugin.*
从集群状态中删除自定义元数据编辑
如果磁盘上的集群状态包含阻止节点启动和加载集群状态的自定义元数据,您可以运行以下命令来删除此自定义元数据。
node$ ./bin/elasticsearch-node remove-customs snapshot_lifecycle WARNING: Elasticsearch MUST be stopped before running this tool. The following customs will be removed: snapshot_lifecycle You should only run this tool if you have broken custom metadata in the cluster state that prevents the cluster state from being loaded. This tool can cause data loss and its use should be your last resort. Do you want to proceed? Confirm [y/N] y Customs were successfully removed from the cluster state
不安全的集群引导编辑
假设您的集群有五个主节点候选节点,并且您永久丢失了其中三个,只剩下两个节点。
- 在第一个剩余节点上运行该工具,但在确认步骤中回答
n
。
node_1$ ./bin/elasticsearch-node unsafe-bootstrap WARNING: Elasticsearch MUST be stopped before running this tool. Current node cluster state (term, version) pair is (4, 12) You should only run this tool if you have permanently lost half or more of the master-eligible nodes in this cluster, and you cannot restore the cluster from a snapshot. This tool can cause arbitrary data loss and its use should be your last resort. If you have multiple surviving master eligible nodes, you should run this tool on the node with the highest cluster state (term, version) pair. Do you want to proceed? Confirm [y/N] n
- 在第二个剩余节点上运行该工具,并在确认步骤中再次回答
n
。
node_2$ ./bin/elasticsearch-node unsafe-bootstrap WARNING: Elasticsearch MUST be stopped before running this tool. Current node cluster state (term, version) pair is (5, 3) You should only run this tool if you have permanently lost half or more of the master-eligible nodes in this cluster, and you cannot restore the cluster from a snapshot. This tool can cause arbitrary data loss and its use should be your last resort. If you have multiple surviving master eligible nodes, you should run this tool on the node with the highest cluster state (term, version) pair. Do you want to proceed? Confirm [y/N] n
- 由于第二个节点具有更大的术语,因此它具有更新的集群状态,因此最好使用此节点不安全地引导集群
node_2$ ./bin/elasticsearch-node unsafe-bootstrap WARNING: Elasticsearch MUST be stopped before running this tool. Current node cluster state (term, version) pair is (5, 3) You should only run this tool if you have permanently lost half or more of the master-eligible nodes in this cluster, and you cannot restore the cluster from a snapshot. This tool can cause arbitrary data loss and its use should be your last resort. If you have multiple surviving master eligible nodes, you should run this tool on the node with the highest cluster state (term, version) pair. Do you want to proceed? Confirm [y/N] y Master node was successfully bootstrapped
将节点从其集群中分离编辑
不安全地引导新集群后,运行 elasticsearch-node detach-cluster
命令将所有剩余节点从失败的集群中分离,以便它们可以加入新集群
node_3$ ./bin/elasticsearch-node detach-cluster WARNING: Elasticsearch MUST be stopped before running this tool. You should only run this tool if you have permanently lost all of the master-eligible nodes in this cluster and you cannot restore the cluster from a snapshot, or you have already unsafely bootstrapped a new cluster by running `elasticsearch-node unsafe-bootstrap` on a master-eligible node that belonged to the same cluster as this node. This tool can cause arbitrary data loss and its use should be your last resort. Do you want to proceed? Confirm [y/N] y Node was successfully detached from the cluster
绕过版本检查编辑
运行 elasticsearch-node override-version
命令覆盖数据路径中存储的版本,以便节点可以启动,即使它与数据路径中存储的数据不兼容
node$ ./bin/elasticsearch-node override-version WARNING: Elasticsearch MUST be stopped before running this tool. This data path was last written by Elasticsearch version [x.x.x] and may no longer be compatible with Elasticsearch version [y.y.y]. This tool will bypass this compatibility check, allowing a version [y.y.y] node to start on this data path, but a version [y.y.y] node may not be able to read this data or may read it incorrectly leading to data loss. You should not use this tool. Instead, continue to use a version [x.x.x] node on this data path. If necessary, you can use reindex-from-remote to copy the data from here into an older cluster. Do you want to proceed? Confirm [y/N] y Successfully overwrote this node's metadata to bypass its version compatibility checks.