The following process can be performed one node at a time, to ensure continued service.

# Disable shard allocation
$ curl -X PUT "192.168.1.90:9200/_cluster/settings/?pretty" -H 'Content-Type: application/json' -d'
{
  "persistent": {
    "cluster.routing.allocation.enable": "none"
  }
}
'
{
  "acknowledged" : true,
  "persistent" : {
    "cluster" : {
      "routing" : {
        "allocation" : {
          "enable" : "none"
        }
      }
    }
  },
  "transient" : { }
}

# Stop non-essential indexing and performa a synced flush (increase shard recovery post update)
$ curl -X POST "192.168.1.90:9200/_flush/synced/?pretty"
{
  "_shards" : {
    "total" : 42,
    "successful" : 42,
    "failed" : 0
  },
  "logstash-2019.01.22" : {
    "total" : 10,
    "successful" : 10,
    "failed" : 0
  },
  "logstash-2019.01.21" : {
    "total" : 10,
    "successful" : 10,
    "failed" : 0
  },
  "logstash-2019.01.20" : {
    "total" : 10,
    "successful" : 10,
    "failed" : 0
  },
  "logstash-2019.01.19" : {
    "total" : 10,
    "successful" : 10,
    "failed" : 0
  },
  ".kibana_1" : {
    "total" : 2,
    "successful" : 2,
    "failed" : 0
  }
}

# Stop ElasticSearch
$ sudo systemctl stop elasticsearch.service

# Apply the updates
$ sudo yum update

# Upgrade any plugins in use, i.e. SearchGuard
$ 

# Start ElasticSearch 
$ sudo systemctl start elasticsearch.service

# Confirm the node is back online in the cluster
$ curl -X GET "192.168.1.90:9200/_cat/nodes/?pretty"

# Re-enable shard allocation
$ curl -X PUT "192.168.1.90:9200/_cluster/settings/?pretty" -H 'Content-Type: application/json' -d'
{
  "persistent": {
    "cluster.routing.allocation.enable": null
  }
}
'
{
  "acknowledged" : true,
  "persistent" : { },
  "transient" : { }
}

# Check node health while waiting for the shard allocation to complete, i.e. status green.
$ curl -X GET "192.168.1.90:9200/_cat/health"
1550708492 00:21:32 SecurityMetrics green 3 2 42 21 0 0 0 0 - 100.0%

