Elasticsearch Cluster set up problems - elasticsearch

I am building a cluster with elasticsearch. I download the elasticsearch file as a zip file and unzip it in the /opt file. And these are the two IPs I am using for trial, 172.16.30.51 and 172.16.30.52.
I have come across with some problems. I have tried to amend the host files and add server IP.
sudo vi /etc/hosts
172.16.30.51 elasticnode01
172.16.30.52 elasticnode02
Also, in Server elasticnode01 :
cd /opt/elasticsearch
vi config/elasticsearch.yml
I amend the following code.
cluster.name: mycluster
node.name: "elasticnode01"
discovery.zen.ping.multicast.enabled: false
discovery.zen.ping.unicast.hosts: ["elasticnode02"]
In Server elasticnode02 :
cd /opt/elasticsearch
vi config/elasticsearch.yml
I amend the following code.
cluster.name: mycluster
node.name: "elasticnode02"
discovery.zen.ping.multicast.enabled: false
discovery.zen.ping.unicast.hosts: ["elasticnode01"]
Then finally I run the command
bin/elasticsearch &
It seems fine but as soon as I run
curl 'localhost:9200/_cat/nodes?v'
It returns
host ip heap.percent ram.percent load node.role master name
127.0.0.1 127.0.0.1 4 39 0.20 d * elasticnode01
Would anyone mind telling me what is the problem? Thanks.

Since ES 2.0, the ES server binds to localhost by default, so they won't be able to discover each other.
You need to configure network.host on both servers, like this:
On elasticnode01:
network.host: elasticnode01
On elasticnode02:
network.host: elasticnode02

Related

How to change Elasticsearch network host

I've install ES on my VM which it has an OS of centos 7. It network.host: bind to the localhost. I can browse via port 9200.
My problem is that I've changed the network host to:0.0.0.0 (So I can get public access from my host PC).
the service started but the port is not listening.
I want to access ES from my host PC.
How can i change the network.host ?
I faced same issue in elasticsearch 7.3.0 version. I resolved by putting following
values in /etc/elasticsearch/elasticsearch.yaml as shown below
network.host: 127.0.0.1
http.host: 0.0.0.0
If you are planning to set network.host other than default(127.0.0.1) then change following details in /etc/elasticsearch/elasticsearch.yml
network.host: 0.0.0.0
discovery.seed_hosts: []
Looking at the Elasticsearch Network Settings documentation, it doesn't appear that 0.0.0.0 is a valid setting for network.host.
Try instead the special value _global_. So the section of your elasticsearch.yaml might look like this:
network:
host: _global_
This should tell Elasticsearch to listen on all network interfaces.
Since the version 7.3 of Elastic Search, it's necessary to put the following line
cluster.initial_master_nodes: node-1
network.host: 0.0.0.0
If your application is running on AWS and Elastic search is running on different host
network.host: YOUR_AWS_PRIVATE_IP
This works for me.

How to set up multi-node Elasticsearch cluster in development mode?

I have an ES cluster (v 5.6.12) up and running in dev mode, config below:
node1.com
cluster.name: elastic-test
node.name: "node-1"
path.data: /path/to/data
path.logs: /path/to/logs
network.host: 127.0.0.1
http.host: 0.0.0.0
discovery.zen.ping.unicast.hosts: ["node1.com", "node2.com"]
node.master: true
I am trying to connect node 2 to the same cluster:
node2.com
cluster.name: elastic-test
node.name: "node-2"
path.data: /path/to/data
path.logs: /path/to/logs
network.host: 127.0.0.1
http.host: 0.0.0.0
discovery.zen.ping.unicast.hosts: ["node1.com", "node2.com"]
node.master: true
I tried to change the network.host to their respective addresses, but this takes them out of dev mode. I also tried setting the bind and publish hosts to make the node discover-able to other nodes:
network.bind_host: 127.0.0.1
network.publish_host: node1.com
But again, this takes the nodes into production.
Is it actually possible to have multiple nodes on different servers communicate within development mode?
Short answer NO. For most use cases running a single node cluster for DEV suffices but there could be scenarios where multi node clusters are required in DEV environment, however it is not possible to currently form a multi node cluster without binding to a non local IP address.
That being said, difference between development mode and production mode with respect to Elasticsearch is just preventing ES cluster from starting if some settings are not configured appropriately. So, as long as you are able to configure the settings described in the below link then you can form a cluster and name it as DEV so users don't misidentify it as a production cluster
https://www.elastic.co/guide/en/elasticsearch/reference/5.6/system-config.html#dev-vs-prod

