node-tool.asciidoc 23 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431432433434435436437438439440441442443444445446447448449450451452453454455456457458459460461462463464465466467468469470471472473474475476477478479480481482483484485486487488489490491492493494495496497498499500501502503504505506507508509510511512513514515516517518519520521522523524525526527528529530531532533534535536537538539540541542543544545546547548549550551552553554555556557558559560561562563564565566567568569570571572573574575576577578579580581582583584585586587588589590591592593594595
  1. [[node-tool]]
  2. == elasticsearch-node
  3. The `elasticsearch-node` command enables you to perform certain unsafe
  4. operations on a node that are only possible while it is shut down. This command
  5. allows you to adjust the <<modules-node,role>> of a node, unsafely edit cluster
  6. settings and may be able to recover some data after a disaster or start a node
  7. even if it is incompatible with the data on disk.
  8. [discrete]
  9. === Synopsis
  10. [source,shell]
  11. --------------------------------------------------
  12. bin/elasticsearch-node repurpose|unsafe-bootstrap|detach-cluster|override-version
  13. [-E <KeyValuePair>]
  14. [-h, --help] ([-s, --silent] | [-v, --verbose])
  15. --------------------------------------------------
  16. [discrete]
  17. === Description
  18. This tool has a number of modes:
  19. * `elasticsearch-node repurpose` can be used to delete unwanted data from a
  20. node if it used to be a <<data-node,data node>> or a
  21. <<master-node,master-eligible node>> but has been repurposed not to have one
  22. or other of these roles.
  23. * `elasticsearch-node remove-settings` can be used to remove persistent settings
  24. from the cluster state in case where it contains incompatible settings that
  25. prevent the cluster from forming.
  26. * `elasticsearch-node remove-customs` can be used to remove custom metadata
  27. from the cluster state in case where it contains broken metadata that
  28. prevents the cluster state from being loaded.
  29. * `elasticsearch-node unsafe-bootstrap` can be used to perform _unsafe cluster
  30. bootstrapping_. It forces one of the nodes to form a brand-new cluster on
  31. its own, using its local copy of the cluster metadata.
  32. * `elasticsearch-node detach-cluster` enables you to move nodes from one
  33. cluster to another. This can be used to move nodes into a new cluster
  34. created with the `elasticsearch-node unsafe-bootstrap` command. If unsafe
  35. cluster bootstrapping was not possible, it also enables you to move nodes
  36. into a brand-new cluster.
  37. * `elasticsearch-node override-version` enables you to start up a node
  38. even if the data in the data path was written by an incompatible version of
  39. {es}. This may sometimes allow you to downgrade to an earlier version of
  40. {es}.
  41. :tool-name: node
  42. include::cli-jvm-options.asciidoc[]
  43. :!tool-name:
  44. [[node-tool-repurpose]]
  45. [discrete]
  46. ==== Changing the role of a node
  47. There may be situations where you want to repurpose a node without following
  48. the <<change-node-role,proper repurposing processes>>. The `elasticsearch-node
  49. repurpose` tool allows you to delete any excess on-disk data and start a node
  50. after repurposing it.
  51. The intended use is:
  52. * Stop the node
  53. * Update `elasticsearch.yml` by setting `node.roles` as desired.
  54. * Run `elasticsearch-node repurpose` on the node
  55. * Start the node
  56. If you run `elasticsearch-node repurpose` on a node without the `data` role and
  57. with the `master` role then it will delete any remaining shard data on that
  58. node, but it will leave the index and cluster metadata alone. If you run
  59. `elasticsearch-node repurpose` on a node without the `data` and `master` roles
  60. then it will delete any remaining shard data and index metadata, but it will
  61. leave the cluster metadata alone.
  62. [WARNING]
  63. Running this command can lead to data loss for the indices mentioned if the
  64. data contained is not available on other nodes in the cluster. Only run this
  65. tool if you understand and accept the possible consequences, and only after
  66. determining that the node cannot be repurposed cleanly.
  67. The tool provides a summary of the data to be deleted and asks for confirmation
  68. before making any changes. You can get detailed information about the affected
  69. indices and shards by passing the verbose (`-v`) option.
  70. [discrete]
  71. ==== Removing persistent cluster settings
  72. There may be situations where a node contains persistent cluster
  73. settings that prevent the cluster from forming. Since the cluster cannot form,
  74. it is not possible to remove these settings using the
  75. <<cluster-update-settings>> API.
  76. The `elasticsearch-node remove-settings` tool allows you to forcefully remove
  77. those persistent settings from the on-disk cluster state. The tool takes a
  78. list of settings as parameters that should be removed, and also supports
  79. wildcard patterns.
  80. The intended use is:
  81. * Stop the node
  82. * Run `elasticsearch-node remove-settings name-of-setting-to-remove` on the node
  83. * Repeat for all other master-eligible nodes
  84. * Start the nodes
  85. [discrete]
  86. ==== Removing custom metadata from the cluster state
  87. There may be situations where a node contains custom metadata, typically
  88. provided by plugins, that prevent the node from starting up and loading
  89. the cluster from disk.
  90. The `elasticsearch-node remove-customs` tool allows you to forcefully remove
  91. the problematic custom metadata. The tool takes a list of custom metadata names
  92. as parameters that should be removed, and also supports wildcard patterns.
  93. The intended use is:
  94. * Stop the node
  95. * Run `elasticsearch-node remove-customs name-of-custom-to-remove` on the node
  96. * Repeat for all other master-eligible nodes
  97. * Start the nodes
  98. [discrete]
  99. ==== Recovering data after a disaster
  100. Sometimes {es} nodes are temporarily stopped, perhaps because of the need to
  101. perform some maintenance activity or perhaps because of a hardware failure.
  102. After you resolve the temporary condition and restart the node,
  103. it will rejoin the cluster and continue normally. Depending on your
  104. configuration, your cluster may be able to remain completely available even
  105. while one or more of its nodes are stopped.
  106. Sometimes it might not be possible to restart a node after it has stopped. For
  107. example, the node's host may suffer from a hardware problem that cannot be
  108. repaired. If the cluster is still available then you can start up a fresh node
  109. on another host and {es} will bring this node into the cluster in place of the
  110. failed node.
  111. Each node stores its data in the data directories defined by the
  112. <<path-settings,`path.data` setting>>. This means that in a disaster you can
  113. also restart a node by moving its data directories to another host, presuming
  114. that those data directories can be recovered from the faulty host.
  115. {es} <<modules-discovery-quorums,requires a response from a majority of the
  116. master-eligible nodes>> in order to elect a master and to update the cluster
  117. state. This means that if you have three master-eligible nodes then the cluster
  118. will remain available even if one of them has failed. However if two of the
  119. three master-eligible nodes fail then the cluster will be unavailable until at
  120. least one of them is restarted.
  121. In very rare circumstances it may not be possible to restart enough nodes to
  122. restore the cluster's availability. If such a disaster occurs, you should
  123. build a new cluster from a recent snapshot and re-import any data that was
  124. ingested since that snapshot was taken.
  125. However, if the disaster is serious enough then it may not be possible to
  126. recover from a recent snapshot either. Unfortunately in this case there is no
  127. way forward that does not risk data loss, but it may be possible to use the
  128. `elasticsearch-node` tool to construct a new cluster that contains some of the
  129. data from the failed cluster.
  130. [[node-tool-override-version]]
  131. [discrete]
  132. ==== Bypassing version checks
  133. The data that {es} writes to disk is designed to be read by the current version
  134. and a limited set of future versions. It cannot generally be read by older
  135. versions, nor by versions that are more than one major version newer. The data
  136. stored on disk includes the version of the node that wrote it, and {es} checks
  137. that it is compatible with this version when starting up.
  138. In rare circumstances it may be desirable to bypass this check and start up an
  139. {es} node using data that was written by an incompatible version. This may not
  140. work if the format of the stored data has changed, and it is a risky process
  141. because it is possible for the format to change in ways that {es} may
  142. misinterpret, silently leading to data loss.
  143. To bypass this check, you can use the `elasticsearch-node override-version`
  144. tool to overwrite the version number stored in the data path with the current
  145. version, causing {es} to believe that it is compatible with the on-disk data.
  146. [[node-tool-unsafe-bootstrap]]
  147. [discrete]
  148. ===== Unsafe cluster bootstrapping
  149. If there is at least one remaining master-eligible node, but it is not possible
  150. to restart a majority of them, then the `elasticsearch-node unsafe-bootstrap`
  151. command will unsafely override the cluster's <<modules-discovery-voting,voting
  152. configuration>> as if performing another
  153. <<modules-discovery-bootstrap-cluster,cluster bootstrapping process>>.
  154. The target node can then form a new cluster on its own by using
  155. the cluster metadata held locally on the target node.
  156. [WARNING]
  157. These steps can lead to arbitrary data loss since the target node may not hold the latest cluster
  158. metadata, and this out-of-date metadata may make it impossible to use some or
  159. all of the indices in the cluster.
  160. Since unsafe bootstrapping forms a new cluster containing a single node, once
  161. you have run it you must use the <<node-tool-detach-cluster,`elasticsearch-node
  162. detach-cluster` tool>> to migrate any other surviving nodes from the failed
  163. cluster into this new cluster.
  164. When you run the `elasticsearch-node unsafe-bootstrap` tool it will analyse the
  165. state of the node and ask for confirmation before taking any action. Before
  166. asking for confirmation it reports the term and version of the cluster state on
  167. the node on which it runs as follows:
  168. [source,txt]
  169. ----
  170. Current node cluster state (term, version) pair is (4, 12)
  171. ----
  172. If you have a choice of nodes on which to run this tool then you should choose
  173. one with a term that is as large as possible. If there is more than one
  174. node with the same term, pick the one with the largest version.
  175. This information identifies the node with the freshest cluster state, which minimizes the
  176. quantity of data that might be lost. For example, if the first node reports
  177. `(4, 12)` and a second node reports `(5, 3)`, then the second node is preferred
  178. since its term is larger. However if the second node reports `(3, 17)` then
  179. the first node is preferred since its term is larger. If the second node
  180. reports `(4, 10)` then it has the same term as the first node, but has a
  181. smaller version, so the first node is preferred.
  182. [WARNING]
  183. Running this command can lead to arbitrary data loss. Only run this tool if you
  184. understand and accept the possible consequences and have exhausted all other
  185. possibilities for recovery of your cluster.
  186. The sequence of operations for using this tool are as follows:
  187. 1. Make sure you have really lost access to at least half of the
  188. master-eligible nodes in the cluster, and they cannot be repaired or recovered
  189. by moving their data paths to healthy hardware.
  190. 2. Stop **all** remaining nodes.
  191. 3. Choose one of the remaining master-eligible nodes to become the new elected
  192. master as described above.
  193. 4. On this node, run the `elasticsearch-node unsafe-bootstrap` command as shown
  194. below. Verify that the tool reported `Master node was successfully
  195. bootstrapped`.
  196. 5. Start this node and verify that it is elected as the master node.
  197. 6. Run the <<node-tool-detach-cluster,`elasticsearch-node detach-cluster`
  198. tool>>, described below, on every other node in the cluster.
  199. 7. Start all other nodes and verify that each one joins the cluster.
  200. 8. Investigate the data in the cluster to discover if any was lost during this
  201. process.
  202. When you run the tool it will make sure that the node that is being used to
  203. bootstrap the cluster is not running. It is important that all other
  204. master-eligible nodes are also stopped while this tool is running, but the tool
  205. does not check this.
  206. The message `Master node was successfully bootstrapped` does not mean that
  207. there has been no data loss, it just means that tool was able to complete its
  208. job.
  209. [[node-tool-detach-cluster]]
  210. [discrete]
  211. ===== Detaching nodes from their cluster
  212. It is unsafe for nodes to move between clusters, because different clusters
  213. have completely different cluster metadata. There is no way to safely merge the
  214. metadata from two clusters together.
  215. To protect against inadvertently joining the wrong cluster, each cluster
  216. creates a unique identifier, known as the _cluster UUID_, when it first starts
  217. up. Every node records the UUID of its cluster and refuses to join a
  218. cluster with a different UUID.
  219. However, if a node's cluster has permanently failed then it may be desirable to
  220. try and move it into a new cluster. The `elasticsearch-node detach-cluster`
  221. command lets you detach a node from its cluster by resetting its cluster UUID.
  222. It can then join another cluster with a different UUID.
  223. For example, after unsafe cluster bootstrapping you will need to detach all the
  224. other surviving nodes from their old cluster so they can join the new,
  225. unsafely-bootstrapped cluster.
  226. Unsafe cluster bootstrapping is only possible if there is at least one
  227. surviving master-eligible node. If there are no remaining master-eligible nodes
  228. then the cluster metadata is completely lost. However, the individual data
  229. nodes also contain a copy of the index metadata corresponding with their shards. This sometimes allows a new cluster to import these shards as
  230. <<dangling-indices,dangling indices>>. You can sometimes
  231. recover some indices after the loss of all main-eligible nodes in a cluster
  232. by creating a new cluster and then using the `elasticsearch-node
  233. detach-cluster` command to move any surviving nodes into this new cluster. Once the new cluster is fully formed,
  234. use the <<dangling-indices-api,Dangling indices API>> to list, import or delete
  235. any dangling indices.
  236. There is a risk of data loss when importing a dangling index because data nodes
  237. may not have the most recent copy of the index metadata and do not have any
  238. information about <<docs-replication,which shard copies are in-sync>>. This
  239. means that a stale shard copy may be selected to be the primary, and some of
  240. the shards may be incompatible with the imported mapping.
  241. [WARNING]
  242. Execution of this command can lead to arbitrary data loss. Only run this tool
  243. if you understand and accept the possible consequences and have exhausted all
  244. other possibilities for recovery of your cluster.
  245. The sequence of operations for using this tool are as follows:
  246. 1. Make sure you have really lost access to every one of the master-eligible
  247. nodes in the cluster, and they cannot be repaired or recovered by moving their
  248. data paths to healthy hardware.
  249. 2. Start a new cluster and verify that it is healthy. This cluster may comprise
  250. one or more brand-new master-eligible nodes, or may be an unsafely-bootstrapped
  251. cluster formed as described above.
  252. 3. Stop **all** remaining data nodes.
  253. 4. On each data node, run the `elasticsearch-node detach-cluster` tool as shown
  254. below. Verify that the tool reported `Node was successfully detached from the
  255. cluster`.
  256. 5. If necessary, configure each data node to
  257. <<discovery-hosts-providers,discover the new cluster>>.
  258. 6. Start each data node and verify that it has joined the new cluster.
  259. 7. Wait for all recoveries to have completed, and investigate the data in the
  260. cluster to discover if any was lost during this process. Use the
  261. <<dangling-indices-api,Dangling indices API>> to list, import or delete any
  262. dangling indices.
  263. The message `Node was successfully detached from the cluster` does not mean
  264. that there has been no data loss, it just means that tool was able to complete
  265. its job.
  266. [discrete]
  267. [[node-tool-parameters]]
  268. === Parameters
  269. `repurpose`:: Delete excess data when a node's roles are changed.
  270. `unsafe-bootstrap`:: Specifies to unsafely bootstrap this node as a new
  271. one-node cluster.
  272. `detach-cluster`:: Specifies to unsafely detach this node from its cluster so
  273. it can join a different cluster.
  274. `override-version`:: Overwrites the version number stored in the data path so
  275. that a node can start despite being incompatible with the on-disk data.
  276. `remove-settings`:: Forcefully removes the provided persistent cluster settings
  277. from the on-disk cluster state.
  278. `-E <KeyValuePair>`:: Configures a setting.
  279. `-h, --help`:: Returns all of the command parameters.
  280. `-s, --silent`:: Shows minimal output.
  281. `-v, --verbose`:: Shows verbose output.
  282. [discrete]
  283. === Examples
  284. [discrete]
  285. ==== Repurposing a node as a dedicated master node
  286. In this example, a former data node is repurposed as a dedicated master node.
  287. First update the node's settings to `node.roles: [ "master" ]` in its
  288. `elasticsearch.yml` config file. Then run the `elasticsearch-node repurpose`
  289. command to find and remove excess shard data:
  290. [source,txt]
  291. ----
  292. node$ ./bin/elasticsearch-node repurpose
  293. WARNING: Elasticsearch MUST be stopped before running this tool.
  294. Found 2 shards in 2 indices to clean up
  295. Use -v to see list of paths and indices affected
  296. Node is being re-purposed as master and no-data. Clean-up of shard data will be performed.
  297. Do you want to proceed?
  298. Confirm [y/N] y
  299. Node successfully repurposed to master and no-data.
  300. ----
  301. [discrete]
  302. ==== Repurposing a node as a coordinating-only node
  303. In this example, a node that previously held data is repurposed as a
  304. coordinating-only node. First update the node's settings to `node.roles: []` in
  305. its `elasticsearch.yml` config file. Then run the `elasticsearch-node repurpose`
  306. command to find and remove excess shard data and index metadata:
  307. [source,txt]
  308. ----
  309. node$./bin/elasticsearch-node repurpose
  310. WARNING: Elasticsearch MUST be stopped before running this tool.
  311. Found 2 indices (2 shards and 2 index meta data) to clean up
  312. Use -v to see list of paths and indices affected
  313. Node is being re-purposed as no-master and no-data. Clean-up of index data will be performed.
  314. Do you want to proceed?
  315. Confirm [y/N] y
  316. Node successfully repurposed to no-master and no-data.
  317. ----
  318. [discrete]
  319. ==== Removing persistent cluster settings
  320. If your nodes contain persistent cluster settings that prevent the cluster
  321. from forming, i.e., can't be removed using the <<cluster-update-settings>> API,
  322. you can run the following commands to remove one or more cluster settings.
  323. [source,txt]
  324. ----
  325. node$ ./bin/elasticsearch-node remove-settings xpack.monitoring.exporters.my_exporter.host
  326. WARNING: Elasticsearch MUST be stopped before running this tool.
  327. The following settings will be removed:
  328. xpack.monitoring.exporters.my_exporter.host: "10.1.2.3"
  329. You should only run this tool if you have incompatible settings in the
  330. cluster state that prevent the cluster from forming.
  331. This tool can cause data loss and its use should be your last resort.
  332. Do you want to proceed?
  333. Confirm [y/N] y
  334. Settings were successfully removed from the cluster state
  335. ----
  336. You can also use wildcards to remove multiple settings, for example using
  337. [source,txt]
  338. ----
  339. node$ ./bin/elasticsearch-node remove-settings xpack.monitoring.*
  340. ----
  341. [discrete]
  342. ==== Removing custom metadata from the cluster state
  343. If the on-disk cluster state contains custom metadata that prevents the node
  344. from starting up and loading the cluster state, you can run the following
  345. commands to remove this custom metadata.
  346. [source,txt]
  347. ----
  348. node$ ./bin/elasticsearch-node remove-customs snapshot_lifecycle
  349. WARNING: Elasticsearch MUST be stopped before running this tool.
  350. The following customs will be removed:
  351. snapshot_lifecycle
  352. You should only run this tool if you have broken custom metadata in the
  353. cluster state that prevents the cluster state from being loaded.
  354. This tool can cause data loss and its use should be your last resort.
  355. Do you want to proceed?
  356. Confirm [y/N] y
  357. Customs were successfully removed from the cluster state
  358. ----
  359. [discrete]
  360. ==== Unsafe cluster bootstrapping
  361. Suppose your cluster had five master-eligible nodes and you have permanently
  362. lost three of them, leaving two nodes remaining.
  363. * Run the tool on the first remaining node, but answer `n` at the confirmation
  364. step.
  365. [source,txt]
  366. ----
  367. node_1$ ./bin/elasticsearch-node unsafe-bootstrap
  368. WARNING: Elasticsearch MUST be stopped before running this tool.
  369. Current node cluster state (term, version) pair is (4, 12)
  370. You should only run this tool if you have permanently lost half or more
  371. of the master-eligible nodes in this cluster, and you cannot restore the
  372. cluster from a snapshot. This tool can cause arbitrary data loss and its
  373. use should be your last resort. If you have multiple surviving master
  374. eligible nodes, you should run this tool on the node with the highest
  375. cluster state (term, version) pair.
  376. Do you want to proceed?
  377. Confirm [y/N] n
  378. ----
  379. * Run the tool on the second remaining node, and again answer `n` at the
  380. confirmation step.
  381. [source,txt]
  382. ----
  383. node_2$ ./bin/elasticsearch-node unsafe-bootstrap
  384. WARNING: Elasticsearch MUST be stopped before running this tool.
  385. Current node cluster state (term, version) pair is (5, 3)
  386. You should only run this tool if you have permanently lost half or more
  387. of the master-eligible nodes in this cluster, and you cannot restore the
  388. cluster from a snapshot. This tool can cause arbitrary data loss and its
  389. use should be your last resort. If you have multiple surviving master
  390. eligible nodes, you should run this tool on the node with the highest
  391. cluster state (term, version) pair.
  392. Do you want to proceed?
  393. Confirm [y/N] n
  394. ----
  395. * Since the second node has a greater term it has a fresher cluster state, so
  396. it is better to unsafely bootstrap the cluster using this node:
  397. [source,txt]
  398. ----
  399. node_2$ ./bin/elasticsearch-node unsafe-bootstrap
  400. WARNING: Elasticsearch MUST be stopped before running this tool.
  401. Current node cluster state (term, version) pair is (5, 3)
  402. You should only run this tool if you have permanently lost half or more
  403. of the master-eligible nodes in this cluster, and you cannot restore the
  404. cluster from a snapshot. This tool can cause arbitrary data loss and its
  405. use should be your last resort. If you have multiple surviving master
  406. eligible nodes, you should run this tool on the node with the highest
  407. cluster state (term, version) pair.
  408. Do you want to proceed?
  409. Confirm [y/N] y
  410. Master node was successfully bootstrapped
  411. ----
  412. [discrete]
  413. ==== Detaching nodes from their cluster
  414. After unsafely bootstrapping a new cluster, run the `elasticsearch-node
  415. detach-cluster` command to detach all remaining nodes from the failed cluster
  416. so they can join the new cluster:
  417. [source, txt]
  418. ----
  419. node_3$ ./bin/elasticsearch-node detach-cluster
  420. WARNING: Elasticsearch MUST be stopped before running this tool.
  421. You should only run this tool if you have permanently lost all of the
  422. master-eligible nodes in this cluster and you cannot restore the cluster
  423. from a snapshot, or you have already unsafely bootstrapped a new cluster
  424. by running `elasticsearch-node unsafe-bootstrap` on a master-eligible
  425. node that belonged to the same cluster as this node. This tool can cause
  426. arbitrary data loss and its use should be your last resort.
  427. Do you want to proceed?
  428. Confirm [y/N] y
  429. Node was successfully detached from the cluster
  430. ----
  431. [discrete]
  432. ==== Bypassing version checks
  433. Run the `elasticsearch-node override-version` command to overwrite the version
  434. stored in the data path so that a node can start despite being incompatible
  435. with the data stored in the data path:
  436. [source, txt]
  437. ----
  438. node$ ./bin/elasticsearch-node override-version
  439. WARNING: Elasticsearch MUST be stopped before running this tool.
  440. This data path was last written by Elasticsearch version [x.x.x] and may no
  441. longer be compatible with Elasticsearch version [y.y.y]. This tool will bypass
  442. this compatibility check, allowing a version [y.y.y] node to start on this data
  443. path, but a version [y.y.y] node may not be able to read this data or may read
  444. it incorrectly leading to data loss.
  445. You should not use this tool. Instead, continue to use a version [x.x.x] node
  446. on this data path. If necessary, you can use reindex-from-remote to copy the
  447. data from here into an older cluster.
  448. Do you want to proceed?
  449. Confirm [y/N] y
  450. Successfully overwrote this node's metadata to bypass its version compatibility checks.
  451. ----