elasticsearch exceptions ConnectionError
Asked Answered
N

4

11

I am making a Django app. It uses Haystack with elasticsearch as backend.

When I run

./manage.py rebuild_index

I get this error:

aborted.', error(61, 'Connection refused'))) caused by: ProtocolError(('Connection aborted.', error(61, 'Connection refused')))

What could have caused this?

The log:

./manage.py rebuild_index
No handlers could be found for logger "django_facebook.models"

WARNING: This will irreparably remove EVERYTHING from your search index in connection 'default'.
Your choices after this are to restore from backups or rebuild via the `rebuild_index` command.
Are you sure you wish to continue? [y/N] y
Removing all documents from your index because you said so.
Failed to clear Elasticsearch index: ConnectionError(('Connection aborted.', error(61, 'Connection refused'))) caused by: ProtocolError(('Connection aborted.', error(61, 'Connection refused')))
All documents removed.
Indexing 4 restos
ERROR:root:Error updating litchee using default 
Traceback (most recent call last):
  File "/Library/Frameworks/Python.framework/Versions/2.7/lib/python2.7/site-packages/haystack/management/commands/update_index.py", line 221, in handle_label
    self.update_backend(label, using)
  File "/Library/Frameworks/Python.framework/Versions/2.7/lib/python2.7/site-packages/haystack/management/commands/update_index.py", line 266, in update_backend
    do_update(backend, index, qs, start, end, total, self.verbosity)
  File "/Library/Frameworks/Python.framework/Versions/2.7/lib/python2.7/site-packages/haystack/management/commands/update_index.py", line 89, in do_update
    backend.update(index, current_qs)
  File "/Library/Frameworks/Python.framework/Versions/2.7/lib/python2.7/site-packages/haystack/backends/elasticsearch_backend.py", line 184, in update
    bulk_index(self.conn, prepped_docs, index=self.index_name, doc_type='modelresult')
  File "/Library/Frameworks/Python.framework/Versions/2.7/lib/python2.7/site-packages/elasticsearch/helpers/__init__.py", line 145, in bulk
    for ok, item in streaming_bulk(client, actions, **kwargs):
  File "/Library/Frameworks/Python.framework/Versions/2.7/lib/python2.7/site-packages/elasticsearch/helpers/__init__.py", line 104, in streaming_bulk
    resp = client.bulk(bulk_actions, **kwargs)
  File "/Library/Frameworks/Python.framework/Versions/2.7/lib/python2.7/site-packages/elasticsearch/client/utils.py", line 68, in _wrapped
    return func(*args, params=params, **kwargs)
  File "/Library/Frameworks/Python.framework/Versions/2.7/lib/python2.7/site-packages/elasticsearch/client/__init__.py", line 646, in bulk
    params=params, body=self._bulk_body(body))
  File "/Library/Frameworks/Python.framework/Versions/2.7/lib/python2.7/site-packages/elasticsearch/transport.py", line 284, in perform_request
    status, headers, data = connection.perform_request(method, url, params, body, ignore=ignore, timeout=timeout)
  File "/Library/Frameworks/Python.framework/Versions/2.7/lib/python2.7/site-packages/elasticsearch/connection/http_urllib3.py", line 51, in perform_request
    raise ConnectionError('N/A', str(e), e)
