elasticsearsh集群搭建

半兽人 发表于: 2016-12-12   最后更新时间: 2021-02-04 15:02:31  
{{totalSubscript}} 订阅, 5,919 游览

单节点安装在上一篇文章已经有了,集群和单节点之间的差异甚微。就不在来一遍了,我们只讲不同的地方,就是配置。

上一篇:liunx下elasticSearch安装及head安装

node1 部署

> tar zxvf elasticsearch-5.1.1.tar.gz -C /opt/
> cd /opt
> mv elasticsearch-5.0.0  elasticsearch-node1

修改配置

#cat /opt/elasticsearch-node1/config/elasticsearch.yml 
network.host: 0.0.0.0
http.port: 9200
http.cors.enabled: true
http.cors.allow-origin: "*"
# cluster
cluster.name: "es-cluster"
node.name: "es-node1"
node.master: true
node.data: true
http.enabled: true

node2 部署

修改配置

#cat /opt/elasticsearch-node2/config/elasticsearch.yml 
network.host: 0.0.0.0
http.port: 9201
http.cors.enabled: true
http.cors.allow-origin: "*"
# cluster
cluster.name: "es-cluster"
node.name: "es-node2"
node.master: true
node.data: true
http.enabled: true

PS:只需修改http.port和node.name

启动

>chown www:www -R /opt/elasticsearch-node1
>chown www:www -R /opt/elasticsearch-node2
>su - www -c "/opt/elasticsearch-5.0.0-node1/bin/elasticsearch >/dev/null 2>&1 &"
>su - www -c "/opt/elasticsearch-5.0.0-node2/bin/elasticsearch >/dev/null 2>&1 &"

PS:elasticsearch不支持root直接启动。

>netstat -ntlp
tcp        0      0 0.0.0.0:9200                0.0.0.0:*                   LISTEN      29660/java              
tcp        0      0 0.0.0.0:9201                0.0.0.0:*                   LISTEN      29757/java         
tcp        0      0 0.0.0.0:9300                0.0.0.0:*                   LISTEN      29660/java         
tcp        0      0 0.0.0.0:9301                0.0.0.0:*                   LISTEN      29757/java

访问

# curl https://localhost:9200
{
  "name" : "es-node1",
  "cluster_name" : "es-cluster",
  "cluster_uuid" : "2C5tWrgISW6V-SAX203LbQ",
  "version" : {
    "number" : "5.1.1",
    "build_hash" : "253032b",
    "build_date" : "2016-11-26T04:37:51.531Z",
    "build_snapshot" : false,
    "lucene_version" : "6.2.0"
  },
  "tagline" : "You Know, for Search"
}
# curl https://localhost:9201
  "name" : "es-node2",
  "cluster_name" : "es-cluster",
  "cluster_uuid" : "2C5tWrgISW6V-SAX203LbQ",
  "version" : {
    "number" : "5.1.1",
    "build_hash" : "253032b",
    "build_date" : "2016-11-26T04:37:51.531Z",
    "build_snapshot" : false,
    "lucene_version" : "6.2.0"
  },
  "tagline" : "You Know, for Search"
}

Elasticsearch部分节点不能发现集群

现象描述

es1,es2,es3三台es组成一个集群,集群状态正常,

当es1 服务器重启后,es1不能加到集群中,自己选举自己为master,这就产生了es集群中所谓的“脑裂”, 把es1的es服务重启后,es1则能正常发现集群并加入。

当重启es2服务器后,es2不能加到集群中,自己选举自己为master,也产生了es集群中所谓的“脑裂”,当重启es服务后,还是不能发现集群。

当重启es3服务器后,es3能加到集群中。正常。

分析

三台es服务器es服务,插件的版本均一样,配置除了节点名不同也一样。

查看es服务的启动日志发现:

[2016-12-22 16:48:24,628][INFO ][cluster.service          ] [Es_node_10_0_31_2] new_master [Es_node_10_0_31_2][fDJA3kUtTHC7eJuS4h78FA][localhost][inet[/10.0.31.2:9300]]{rack=rack2, master=true}, reason: zen-disco-join (elected_as_master)

服务启动过程中,由于未能发现集群,自己选举自己为master

导致该问题有可能网络原因。因为discovery.zen(es 中一个集群的服务)超时了还没有找到集群则选举自己为master。

修改设置 discovery.zen.ping_timeout: 30s,原来10s 重启es1发现正常了。用同样的方法修改es2,发现不凑效

修改es2的设置如下:

discovery.zen.ping.multicast.enabled: false
discovery.zen.ping_timeout: 120s
discovery.zen.minimum_master_nodes: 2 #至少要发现集群可做master的节点数,
client.transport.ping_timeout: 60s
discovery.zen.ping.unicast.hosts: ["10.0.31.2", "10.0.33.2"]

指明集群中其它可能为master的节点ip,以防找不到
用该方法后,重启es2服务器能正常发现集群,服务正常。

实验后三台es服务的配置均加了

discovery.zen.ping.multicast.enabled: false
discovery.zen.ping_timeout: 120s
discovery.zen.minimum_master_nodes: 2 
client.transport.ping_timeout: 60s
discovery.zen.ping.unicast.hosts: ["10.0.31.2", "10.0.33.2"]

只是ip,及超时时间略有不同,es2的超时时间设得最长。
es2的服务虽然正常了,但启动日志中会有个异常,如下:

[2016-12-22 21:43:29,012][WARN ][transport.netty          ] [Es_node_10_0_32_2] exception caught on transport layer [[id: 0x5c87285c]], closing connection
java.net.NoRouteToHostException: No route to host
at sun.nio.ch.SocketChannelImpl.checkConnect(Native Method)
at sun.nio.ch.SocketChannelImpl.finishConnect(SocketChannelImpl.java:717)
at org.elasticsearch.common.netty.channel.socket.nio.NioClientBoss.connect(NioClientBoss.java:152)
at org.elasticsearch.common.netty.channel.socket.nio.NioClientBoss.processSelectedKeys(NioClientBoss.java:105)
at org.elasticsearch.common.netty.channel.socket.nio.NioClientBoss.process(NioClientBoss.java:79)
at org.elasticsearch.common.netty.channel.socket.nio.AbstractNioSelector.run(AbstractNioSelector.java:318)
at org.elasticsearch.common.netty.channel.socket.nio.NioClientBoss.run(NioClientBoss.java:42)
at org.elasticsearch.common.netty.util.ThreadRenamingRunnable.run(ThreadRenamingRunnable.java:108)
at org.elasticsearch.common.netty.util.internal.DeadLockProofWorker$1.run(DeadLockProofWorker.java:42)
at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1142)
at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:617)
at java.lang.Thread.run(Thread.java:745)
[2016-12-22 21:43:55,839][WARN ][discovery

怀疑跟网络有关系,虽然不影响服务。

总结:

es服务启动后到发现集群的时间有点长,如果超时时间设得短则发现不了。这个原因还未知。只是通过修改设置让他尽可能能找到了集群了。

更新于 2021-02-04

查看ElasticSearch更多相关的文章或提一个关于ElasticSearch的问题,也可以与我们一起分享文章