Elasticsearch - Change nodes to data only

Hi All,

I have an 8 node cluster which is made up of the following roles:

  • 3 master-only nodes
  • 5 master + data nodes

I am planning on having the 5 master + data nodes converted to data only and was planning on following this procedure to do it:

  1. Use POST /_cluster/voting_config_exclusions?node_names=node_name and exclude all the master + data nodes from the voting configuration
  2. On the designated data nodes update Elasticsearch.yml to remove master role from the node.roles parameter.
  3. On the designated data nodes update Elasticsearch.yml to set discovery.seed_hosts to only have the IP addresses of the master-only nodes
  4. Restart the data nodes one by one.

Would the steps outlined above be the correct way of handling this situation? Or is there any better way that this could be accomplished. My goal is to have this done with no downtime on the cluster.

Thank you

In case someone encounters the same scenario as myself, if the steps I've outlined in my original steps are followed this will work. I have managed to this with version 7.12.1 and didn't encounter any issues.

Once I've added a node to the voting exclusion I checked that the exclusion was applied with:

GET /_cluster/state?filter_path=metadata.cluster_coordination.voting_config_exclusions

Apart from that the Node ID should also not show up in here if has been excluded:

GET /_cluster/state?filter_path=metadata.cluster_coordination.last_committed_config