ConnectionError: ConnectionError(('Connection aborted.', error(61, 'Connection refused'))) caused by: ProtocolError(('Connection aborted.', error(61, 'Connection refused')))
Traceback (most recent call last):
  File "./manage.py", line 11, in <module>
    execute_from_command_line(sys.argv)
  File "/Library/Frameworks/Python.framework/Versions/2.7/lib/python2.7/site-packages/django/core/management/__init__.py", line 399, in execute_from_command_line
    utility.execute()
  File "/Library/Frameworks/Python.framework/Versions/2.7/lib/python2.7/site-packages/django/core/management/__init__.py", line 392, in execute
    self.fetch_command(subcommand).run_from_argv(self.argv)
  File "/Library/Frameworks/Python.framework/Versions/2.7/lib/python2.7/site-packages/django/core/management/base.py", line 242, in run_from_argv
    self.execute(*args, **options.__dict__)
  File "/Library/Frameworks/Python.framework/Versions/2.7/lib/python2.7/site-packages/django/core/management/base.py", line 285, in execute
    output = self.handle(*args, **options)
  File "/Library/Frameworks/Python.framework/Versions/2.7/lib/python2.7/site-packages/haystack/management/commands/rebuild_index.py", line 16, in handle
    call_command('update_index', **options)
  File "/Library/Frameworks/Python.framework/Versions/2.7/lib/python2.7/site-packages/django/core/management/__init__.py", line 159, in call_command
    return klass.execute(*args, **defaults)
  File "/Library/Frameworks/Python.framework/Versions/2.7/lib/python2.7/site-packages/django/core/management/base.py", line 285, in execute
    output = self.handle(*args, **options)
  File "/Library/Frameworks/Python.framework/Versions/2.7/lib/python2.7/site-packages/haystack/management/commands/update_index.py", line 195, in handle
    return super(Command, self).handle(*items, **options)
  File "/Library/Frameworks/Python.framework/Versions/2.7/lib/python2.7/site-packages/django/core/management/base.py", line 385, in handle
    label_output = self.handle_label(label, **options)
  File "/Library/Frameworks/Python.framework/Versions/2.7/lib/python2.7/site-packages/haystack/management/commands/update_index.py", line 221, in handle_label
    self.update_backend(label, using)
  File "/Library/Frameworks/Python.framework/Versions/2.7/lib/python2.7/site-packages/haystack/management/commands/update_index.py", line 266, in update_backend
    do_update(backend, index, qs, start, end, total, self.verbosity)
  File "/Library/Frameworks/Python.framework/Versions/2.7/lib/python2.7/site-packages/haystack/management/commands/update_index.py", line 89, in do_update
    backend.update(index, current_qs)
  File "/Library/Frameworks/Python.framework/Versions/2.7/lib/python2.7/site-packages/haystack/backends/elasticsearch_backend.py", line 184, in update
    bulk_index(self.conn, prepped_docs, index=self.index_name, doc_type='modelresult')
  File "/Library/Frameworks/Python.framework/Versions/2.7/lib/python2.7/site-packages/elasticsearch/helpers/__init__.py", line 145, in bulk
    for ok, item in streaming_bulk(client, actions, **kwargs):
  File "/Library/Frameworks/Python.framework/Versions/2.7/lib/python2.7/site-packages/elasticsearch/helpers/__init__.py", line 104, in streaming_bulk
    resp = client.bulk(bulk_actions, **kwargs)
  File "/Library/Frameworks/Python.framework/Versions/2.7/lib/python2.7/site-packages/elasticsearch/client/utils.py", line 68, in _wrapped
    return func(*args, params=params, **kwargs)
  File "/Library/Frameworks/Python.framework/Versions/2.7/lib/python2.7/site-packages/elasticsearch/client/__init__.py", line 646, in bulk
    params=params, body=self._bulk_body(body))
  File "/Library/Frameworks/Python.framework/Versions/2.7/lib/python2.7/site-packages/elasticsearch/transport.py", line 284, in perform_request
    status, headers, data = connection.perform_request(method, url, params, body, ignore=ignore, timeout=timeout)
  File "/Library/Frameworks/Python.framework/Versions/2.7/lib/python2.7/site-packages/elasticsearch/connection/http_urllib3.py", line 51, in perform_request
    raise ConnectionError('N/A', str(e), e)
elasticsearch.exceptions.ConnectionError: ConnectionError(('Connection aborted.', error(61, 'Connection refused'))) caused by: ProtocolError(('Connection aborted.', error(61, 'Connection refused')))

Running bin/elasticsearch gives this:

