Hi,
I am trying to build a centralized monitoring and logging system using ELK stack. I am trying to create a dockerised elaticsearch cluster hosted on 2 hosts. There are 2 elasticsearch nodes in host1 and 1 node in host2.
I have defined a custom docker network in both host as this:
docker network create --subnet=172.16.0.0/24 monitoring_logging
HOST1
docker-compose.yml:
version: '2'
services:
elasticsearch:
image: docker.elastic.co/elasticsearch/elasticsearch:6.6.0
ports:
- 9200:9200
- 9300:9300
user: root
volumes:
- ./elasticsearch-master:/usr/share/elasticsearch/config
restart: always
ulimits:
memlock:
soft: -1
hard: -1
labels:
container_group: logging
networks:
default:
ipv4_address: 172.16.0.39
environment:
- node.name=elsatic-node-1
- bootstrap.memory_lock=true
- cluster.name=docker-cluster
elasticsearch2:
image: docker.elastic.co/elasticsearch/elasticsearch:6.6.0
ports:
- 9301:9300
user: root
volumes:
- ./elasticsearch-master:/usr/share/elasticsearch/config
restart: always
ulimits:
memlock:
soft: -1
hard: -1
labels:
container_group: logging
networks:
default:
ipv4_address: 172.16.0.40
environment:
- node.name=elsatic-node-2
- bootstrap.memory_lock=true
- cluster.name=docker-cluster
networks:
default:
external:
name: monitoring_logging
and elasticsearch.yml file is:
network.host: 0.0.0.0
xpack.security.enabled: true
node.master: true
node.data: true
discovery.zen.ping.unicast.hosts: ["172.16.0.39","172.16.0.40:9300","192.168.23.44:9300"]
HOST2
I have defined a custom docker network for this using:
// docker network create --subnet=172.16.0.0/24 monitoring_logging
docker-compose.yml:
version: '2'
services:
elasticsearch:
image: docker.elastic.co/elasticsearch/elasticsearch:6.6.0
ports:
- 9200:9200
- 9300:9300
user: root
networks:
default:
ipv4_address: 172.16.0.42
volumes:
- ./elasticsearch-master:/usr/share/elasticsearch/config
restart: always
ulimits:
memlock:
soft: -1
hard: -1
labels:
container_group: logging
network_mode: "host"
environment:
- node.name=elsatic-node-5
- bootstrap.memory_lock=true
- cluster.name=docker-cluster
networks:
default:
external:
name: monitoring_logging
elasticsearch.yml:
xpack.security.enabled: true
node.master: true
node.data: true
discovery.zen.ping.unicast.hosts: ["172.16.0.42:9300","192.168.23.50:9300","192.168.23.50:9301"]
I am getting this error in host2:
[2019-02-20T08:31:31,530][WARN ][o.e.d.z.ZenDiscovery ] [elsatic-node-1] failed to connect to master [{elsatic-node-3}{RwRDYBB8S2aQIYXR8i8g8Q}{4g8Idg9pQ7Okf3NHQ7OBjQ}{172.16.0.41}{172.16.0.41:9300}{ml.machine_memory=33729269760, ml.max_open_jobs=20, xpack.installed=true, ml.enabled=true}], retrying...
org.elasticsearch.transport.ConnectTransportException: [elsatic-node-3][172.16.0.41:9300] connect_exception
at org.elasticsearch.transport.TcpTransport$ChannelsConnectedListener.onFailure(TcpTransport.java:1569) ~[elasticsearch-6.6.0.jar:6.6.0]
at org.elasticsearch.action.ActionListener.lambda$toBiConsumer$2(ActionListener.java:99) ~[elasticsearch-6.6.0.jar:6.6.0]
at org.elasticsearch.common.concurrent.CompletableContext.lambda$addListener$0(CompletableContext.java:42) ~[elasticsearch-core-6.6.0.jar:6.6.0]
at java.util.concurrent.CompletableFuture.uniWhenComplete(CompletableFuture.java:859) ~[?:?]
at java.util.concurrent.CompletableFuture$UniWhenComplete.tryFire(CompletableFuture.java:837) ~[?:?]
at java.util.concurrent.CompletableFuture.postComplete(CompletableFuture.java:506) ~[?:?]
at java.util.concurrent.CompletableFuture.completeExceptionally(CompletableFuture.java:2088) ~[?:?]
at org.elasticsearch.common.concurrent.CompletableContext.completeExceptionally(CompletableContext.java:57) ~[elasticsearch-core-6.6.0.jar:6.6.0]
at org.elasticsearch.transport.netty4.Netty4TcpChannel.lambda$new$1(Netty4TcpChannel.java:72) ~[?:?]
at io.netty.util.concurrent.DefaultPromise.notifyListener0(DefaultPromise.java:511) ~[?:?]
at io.netty.util.concurrent.DefaultPromise.notifyListeners0(DefaultPromise.java:504) ~[?:?]
at io.netty.util.concurrent.DefaultPromise.notifyListenersNow(DefaultPromise.java:483) ~[?:?]
at io.netty.util.concurrent.DefaultPromise.notifyListeners(DefaultPromise.java:424) ~[?:?]
at io.netty.util.concurrent.DefaultPromise.tryFailure(DefaultPromise.java:121) ~[?:?]
at io.netty.channel.nio.AbstractNioChannel$AbstractNioUnsafe.fulfillConnectPromise(AbstractNioChannel.java:327) ~[?:?]
at io.netty.channel.nio.AbstractNioChannel$AbstractNioUnsafe.finishConnect(AbstractNioChannel.java:343) ~[?:?]
at io.netty.channel.nio.NioEventLoop.processSelectedKey(NioEventLoop.java:644) ~[?:?]
at io.netty.channel.nio.NioEventLoop.processSelectedKeysPlain(NioEventLoop.java:556) ~[?:?]
at io.netty.channel.nio.NioEventLoop.processSelectedKeys(NioEventLoop.java:510) ~[?:?]
at io.netty.channel.nio.NioEventLoop.run(NioEventLoop.java:470) ~[?:?]
at io.netty.util.concurrent.SingleThreadEventExecutor$5.run(SingleThreadEventExecutor.java:909) ~[?:?]
at java.lang.Thread.run(Thread.java:834) [?:?]
Caused by: io.netty.channel.AbstractChannel$AnnotatedNoRouteToHostException: No route to host: 172.16.0.41/172.16.0.41:9300
at sun.nio.ch.SocketChannelImpl.checkConnect(Native Method) ~[?:?]
at sun.nio.ch.SocketChannelImpl.finishConnect(SocketChannelImpl.java:779) ~[?:?]
at io.netty.channel.socket.nio.NioSocketChannel.doFinishConnect(NioSocketChannel.java:327) ~[?:?]
at io.netty.channel.nio.AbstractNioChannel$AbstractNioUnsafe.finishConnect(AbstractNioChannel.java:340) ~[?:?]
... 6 more
Caused by: java.net.NoRouteToHostException: No route to host
at sun.nio.ch.SocketChannelImpl.checkConnect(Native Method) ~[?:?]
at sun.nio.ch.SocketChannelImpl.finishConnect(SocketChannelImpl.java:779) ~[?:?]
at io.netty.channel.socket.nio.NioSocketChannel.doFinishConnect(NioSocketChannel.java:327) ~[?:?]
at io.netty.channel.nio.AbstractNioChannel$AbstractNioUnsafe.finishConnect(AbstractNioChannel.java:340) ~[?:?]
... 6 more
My Kibana dashboard shows 2 nodes instead of 3.
What am I doing wrong here?