Upgrade Elasticsearch clustera z verzie 5.5.1 na verziu 6.8.1
- Autor : Miroslav Kohútik
- Operačný Systém : Ubuntu 16.04
V tomto návode si ukážeme ako aktualizovať Elasticsearch cluster, ktorý sa nachádza na jednom zariadení.
Ako príklad použijeme náš Elasticsearch cluster, ktorý pozostáva z piatich uzlov.
Pred vykonaním aktualizácie treba zastaviť všetky uzly
sudo systemctl stop elasticsearch_data1
sudo systemctl stop elasticsearch_data2
sudo systemctl stop elasticsearch_data3
sudo systemctl stop elasticsearch_ingest
sudo systemctl stop elasticsearch_master
Stiahneme si inštalačný balík pre Elasticsearch verziu 6.8.1
wget https://artifacts.elastic.co/downloads/elasticsearch/elasticsearch-6.8.1.deb
Nainštalujeme novú verziu
sudo dpkg -i elasticsearch-6.8.1.deb
Elasticsearch by sme teraz mali mať úspešne aktualizovaný na verziu 6.8.1, avšak náš cluster ešte nemôžeme spustiť. Najprv musíme manuálne aktualizovať Linuxovú službu pre každý uzol, pretože definícia služieb pre verziu 6.x je mierne odlišná od verzie 5.x.
Uzly nášho clustera sa nachádzajú v /usr/lib/systemd/system/
Tu je úkážka časti súboru /usr/lib/systemd/system/elasticsearch_master.service:
[Service]
Environment=ES_HOME=/usr/share/elasticsearch
Environment=CONF_DIR=/etc/master
Environment=DATA_DIR=/var/lib/elasticsearch/master
Environment=LOG_DIR=/var/log/elasticsearch/master
Environment=PID_DIR=/var/run/elasticsearch
EnvironmentFile=-/etc/default/elasticsearch
WorkingDirectory=/usr/share/elasticsearch
User=elasticsearch
Group=elasticsearch
ExecStartPre=/usr/share/elasticsearch/bin/elasticsearch-systemd-pre-exec
ExecStart=/usr/share/elasticsearch/bin/elasticsearch \
-p ${PID_DIR}/elasticsearch.pid \
-Edefault.path.logs=${LOG_DIR} \
-Edefault.path.data=${DATA_DIR} \
-Edefault.path.conf=${CONF_DIR}
Tu je tá istá časť toho istého súboru aktualizovaná pre použite s verziou 6.x:
[Service]
Environment=ES_HOME=/usr/share/elasticsearch
Environment=PID_DIR=/var/run/elasticsearch
EnvironmentFile=-/etc/default/elasticsearch
LimitMEMLOCK=infinity
RuntimeDirectory=elasticsearch
PrivateTmp=true
Environment=ES_PATH_CONF=/etc/master
WorkingDirectory=/usr/share/elasticsearch
User=elasticsearch
Group=elasticsearch
ExecStart=/usr/share/elasticsearch/bin/elasticsearch -p ${PID_DIR}/elasticsearch.pid --quiet
Uistite sa, že pre každú jednu premennú, ktorú ste nastavili vo svojich elasticsearch_.service súboroch, taktiež zakomentujete jej ekvivalent v súbore /etc/default/elasticsearch, inak budú vaše zmeny potlačené hodnotami v tomto súbore.
Súbory služieb pre zvyšné uzly (v našom prípade súbory: elasticsearch_ingest.service, elasticsearch_data1.service, elasticsearch_data2.service a elasticsearch_data3.service) treba aktualizovať obdobným spôsobom.
Slúžba pre každú uzol taktiež potrebuje svoj vlastný elasticsearch.yaml súbor. Tento súbor by sa mal nachádzať na ceste nastavenej v premennej ES_PATH_CONF v súbore služby uvedenom vyššie (v prípade master uzla to je adresár /etc/master/).
Tu je príklad elasticsearch.yaml súboru nachádzajúcom sa v /etc/master/. Venujte pozornosť atribútom node.master, node.data, a node.ingest, tieto musia byť nastavené podľa toho, akú rolu má nastavený daný uzol a sú rozdielne pre uzly odlišného druhu.
# ---------------------------------- Cluster -----------------------------------
# Use a descriptive name for your cluster:
cluster.name: elastic
# ------------------------------------ Node ------------------------------------
# Use a descriptive name for the node:
node.name: master
# Add custom attributes to the node:
node.master: true
node.data: false
node.ingest: false
node.max_local_storage_nodes: 5
# ----------------------------------- Paths ------------------------------------
# Path to directory where to store the data (separate multiple locations by comma):
path.data: /data/elasticsearch/data_master
# Path to log files:
path.logs: /var/log/elasticsearch/master
# ----------------------------------- Memory -----------------------------------
# Lock the memory on startup:
bootstrap.memory_lock: true
# Make sure that the heap size is set to about half the memory available
# on the system and that the owner of the process is allowed to use this
# limit.
Každý uzol taktiež používa odlišný pár HTTP a TCP portov špecifikovaných atribútmi http.port a transport.tcp.port.
# ---------------------------------- Network -----------------------------------
# Set the bind address to a specific IP (IPv4 or IPv6):
network.host: 192.168.1.1
# Set a custom port for HTTP:
http.port: 9200
transport.tcp.port: 9300
Master uzol musí byť schopný objaviť ostatné uzly v clusteri, preto atrubút discovery.zen.ping.unicast.hosts obsahuje zoznam IP adries a transportných portov všetkých ostatných uzlov. Na uzloch iných ako master bude obsahovať len IP adresu a transportný port mastera [“192.168.1.1:9300”]:
# --------------------------------- Discovery ----------------------------------
# Pass an initial list of hosts to perform discovery when new node is started:
# The default list of hosts is ["127.0.0.1", "[::1]"]
discovery.zen.ping.unicast.hosts: ["192.168.1.1:9301","192.168.1.1:9302","192.168.1.1:9303","192.168.1.1:9304"]
Teraz by sme už mali byť schopní spustiť náš Elasticsearch cluster:
sudo systemctl stop elasticsearch_master
sudo systemctl stop elasticsearch_ingest
sudo systemctl stop elasticsearch_data1
sudo systemctl stop elasticsearch_data2
sudo systemctl stop elasticsearch_data3