[2014-08-25 17:53:38,901][INFO ][node                     ] [Arize] version[1.3.1], pid[1781], build[2de6dc5/2014-07-28T14:45:15Z]
[2014-08-25 17:53:38,902][INFO ][node                     ] [Arize] initializing ...
[2014-08-25 17:53:38,976][INFO ][plugins                  ] [Arize] loaded [], sites []
[2014-08-25 17:53:54,722][INFO ][node                     ] [Arize] initialized
[2014-08-25 17:53:54,734][INFO ][node                     ] [Arize] starting ...
[2014-08-25 17:53:56,131][INFO ][transport                ] [Arize] bound_address {inet[/0:0:0:0:0:0:0:0:9300]}, publish_address {inet[/192.168.1.83:9300]}
[2014-08-25 17:53:57,168][INFO ][discovery                ] [Arize] elasticsearch/uWwljr09R0-hZ1-5eH4NlQ
[2014-08-25 17:54:00,714][INFO ][cluster.service          ] [Arize] new_master [Arize][uWwljr09R0-hZ1-5eH4NlQ][deeptis-mbp.local.lan][inet[/192.168.1.83:9300]], reason: zen-disco-join (elected_as_master)
[2014-08-25 17:54:00,987][INFO ][http                     ] [Arize] bound_address {inet[/0:0:0:0:0:0:0:0:9200]}, publish_address {inet[/192.168.1.83:9200]}
[2014-08-25 17:54:00,988][INFO ][node                     ] [Arize] started
[2014-08-25 17:54:01,337][INFO ][gateway                  ] [Arize] recovered [0] indices into cluster_state

But on running ps -A elasticsearch does not show up as a running process.

What am I doing wrong?

Need answered 24/8, 2014 at 12:45 Comment(3)
try restarting elasticsearch serviceIneffectual
Tried that, did not help.Need
I got this error because I had never installed an elastisearch server.Beseem
B
15

Connection refused means just that, that the TCP connection to the Elasticsearch HTTP service was refused. The reason can be a number of things, for instance that you are using the wrong host or port for the HTTP endpoint, or that the elasticsearch node is not running for some reason.

Before you try to use Haystack, test that elasticsearch works by issuing a direct HTTP request with something like:

curl -X GET http://192.168.77.88:9200/_cat/indices

Where 192.168.77.88 is the IP address of your elasticsearch node, and 9200 is the TCP port. When that succeeds, check and double check that you have the same URL configuration in you Haystack config.

HAYSTACK_CONNECTIONS = {
    'default': {
        'ENGINE': 'haystack.backends.elasticsearch_backend.ElasticsearchSearchEngine',
        'URL': 'http://192.168.77.88:9200/',
        'INDEX_NAME': 'haystack',
    },
}
Byrne answered 24/8, 2014 at 20:27 Comment(7)
I checked the HAYSTACK_CONNECTIONS. curl -X GET 192.168.77.88:9200 gives a Page Not Found error. What could be wrong?Need
You need to put the IP address of your elasticsearch node in place of 192.168.77.88. And use the full URL for curl: 192.168.77.88:9200/_cat/indices if that doesn't work, then you don't have an elasticsearch node running there.Byrne
curl -X GET localhost:9200 gives the running elasticsearch status. But curl -X GET 192.168.1.83:9200 does not. Why would that be? I checked my IP address thrice, it is correct.Need
By default elasticsearch binds to all addresses (0.0.0.0). This can be configured in elasticsearch.yml (network.bind_host). Perhaps it is set to 127.0.0.1 or something else? You can also use the netstat command to see what addresses it listens on. Perhaps you can configure haystack to use localhost, but as elasticsearch is made for clustering I'd make sure I know how to get it working on the LAN first.Byrne
But curl -X GET 192.168.1.83:9200 returns the elasticsearch status. But as soon as I start the Django server, it stops. It still returns the status on curl -X GET localhost:9200. HAYSTACK_CONNECTIONS is set to url: '127.0.0.1:8080' What should I change?Need
Turns out I was initially using the same port for both the servers. I changed that and restarted them both. Worked! Thanks a lot for your help, Anton!Need
Nice one. For me, django haystack url setting was 127.0.0.1:9200 BUT my elasticsearch.yml file was using network.host: localhost. Updating django setting to use localhost :9200 sorted it. Cheers.Dildo
D
2