master_not_discovered_exception ElasticSearch single node

I am trying to setup elasticsearch on a single host. Here is how my configuration looks like:
elasticsearch.yml
node.name: ${HOSTNAME}
network.host: _site_, _local_
http.port: 9200
transport.tcp.port: 9300
cluster.name: "test_cluster"
node.local: true
kibana.yml
server.host: 0.0.0.0
elasticsearch.url: http://localhost:9200
On following command:
curl -XGET 'localhost:9200/_cluster/health?pretty'
I get following message:
{
"error" : {
"root_cause" : [
{
"type" : "master_not_discovered_exception",
"reason" : null
}
],
"type" : "master_not_discovered_exception",
"reason" : null
},
"status" : 503
}
In log file I see following message:
not enough master nodes discovered during pinging (found [[]], but needed [-1]), pinging again
Could someone please point me right direction here?
I spent days (sigh) on basically this. I was trying to upgrade my single node cluster from 6.x es to 7.x, and I kept dying on the hill of "master_not_discovered_exception".
What finally solved it for me was examining a completely fresh install of 7.x.
For my single-node cluster, my /etc/elasticsearch/elasticsearch.yml needed the line:
discovery.type: single-node
I hope that saves someone else from spending days like I did. In my defence, I'm very new to es.
Following changes in eleasticsearch.yml worked for me
Node
node.name: node-1
Paths
path.data: /var/lib/elasticsearch
path.logs: /var/log/elasticsearch
Network
network.host: 0.0.0.0
http.port: 9200
Discovery
discovery.seed_hosts: "127.0.0.1:9300"
cluster.initial_master_nodes: ["node-1"]
Steps:
sudo systemctl stop elasticsearch.service
sudo nano /etc/elasticsearch/elasticsearch.yml
Apply above changes, save and close the editor.
sudo /bin/systemctl daemon-reload
sudo /bin/systemctl enable elasticsearch.service
sudo systemctl start elasticsearch.service
NOTE: elasticsearch7 is used with ubuntu 20.04, it should work with other versions as well
According to this link, for the very first time you should set initial_master_nodes config like this in /etc/elasticsearch/elasticsearch.yml:
node.name: "salehnode"
cluster.initial_master_nodes:
- salehnode
On my side, after installing ES 7+, I had to set node-1 as a master-eligible node in the new cluster.
sudo nano /etc/elasticsearch/elasticsearch.yml
cluster.initial_master_nodes: ["node-1"]
First I dont think you need network.host setting for this.
In your log it is trying to get a master, but result is 0
Can you try setting properties like:
node.master: true
node.data:true
Also can you please put more logs here, if it doesnt work
You can try this in your elasticsearch.yml:
discovery.zen.minimum_master_nodes: 1
I think ES will always find discovery.zen.ping.unicast.hosts until it
finds nodes of count equal to minimum_master_nodes.

Elasticsearch configuration and settings for nodes

I have just installed ElasticSearch 5.0.0. When I run localhost:9200/_cat/nodes?v it gives me ip as 10.57.203.16. But I want localhost as a server. Where should I configure it ?
What if you add the below line to your elasticsearch.yml ,restart the ES and then try querying for the available nodes:
network.host: 127.0.0.1
EDIT:
Try adding a node name in your elasticsearch.yml :
node.name: elastic_test1

How to configure two nodes to connect to same cluster in elasticsearch?

I have 2 separate machines. Port 9200 is already taken by a separate elasticsearch running, so I specify 9201 as the http.port in the yml file. i set cluster.name: MyCluster.
When I start ./elasticsearch on machine 1 and machine 2, they are not connected, but each are single node master's.
What do I need to do so that they can connect to each other and be part of the same cluster?
I also set network.host: 0.0.0.0 so I know they can see each other. I am using 2.4.0 of Elastcisearch.
In machine 1:
cluster.name: hello_world
network.host: "hostname_or_ip_1"
network.port: 9201
discovery.zen.ping.unicast.hosts: ["hostname_or_ip_2:9201"]
In machine 2:
cluster.name: hello_world
network.host: "hostname_or_ip_2"
network.port: 9201
discovery.zen.ping.unicast.hosts: ["hostname_or_ip_1:9201"]
Both cluster name should be same
discovery.zen.ping.unicast.hosts should point to correct machine
address with port
Make sure to restart elasticsearch node after editing config file
Look at unicast discovery with host:port. https://www.elastic.co/guide/en/elasticsearch/reference/current/modules-discovery-zen.html
You might also need to be explicit about the transport.tcp.port in your elasticsearch.yml:
transport.tcp.port: 9301

Resources