Bir elasticsearch düğümü nasıl durdurulur / kapatılır?


87

Bir elasticsearch düğümünü yeni bir yapılandırmayla yeniden başlatmak istiyorum. Bir düğümü zarif bir şekilde kapatmanın en iyi yolu nedir?

İşlemi sonlandırmak, sunucuyu kapatmanın en iyi yolu mu yoksa düğümü kapatmak için kullanabileceğim sihirli bir URL var mı?

Yanıtlar:


127

Cevap güncellendi.

_shutdown API, elasticsearch 2.x'de kaldırılmıştır.

Bazı seçenekler:

  • Terminalinizde (temelde geliştirme modu), "Ctrl-C" yazmanız yeterlidir

  • Bir arka plan programı olarak başlattıysanız ( -d) PID'yi bulun ve işlemi SIGTERMsonlandırın: Elasticsearch'ü temiz bir şekilde kapatır ( kill -15 PID)

  • Hizmet olarak çalışıyorsanız, aşağıdaki gibi bir şey çalıştırın service elasticsearch stop:

Önceki cevap. Artık 1.6'dan kaldırılmıştır.

Evet. Bkz yönetici küme düğümleri kapatma belgelerini

Temel olarak:

# Shutdown local node
$ curl -XPOST 'http://localhost:9200/_cluster/nodes/_local/_shutdown'

# Shutdown all nodes in the cluster
$ curl -XPOST 'http://localhost:9200/_shutdown'

2
Bu nedenle, kapatma API'sinin elasticsearch 1.6'dan itibaren kullanımdan kaldırıldığı görülmektedir (sağlanan bağlantıya göre). Kapatmanın önerilen yeni yolu nedir?
Mike

2
Artık kullanımdan kaldırıldığını düşünüyorum çünkü artık bir servis olarak yükleyebilir ve service stop elasticsearch'ü çalıştırabilirsiniz. Sadece testler için çalıştırırsanız, CTRL + C'ye basın ve bitirdiniz.
dadoonet

"gracefull" => parçanızı daha önce yeniden yönlendirme API'si elastik.co/guide/en/elasticsearch/reference/2.4/…
Thomas Decaux

23

Yalnızca yeni yapılandırma uygulamak istiyorsanız, kapatmanıza gerek yoktur.

$ sudo service elasticsearch restart

Ama yine de kapatmak istiyorsanız:

$ sudo service elasticsearch stop

VEYA

$ sudo systemctl stop elasticsearch.service

$ sudo systemctl restart elasticsearch.service

Liman işçisi:

docker restart <elasticsearch-container-name or id>


1
soru, hizmeti yeniden başlatmakla değil, durdurmakla ilgilidir.
Jean-François Fabre

1
Yeni yapılandırmayı uygulamak için sunucuyu kapatmanız gerekir. bu bir cevap değil, problemine bir çözüm :)
Ijaz Ahmad Khan


7

Hizmeti durdurmak ve daemon'u öldürmek, bir düğümü kapatmanın gerçekten doğru yollarıdır. Ancak, bakım için bir düğümü kapatmak istiyorsanız bunu doğrudan yapmanız önerilmez. Aslında, kopyalarınız yoksa verileri kaybedersiniz.

Bir düğümü doğrudan kapattığınızda, Elasticsearch tekrar çevrimiçi olması için 1 dakika (varsayılan süre) bekleyecektir. Aksi takdirde, o düğümdeki parçaları diğer düğümlere tahsis etmeye başlayacak ve çok fazla IO israf edecektir.

Tipik bir yaklaşım, aşağıdakileri yayınlayarak parça tahsisini geçici olarak devre dışı bırakmak olabilir:

PUT _cluster/settings
{
  "persistent": {
    "cluster.routing.allocation.enable": "none"
  }
}

Şimdi, bir düğümü kaldırdığınızda, ES bu düğümden diğer düğümlere parça ayırmaya çalışmaz ve bakım etkinliğinizi gerçekleştirebilir ve ardından düğüm açıldığında, parça tahsisini yeniden etkinleştirebilirsiniz:

PUT _cluster/settings
{
  "persistent": {
    "cluster.routing.allocation.enable": "all"
  }
}

Kaynak: https://www.elastic.co/guide/en/elasticsearch/reference/5.5/restart-upgrade.html

