2

I have an instance of ubuntu server running version 20.04 installed on parallels on a Mac however I am unable to access it from other devices on my network, only from the instance of ubuntu.

lsb_release -a gives the following result

No LSB modules are available.
Distributor ID: Ubuntu
Description:    Ubuntu 20.04 LTS
Release:    20.04
Codename:   focal

I have installed Elasticsearch version 7.6.2 from the APT repository using the instructions here

I can run curl -X GET 'http://localhost:9200' on ubuntu and get the following output

{
"name" : "dev",
"cluster_name" : "elasticsearch",
"cluster_uuid" : "u4Xx8JDyTdaWv_HsYK6xXA",
"version" : {
    "number" : "7.6.2",
    "build_flavor" : "default",
    "build_type" : "deb",
    "build_hash" : "ef48eb35cf30adf4db14086e8aabd07ef6fb113f",
    "build_date" : "2020-03-26T06:34:37.794943Z",
    "build_snapshot" : false,
    "lucene_version" : "8.4.0",
    "minimum_wire_compatibility_version" : "6.8.0",
    "minimum_index_compatibility_version" : "6.0.0-beta1"
},
"tagline" : "You Know, for Search"
}

If I run hostname -I I get 10.211.55.11 fdb2:2c26:f4e4:0:21c:42ff:fee9:e2c5 which is the IP address of the ubuntu instance.

However when I run curl -X GET 'http://10.211.55.11:9200' from my Mac I get the following result curl: (7) Failed to connect to 10.211.55.11 port 9200: Connection refused

How can I get access to my instance of Elasticsearch from other devices on my network?

sudo ufw status gives me the following rules

Status: active

To                         Action      From
--                         ------      ----
9200                       ALLOW       Anywhere                  
9200 (v6)                  ALLOW       Anywhere (v6)   

/etc/elasticsearch/elasticsearch.yml contains the following

# ======================== Elasticsearch Configuration =========================
#
# NOTE: Elasticsearch comes with reasonable defaults for most settings.
#       Before you set out to tweak and tune the configuration, make sure you
#       understand what are you trying to accomplish and the consequences.
#
# The primary way of configuring a node is via this file. This template lists
# the most important settings you may want to configure for a production cluster.
#
# Please consult the documentation for further information on configuration options:
# https://www.elastic.co/guide/en/elasticsearch/reference/index.html
#
# ---------------------------------- Cluster -----------------------------------
#
# Use a descriptive name for your cluster:
#
#cluster.name: my-application
#
# ------------------------------------ Node ------------------------------------
#
# Use a descriptive name for the node:
#
#node.name: node-1
#
# Add custom attributes to the node:
#
#node.attr.rack: r1
#
# ----------------------------------- Paths ------------------------------------
#
# Path to directory where to store the data (separate multiple locations by comma):
#
path.data: /var/lib/elasticsearch
#
# Path to log files:
#
path.logs: /var/log/elasticsearch
#
# ----------------------------------- 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.
#
# Elasticsearch performs poorly when the system is swapping the memory.
#
# ---------------------------------- Network -----------------------------------
#
# Set the bind address to a specific IP (IPv4 or IPv6):
#
#network.host: 0.0.0.0
# Set a custom port for HTTP:
#
#http.port: 9200
#
# For more information, consult the network module documentation.
#
# --------------------------------- Discovery ----------------------------------
#
# Pass an initial list of hosts to perform discovery when this node is started:
# The default list of hosts is ["127.0.0.1", "[::1]"]
#
#discovery.seed_hosts: ["host1", "host2"]
#
# Bootstrap the cluster using an initial set of master-eligible nodes:
#
#cluster.initial_master_nodes: ["node-1", "node-2"]
#
# For more information, consult the discovery and cluster formation module documentation.
#
# ---------------------------------- Gateway -----------------------------------
#
# Block initial recovery after a full cluster restart until N nodes are started:
#
#gateway.recover_after_nodes: 3
#
# For more information, consult the gateway module documentation.
#
# ---------------------------------- Various -----------------------------------
#
# Require explicit names when deleting indices:
#
#action.destructive_requires_name: true

Adding network.host:0.0.0.0

After adding the above line to the elasticsearch.yml file I get the following error

Job for elasticsearch.service failed because the control process exited with error code.
See "systemctl status elasticsearch.service" and "journalctl -xe" for details.

running systemctl status elasticsearch.service gives me the following error message

● elasticsearch.service - Elasticsearch
    Loaded: loaded (/lib/systemd/system/elasticsearch.service; enabled; vendor preset: enabled)
    Active: failed (Result: exit-code) since Fri 2020-05-01 14:52:23 UTC; 59s ago
    Docs: http://www.elastic.co
    Process: 7086 ExecStart=/usr/share/elasticsearch/bin/elasticsearch -p ${PID_DIR}/elasticsearch.pid --quiet (code=exited, status=78)