I had the same problem. Just got it resolved by actually running the Elasticsearch on port 9200. If you are on windows, goto the bin directory of Elasticsearch installation and run the batch file of whichever Elasticsearch version you are using.

Deflower answered 9/1, 2016 at 4:19 Comment(0)
G
0

anton comment saved me!

I arrived here because I was trying to run elasticsearch-curator and I was getting the following error (even without Firewall or other connections blockers):

user@host:/opt/elasticsearch-curator$ curator_cli show-indices | more
2021-11-20 16:33:11,396 INFO      Instantiating client object
2021-11-20 16:33:11,397 INFO      Testing client connectivity
2021-11-20 16:33:11,403 ERROR     HTTP N/A error: HTTPConnectionPool(host='127.0.0.1', port=9200): Max retries exceeded with url: / (Cause
d by NewConnectionError('<urllib3.connection.HTTPConnection object at 0x7f5ca8ba7d60>: Failed to establish a new connection: [Errno 111] C
onnection refused'))
2021-11-20 16:33:11,403 CRITICAL  Curator cannot proceed. Exiting.

Due a lot of other particularities in my lab, I have the line network.hosts: 10.0.0.134 in my /etc/elasticsearch/elasticsearch.yml, it means the private IP for that VM is fixed in the configuration, so my elasticsearch was not binding to all addresses as it should be in most cases. The solution was to include an additional line network.bind_host: 0.0.0.0 in the file /etc/elasticsearch/elasticsearch.yml. This way, the network session of my /etc/elasticsearch/elasticsearch.yml is the following:

# ---------------------------------- Network -----------------------------------
#
# By default Elasticsearch is only accessible on localhost. Set a different
# address here to expose this node on the network:
#
network.host: 10.0.0.134
#
# By default Elasticsearch listens for HTTP traffic on the first free port it
# finds starting at 9200. Set a specific HTTP port here:
#
http.port: 9200
#
network.bind_host: 0.0.0.0
#
# For more information, consult the network module documentation.
#

Now my elasticsearch-curator works great:

shaka@virgo:/opt/elasticsearch-curator$ sudo curator_cli show-indices | more
2021-11-20 17:30:02,294 INFO      Instantiating client object
2021-11-20 17:30:02,295 INFO      Testing client connectivity
/opt/python/3.9.4/lib/python3.9/site-packages/elasticsearch/connection/base.py:200: ElasticsearchWarning: Elasticsearch built-in security features are not enabled. Without authentication, your cluster could be accessible to anyone. See https://www.elastic.co/guide/en/elasticsearch/reference/7.15/security-minimal-setup.html to enable security.
2021-11-20 17:30:02,301 INFO      Successfully created Elasticsearch client object with provided settings
/opt/python/3.9.4/lib/python3.9/site-packages/elasticsearch/connection/base.py:200: ElasticsearchWarning: this request accesses system indices: [.apm-agent-configuration, .apm-custom-link, .async-search, .kibana_7.14.0_001, .kibana_7.14.1_001, .kibana_7.15.0_001, .kibana_7.15.1_001, .kibana_7.15.2_001, .kibana_task_manager_7.14.0_001, .kibana_task_manager_7.14.1_001, .kibana_task_manager_7.15.0_001, .kibana_task_manager_7.15.1_001, .kibana_task_manager_7.15.2_001, .tasks], but in a future major version, direct access to system indices will be prevented by default
.apm-agent-configuration
.apm-custom-link
.async-search
.kibana-event-log-7.14.0-000001

I hope it helps someone facing the same problem.

Gotten answered 20/11, 2021 at 20:32 Comment(0)
B
0
I make it  sudo nano /etc/elasticsearch/elasticsearch.yml
network.host: 45.#.#.#
transport.host: localhost

It works for me

Bein answered 8/6, 2023 at 7:4 Comment(0)

© 2022 - 2024 — McMap. All rights reserved.