Tüm dizinleriniz için eşlemeniz yoksa, bu tür bir etkinliği gerçekleştirmek bazı dizinlerde kesinti yaşayacaktır. Bu durumda daha net bir yol, düğümü indirmeden önce tüm parçaları diğer düğümlere taşımaktır:

PUT _cluster/settings
{
  "transient" : {
    "cluster.routing.allocation.exclude._ip" : "10.0.0.1"
  }
}

Bu, tüm parçaları 10.0.0.1diğer düğümlere taşıyacaktır (verilere bağlı olarak zaman alacaktır). Her şey yapıldığında, düğümü öldürebilir, bakım gerçekleştirebilir ve tekrar çevrimiçi hale getirebilirsiniz. Bu daha yavaş bir işlemdir ve kopyalarınız varsa gerekli değildir.

(Joker karakterlerle _ip, _id, _name yerine gayet iyi çalışacaktır.)

Daha fazla bilgi: https://www.elastic.co/guide/en/elasticsearch/reference/5.5/allocation-filtering.html

Diğer cevaplar bir sürecin nasıl durdurulacağını açıkladı.


4

Elasticsearch için Head eklentisi, Elasticsearch yönetimi için düğümlerin kapatılması dahil harika bir web tabanlı ön uç sağlar. Herhangi bir Elasticsearch komutunu da çalıştırabilir.



2

Windows makinesinde hangi işlemin elasticsearch çalıştırdığını bulamıyorsanız, konsolda çalıştırmayı deneyebilirsiniz:

netstat -a -n -o

Bağlantı noktası elasticsearch'ün çalıştığını arayın, varsayılan 9200. Son sütun, bu bağlantı noktasını kullanan işlem için PID'dir. Konsolda basit komutla kapatabilirsiniz

taskkill /PID here_goes_PID /F

1

Sadece örneğin PID'sini bulmak ve işlemi sonlandırmak istiyorsanız, düğümün 9300 numaralı bağlantı noktasını (varsayılan bağlantı noktası) dinlediğini varsayarak aşağıdaki komutu çalıştırabilirsiniz:

kill -9  $(netstat -nlpt | grep 9200 | cut -d ' ' -f 58 | cut -d '/' -f 1)

Yukarıda belirtilen koddaki 58 ve 1 gibi sayılarla oynamak zorunda kalabilirsiniz.


Varsayılan bağlantı noktası
9200'dür.

1

Localhost'ta bir düğüm çalıştırıyorsanız, kullanmayı deneyin brew service stop elasticsearch

İOS localhost'ta elasticsearch çalıştırıyorum.


0

Docker'daki Elasticsearch'ün yanıtı:

Docker konteynerini durdurmanız yeterli. Günlüğe kaydettiği için zarif bir şekilde durmuş gibi görünüyor:

[INFO ][o.e.n.Node               ] [elastic] stopping ...

0

3 düğümünüz olduğunu düşünürsek.

Kümenizi hazırlayın

export ES_HOST=localhost:9200

# Disable shard allocation
curl -X PUT "$ES_HOST/_cluster/settings" -H 'Content-Type: application/json' -d'
{
  "persistent": {
    "cluster.routing.allocation.enable": "none"
  }
}
'

# Stop non-essential indexing and perform a synced flush
curl -X POST "$ES_HOST/_flush/synced"

Her düğümde elasticsearch hizmetini durdurun

# check nodes
export ES_HOST=localhost:9200
curl -X GET "$ES_HOST/_cat/nodes"

# node 1
systemctl stop elasticsearch.service

# node 2
systemctl stop elasticsearch.service

# node 3
systemctl stop elasticsearch.service

Küme yeniden başlatılıyor

# start
systemctl start elasticsearch.service

# Reenable shard allocation once the node has joined the cluster
curl -X PUT "$ES_HOST/_cluster/settings" -H 'Content-Type: application/json' -d'
{
  "persistent": {
    "cluster.routing.allocation.enable": null
  }
}
'

Elasticseach 6.5 üzerinde test edildi

Kaynak:

  1. https://www.elastic.co/guide/en/elasticsearch/reference/6.5/stopping-elasticsearch.html
  2. https://www.elastic.co/guide/en/elasticsearch/reference/6.5/rolling-upgrades.html
Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.