Main PID: 7086 (code=exited, status=78)

May 01 14:52:03 dev systemd[1]: Starting Elasticsearch...
May 01 14:52:03 dev elasticsearch[7086]: OpenJDK 64-Bit Server VM warning: Option UseConcMarkSweepGC was deprecated in version 9.0 and will likely be removed in a future release.
May 01 14:52:23 dev elasticsearch[7086]: ERROR: [1] bootstrap checks failed
May 01 14:52:23 dev elasticsearch[7086]: [1]: the default discovery settings are unsuitable for production use; at least one of [discovery.seed_hosts, discovery.seed_providers, cluster.initial_master_nod>
May 01 14:52:23 dev elasticsearch[7086]: ERROR: Elasticsearch did not exit normally - check the logs at /var/log/elasticsearch/elasticsearch.log
May 01 14:52:23 dev systemd[1]: elasticsearch.service: Main process exited, code=exited, status=78/CONFIG
May 01 14:52:23 dev systemd[1]: elasticsearch.service: Failed with result 'exit-code'.
May 01 14:52:23 dev systemd[1]: Failed to start Elasticsearch.

/var/log/elasticsearch/elasticsearch.log contains the following error logs

[2020-05-01T14:52:22,378][INFO ][o.e.n.Node               ] [dev] starting ...
[2020-05-01T14:52:22,740][INFO ][o.e.t.TransportService   ] [dev] publish_address {10.211.55.11:9300}, bound_addresses {[::]:9300}
[2020-05-01T14:52:23,333][INFO ][o.e.b.BootstrapChecks    ] [dev] bound or publishing to a non-loopback address, enforcing bootstrap checks
[2020-05-01T14:52:23,355][ERROR][o.e.b.Bootstrap          ] [dev] node validation exception
[1] bootstrap checks failed
[1]: the default discovery settings are unsuitable for production use; at least one of [discovery.seed_hosts, discovery.seed_providers, cluster.initial_master_nodes] must be configured
[2020-05-01T14:52:23,361][INFO ][o.e.n.Node               ] [dev] stopping ...
[2020-05-01T14:52:23,386][INFO ][o.e.n.Node               ] [dev] stopped
[2020-05-01T14:52:23,387][INFO ][o.e.n.Node               ] [dev] closing ...
[2020-05-01T14:52:23,435][INFO ][o.e.n.Node               ] [dev] closed
[2020-05-01T14:52:23,436][INFO ][o.e.x.m.p.NativeController] [dev] Native controller process has stopped - no new native processes can be started
Conor
  • 736
  • 1
  • 13
  • 33
  • 1
    woow, huge information, so the bottom line is that you want to enable public access to your elasticsearch which is hosted where? (local or somewhere else) also, I see `network.host:0.0.0.0` which is used to bind it non-loopback address. – Amit May 01 '20 at 15:02
  • I tried to provide as much info as possible to help. It's hosted on a machine on my LAN and want to access it from another machine on my LAN. I'll try using `network.host:0.0.0.0` and see if that resolves things – Conor May 01 '20 at 17:31
  • Now you comment made it much easy to understand, yeah please try that and let me know if you face any issue – Amit May 01 '20 at 17:35
  • That didn't resolve the issue, I've added the details to the question, but basically gave me an error sating discovery settings aren't suitable for production – Conor May 01 '20 at 17:54
  • Great, its easy to solve, are you running just a single node elasticsearch cluster? – Amit May 01 '20 at 17:57
  • Hi, were you able to resolve issue? – Amit May 02 '20 at 01:15
  • That worked great thanks, I've added the `discovery.type: single-node` line to my `elastic search.yml` and I can now access from other LAN devices – Conor May 02 '20 at 07:45
  • Great and glad it helped you :) – Amit May 02 '20 at 07:59

2 Answers2

3

So there were couple of issues and following below steps should solve the issue:

  1. Added network.host:0.0.0.0 which allowed exposing port on non-loopback address(ie localhost or 127.0.0.1) so that other systems on LAN can connect to its IP address.
  2. Added discovery.type: single-node config to avoid the production bootstrap checks.
Amit
  • 30,756
  • 6
  • 57
  • 88
0
  1. set network.host:0.0.0.0 that allowed exposing port on non-loopback address
  2. Added "discovery.type: single-node" in the yml file config to avoid the production bootstrap checks.
  • The suggestions in your post are quite exactly the same as in the already posted and accepted answer. If you think your post provides additional helpful information please make the difference clearer. – Luckyfella Nov 23 '22 at 22:18