Elastic Search HTTPConnectionPool(host='127.0.0.1', port=9200): Max retries exceeded
Habe ich einen Elastic Search server, die ich Abfrage die beide von einer live-website, und durch eine Django-management-Befehl. Die management-Befehl läuft mit Sellerie beat bei 3 Uhr GMT zur Synchronisation von Daten von einem externen Dienst. Manchmal (aber nicht immer) dieses Kommando wird ausgeführt, elastic search erscheint, abstürzt und ich bekomme die folgende Fehlermeldung in meinem error-log.
[09/Jan/2014 08:03:46] ERROR [django.request:212] Internal Server Error: /
Traceback (most recent call last):
File
"/srv/www/site.co.uk/env/local/lib/python2.7/site-packages/django/core/handlers/base.py",
line 115, in get_response
response = callback(request, *callback_args, **callback_kwargs)
File
"/srv/www/site.co.uk/env/local/lib/python2.7/site-packages/django/views/generic/base.py",
line 68, in view
return self.dispatch(request, *args, **kwargs)
File
"/srv/www/site.co.uk/env/local/lib/python2.7/site-packages/django/views/generic/base.py",
line 86, in dispatch
return handler(request, *args, **kwargs)
File
"/srv/www/site.co.uk/env/local/lib/python2.7/site-packages/django/views/generic/base.py",
line 153, in get
context = self.get_context_data(**kwargs)
File
"/srv/www/site.co.uk/clothes_comparison/clothes_comparison/views.py",
line 56, in get_context_data
fields=['id', 'name', 'price', 'images', 'advertiser']
File
"/srv/www/site.co.uk/env/local/lib/python2.7/site-packages/pyelasticsearch/client.py",
line 96, in decorate
return func(*args, query_params=query_params, **kwargs)
File
"/srv/www/site.co.uk/env/local/lib/python2.7/site-packages/pyelasticsearch/client.py",
line 512, in multi_get
'GET', ['_mget'], {'docs': docs}, query_params=query_params)
File
"/srv/www/site.co.uk/env/local/lib/python2.7/site-packages/pyelasticsearch/client.py",
line 238, in send_request
**({'data': request_body} if body else {}))
File
"/srv/www/site.co.uk/env/local/lib/python2.7/site-packages/requests/sessions.py",
line 347, in get
return self.request('GET', url, **kwargs)
File
"/srv/www/site.co.uk/env/local/lib/python2.7/site-packages/requests/sessions.py",
line 335, in request
resp = self.send(prep, **send_kwargs)
File
"/srv/www/site.co.uk/env/local/lib/python2.7/site-packages/requests/sessions.py",
line 438, in send
r = adapter.send(request, **kwargs)
File
"/srv/www/site.co.uk/env/local/lib/python2.7/site-packages/requests/adapters.py",
line 327, in send
raise ConnectionError(e)
ConnectionError: HTTPConnectionPool(host='127.0.0.1', port=9200): Max
retries exceeded with url: /_mget (Caused by <class 'socket.error'>: [Errno 111]
Connection refused)
Ich bin mit pyelasticsearch zu verbinden, Elastic Search mit dem folgenden code in meine settings.py Datei:
try:
ES_CON
except NameError:
ES_CON = None
if not ES_CON:
ES_CON = ElasticSearch(ELASTICSEARCH_URI)
Jegliche Hilfe würde sehr geschätzt werden.
- Die Ausnahme, die Sie sehen, ist aufgrund der elastic search-Instanz die Verbindung ablehnt. Es scheint, als würde entweder dein server läuft aus der verfügbaren ports zu verbinden, oder elastic search-Instanz ist zu beschäftigt, um zu akzeptieren eine Verbindung von der Django-app. Dies scheint bezeichnend, wie Sie konfiguriert ist/sind, die Verwendung von ES-Instanz.
- Hat es zu tun mit der Art, wie ich die Verbindung zu ElasticSearch? pyelasticsearch besagt, dass es verbindungen werden automatisch die Bündelung aber ich verstehe nicht, wie könnte es anstrengend sein, die Steckdosen, wenn das der Fall war.
- Diese nicht streng beziehen sich auf dein problem, aber ich schlage vor, Sie verwenden die offizielle python-client (elasticsearch-py), die thread-sicher und scheint zu haben eine bessere connection handling. Ich habe den Schalter von pyelasticsearch zu elasticsearch-py ziemlich leicht und habe festgestellt, dass es stabiler und schneller.
- Danke @Erve1879 werde ich sicherlich wechseln, die über und sehen, ob es behebt Dinge.
- deine Lösung sieht gut aus. Wenn Sie möchten, posten Sie als Antwort, dann bin ich glücklich, markieren Sie es als richtig vorausgesetzt, der Standort bleibt stabil für die nächsten 24h.
Du musst angemeldet sein, um einen Kommentar abzugeben.
Ich würde vorschlagen, mit der offiziellen Elasticsearch python-client: elasticsearch-py die zuverlässige Verbindung der Handhabung, ist thread-safe usw. Es ist auch schneller (laut dem Autor, wer ist Teil des Elasticsearch-team).
Können Sie dann Ihre
es = Elasticsearch()
entweder an der Spitze dertasks.py
oder in z.B.core.helpers
- und importes
von dort.