This is the process for in-place upgrades of Elasticsearch (ES), meaning ones that can use the existing Search feed and index data.
Info | ||
---|---|---|
| ||
|
Upgrading Elasticsearch by script
On each node in your Elasticsearch cluster, follow this process and run the files from your Swarm download bundle:
Query the running Elasticsearch cluster, before upgrade, for the list of nodes.
Code Block language bash curl -i http://ELASTICSEARCH:9200/_cat/nodes
Note which node is starred. That is the Elasticsearch master node which you should upgrade last to avoid problems electing a new one.
- Backup your existing
elasticsearch.yml
, so that you have a record of any customizations you may have made. - If you have customized
path.data
, create a symbolic (soft) link:symlink /var/lib/elasticsearch
. If you cannot, perform the upgrade manually, as described below. When upgrading Elasticsearch 6, start by installing the latest Swarm Search, which is the caringo-elasticsearch-search RPM.
Code Block language bash yum install caringo-elasticsearch-search-VERSION.noarch.rpm
Info title Tip If you inadvertently install the Elasticsearch 7 RPM, it will fail with the error: "
ES_PATH_CONF must be set to the configuration path chown: cannot access '/etc/elasticsearch/elasticsearch.keystore': No such file or directory
". Simply install the caringo-elastisearch-search-7.0.0 RPM now and proceed.Run the script that installs and configures the upgrade.
The script detects that Elasticsearch 6 is installed and thatdiscovery.zen.unicast.hosts
is configured, so it runs as with--upgrade
instead of configuring a new cluster.Code Block language bash /usr/share/caringo-elasticsearch-search/bin/configure_elasticsearch_with_swarm_search.py
- Compare your backup file to the newly created
elasticsearch.yml
and add back any customizations you need, such asnetwork.host
(which defaults to_site_
, meaning all interfaces). Verify all nodes are accounted for, that all shards are assigned, and that the status is green.
Code Block language bash curl -i 'http://ELASTICSEARCH:9200/_cat/health?v'
If Elasticsearch 7 is already installed, the script updates the configuration files and restarts the service for you.
Info | ||
---|---|---|
| ||
If the Elasticsearch service fails and
|
Upgrading Elasticsearch manually
If you should need to upgrade manually, these are the steps that the script automates:
- It fixes
/etc/sysconfig/elasticsearch
to be the correct ES6 version (it's also same as ES7). - It increases the
systemd
timeout in/etc/systemd/system/elasticsearch.service.d/override.conf
(see github.com/elastic/elasticsearch/issues/60140) - After refreshing the config files for Elasticsearch 6, it prompts to continue with the yum upgrade to 7.5.2.
- It disables shard allocation and does a POST synced-flush for safer rolling upgrades.
Important: Disabling shard allocation or sync-flush can fail to contact the node, but do not proceed to upgrading the next node until the cluster health is green again. - It uninstalls the Prometheus Exporter plugin if it exists.
- It shells out to yum to install the Elasticsearch 7 RPM in the current directory or from artifacts.elastic.co, if unavailable.
- It updates elasticsearch.yml for version 7 compatibility, including
discovery.initial_master_nodes
instead ofdiscovery.zen.unicast.hosts
, andjvm.options
. - It starts the upgraded Elasticsearch 7 and waits for it to be ready.
- If the cluster health is green or yellow, it re-enables shard allocation and prompts you to repeat these two steps on the next node.