# Monitor the status of indiviual shards.
$ curl -X GET "192.168.1.90:9200/_cat/recovery"
logstash-2019.01.22 0 2s    peer        done 192.168.1.90  elasticnodev01 192.168.1.188 elasticnodev02 n/a n/a 1 1 100.0% 1 230 230 100.0% 230 2612 2612 100.0%
logstash-2019.01.22 0 26ms  empty_store done n/a           n/a            192.168.1.90  elasticnodev01 n/a n/a 0 0 0.0%   0 0   0   0.0%   0   0    0    100.0%
logstash-2019.01.22 1 2.1s  peer        done 192.168.1.90  elasticnodev01 192.168.1.188 elasticnodev02 n/a n/a 1 1 100.0% 1 230 230 100.0% 230 2620 2620 100.0%
logstash-2019.01.22 1 39ms  empty_store done n/a           n/a            192.168.1.90  elasticnodev01 n/a n/a 0 0 0.0%   0 0   0   0.0%   0   0    0    100.0%
logstash-2019.01.22 2 1.3s  peer        done 192.168.1.90  elasticnodev01 192.168.1.188 elasticnodev02 n/a n/a 1 1 100.0% 1 230 230 100.0% 230 2712 2712 100.0%
logstash-2019.01.22 2 29ms  empty_store done n/a           n/a            192.168.1.90  elasticnodev01 n/a n/a 0 0 0.0%   0 0   0   0.0%   0   0    0    100.0%
logstash-2019.01.22 3 1.3s  peer        done 192.168.1.90  elasticnodev01 192.168.1.188 elasticnodev02 n/a n/a 1 1 100.0% 1 230 230 100.0% 230 2600 2600 100.0%
logstash-2019.01.22 3 19ms  empty_store done n/a           n/a            192.168.1.90  elasticnodev01 n/a n/a 0 0 0.0%   0 0   0   0.0%   0   0    0    100.0%
logstash-2019.01.22 4 823ms peer        done 192.168.1.90  elasticnodev01 192.168.1.188 elasticnodev02 n/a n/a 1 1 100.0% 1 230 230 100.0% 230 2661 2661 100.0%
logstash-2019.01.22 4 13ms  empty_store done n/a           n/a            192.168.1.90  elasticnodev01 n/a n/a 0 0 0.0%   0 0   0   0.0%   0   0    0    100.0%
logstash-2019.01.21 0 475ms peer        done 192.168.1.90  elasticnodev01 192.168.1.188 elasticnodev02 n/a n/a 0 0 0.0%   0 0   0   0.0%   0   1041 1041 100.0%
logstash-2019.01.21 0 564ms peer        done 192.168.1.188 elasticnodev02 192.168.1.90  elasticnodev01 n/a n/a 1 1 100.0% 1 230 230 100.0% 230 23   23   100.0%
logstash-2019.01.21 1 396ms peer        done 192.168.1.90  elasticnodev01 192.168.1.188 elasticnodev02 n/a n/a 0 0 0.0%   0 0   0   0.0%   0   3031 1026 33.9%
logstash-2019.01.21 1 14ms  empty_store done n/a           n/a            192.168.1.90  elasticnodev01 n/a n/a 0 0 0.0%   0 0   0   0.0%   0   0    0    100.0%
logstash-2019.01.21 2 360ms peer        done 192.168.1.90  elasticnodev01 192.168.1.188 elasticnodev02 n/a n/a 0 0 0.0%   0 0   0   0.0%   0   950  950  100.0%
logstash-2019.01.21 2 557ms peer        done 192.168.1.188 elasticnodev02 192.168.1.90  elasticnodev01 n/a n/a 1 1 100.0% 1 230 230 100.0% 230 8    8    100.0%
logstash-2019.01.21 3 403ms peer        done 192.168.1.90  elasticnodev01 192.168.1.188 elasticnodev02 n/a n/a 0 0 0.0%   0 0   0   0.0%   0   3100 1010 32.6%
logstash-2019.01.21 3 21ms  empty_store done n/a           n/a            192.168.1.90  elasticnodev01 n/a n/a 0 0 0.0%   0 0   0   0.0%   0   0    0    100.0%
logstash-2019.01.21 4 395ms peer        done 192.168.1.90  elasticnodev01 192.168.1.188 elasticnodev02 n/a n/a 0 0 0.0%   0 0   0   0.0%   0   967  967  100.0%
logstash-2019.01.21 4 566ms peer        done 192.168.1.188 elasticnodev02 192.168.1.90  elasticnodev01 n/a n/a 1 1 100.0% 1 230 230 100.0% 230 22   22   100.0%
logstash-2019.01.20 0 53ms  peer        done 192.168.1.90  elasticnodev01 192.168.1.188 elasticnodev02 n/a n/a 0 0 0.0%   0 0   0   0.0%   0   0    0    100.0%
logstash-2019.01.20 0 624ms peer        done 192.168.1.188 elasticnodev02 192.168.1.90  elasticnodev01 n/a n/a 1 1 100.0% 1 230 230 100.0% 230 13   13   100.0%
logstash-2019.01.20 1 78ms  peer        done 192.168.1.90  elasticnodev01 192.168.1.188 elasticnodev02 n/a n/a 0 0 0.0%   0 0   0   0.0%   0   0    0    100.0%
logstash-2019.01.20 1 25ms  empty_store done n/a           n/a            192.168.1.90  elasticnodev01 n/a n/a 0 0 0.0%   0 0   0   0.0%   0   0    0    100.0%
logstash-2019.01.20 2 104ms peer        done 192.168.1.90  elasticnodev01 192.168.1.188 elasticnodev02 n/a n/a 0 0 0.0%   0 0   0   0.0%   0   0    0    100.0%
logstash-2019.01.20 2 565ms peer        done 192.168.1.188 elasticnodev02 192.168.1.90  elasticnodev01 n/a n/a 1 1 100.0% 1 230 230 100.0% 230 11   11   100.0%
logstash-2019.01.20 3 72ms  peer        done 192.168.1.90  elasticnodev01 192.168.1.188 elasticnodev02 n/a n/a 0 0 0.0%   0 0   0   0.0%   0   0    0    100.0%
logstash-2019.01.20 3 27ms  empty_store done n/a           n/a            192.168.1.90  elasticnodev01 n/a n/a 0 0 0.0%   0 0   0   0.0%   0   0    0    100.0%
logstash-2019.01.20 4 49ms  peer        done 192.168.1.90  elasticnodev01 192.168.1.188 elasticnodev02 n/a n/a 0 0 0.0%   0 0   0   0.0%   0   0    0    100.0%
logstash-2019.01.20 4 605ms peer        done 192.168.1.188 elasticnodev02 192.168.1.90  elasticnodev01 n/a n/a 1 1 100.0% 1 230 230 100.0% 230 12   12   100.0%
logstash-2019.01.19 0 118ms peer        done 192.168.1.90  elasticnodev01 192.168.1.188 elasticnodev02 n/a n/a 0 0 0.0%   0 0   0   0.0%   0   0    0    100.0%
logstash-2019.01.19 0 909ms peer        done 192.168.1.188 elasticnodev02 192.168.1.90  elasticnodev01 n/a n/a 1 1 100.0% 1 230 230 100.0% 230 1    1    100.0%
logstash-2019.01.19 1 111ms peer        done 192.168.1.90  elasticnodev01 192.168.1.188 elasticnodev02 n/a n/a 0 0 0.0%   0 0   0   0.0%   0   0    0    100.0%
logstash-2019.01.19 1 41ms  empty_store done n/a           n/a            192.168.1.90  elasticnodev01 n/a n/a 0 0 0.0%   0 0   0   0.0%   0   0    0    100.0%
logstash-2019.01.19 2 153ms peer        done 192.168.1.90  elasticnodev01 192.168.1.188 elasticnodev02 n/a n/a 0 0 0.0%   0 0   0   0.0%   0   0    0    100.0%
logstash-2019.01.19 2 1.4s  peer        done 192.168.1.188 elasticnodev02 192.168.1.90  elasticnodev01 n/a n/a 1 1 100.0% 1 230 230 100.0% 230 27   25   92.6%
logstash-2019.01.19 3 603ms peer        done 192.168.1.90  elasticnodev01 192.168.1.188 elasticnodev02 n/a n/a 0 0 0.0%   0 0   0   0.0%   0   0    0    100.0%
logstash-2019.01.19 3 125ms empty_store done n/a           n/a            192.168.1.90  elasticnodev01 n/a n/a 0 0 0.0%   0 0   0   0.0%   0   0    0    100.0%
logstash-2019.01.19 4 623ms peer        done 192.168.1.90  elasticnodev01 192.168.1.188 elasticnodev02 n/a n/a 0 0 0.0%   0 0   0   0.0%   0   0    0    100.0%
logstash-2019.01.19 4 859ms peer        done 192.168.1.188 elasticnodev02 192.168.1.90  elasticnodev01 n/a n/a 1 1 100.0% 1 230 230 100.0% 230 100  100  100.0%
.kibana_1           0 36ms  peer        done 192.168.1.90  elasticnodev01 192.168.1.188 elasticnodev02 n/a n/a 0 0 0.0%   0 0   0   0.0%   0   0    0    100.0%
.kibana_1           0 269ms peer        done 192.168.1.188 elasticnodev02 192.168.1.90  elasticnodev01 n/a n/a 0 0 0.0%   0 0   0   0.0%   0   0    0    100.0%

Resources

Official Documentation