elasticsearch-2.1.0集群搭建 及其出现的一些问题
我们在使用es时,如果只有一个节点,那么索引的主分片都分布在一台机器上,分片副本没有分配,这个时候集群的状态是yellow状态。
我这里开始搭建一个elasticsearch-2.1.0集群,记录一下遇到的一些问题。
这里的搭建环境如下:
(1)"10.4.30.151","10.4.30.81"两台虚拟机
(2)操作系统CentOS release 5.11 (Final)
(3)es版本elasticsearch-2.1.0
(4)jdk版本jdk1.7.0_80
当然这个集群我之前通过执行如下命令,创建2个索引,并索引了一些文档数据
megacorp索引是默认配置生成,分片为5个,副本为一份
curl -XPUT 'http://10.4.30.151:9200/megacorp/employee/4' -d '{
"first_name" : "John4",
"last_name" : "Smith4",
"age" : 35,
"about" : "I love to go rock climbing3",
"interests": [ "sports4" ]
}'
curl -XPUT 'http://10.4.30.151:9200/blogs' -d '{
"settings" : {
"number_of_shards" : 3,
"number_of_replicas" : 1
}
}'
这样总共主分片8个,分片副本8个,总共16个分片。
(一)首先按照elasticsearch-2.1.0 及其插件head的安装 创建新用户es并启动一个节点10.4.30.151
这里把10.4.30.151节点es使用的配置文件贴出,注意配置项的开头一个空格,不然会报错:
cluster.name: yujie-es-30-151
node.name: yujie-30-151
path.data: /data/yujie_elasticsearch/es_data
path.logs: /data/yujie_elasticsearch/es_logs
network.host: 10.4.30.151
http.port: 9200
# Elasticsearch nodes will find each other via unicast, by default.
#
# Pass an initial list of hosts to perform discovery when new node is started:
# The default list of hosts is ["127.0.0.1", "[::1]"]
#2.0版本之后的es 默认是通过单播的方式发现集群,所以这里一定要配置好集群的ip列表
discovery.zen.ping.unicast.hosts: ["127.0.0.1", "10.4.30.151","10.4.30.81"]
查看集群的状态:
集群状态为yellow,**的主分片active_primary_shards:8,且分片副本都没有分布unassigned_shards:8。
(二)启动另一个节点10.4.30.81
起初我的配置文件内容如下:
cluster.name: yujie-es-30-151
node.name: yujie-30-81
path.data: /data/yujie_elasticsearch/es_data
path.logs: /data/yujie_elasticsearch/es_logs
http.port: 9200
# Elasticsearch nodes will find each other via unicast, by default.
#
# Pass an initial list of hosts to perform discovery when new node is started:
# The default list of hosts is ["127.0.0.1", "[::1]"]
#2.0版本之后的es 默认是通过单播的方式发现集群,所以这里一定要配置好集群的ip列表
discovery.zen.ping.unicast.hosts: ["127.0.0.1","10.4.30.151","10.4.30.81"]
但是在启动的过程中报出如下异常错误:
[INFO ][discovery.zen ] [yujie-30-81] failed to send join request to master [{Chloe Tran}{51xPkx60Th2t6rZVOS2EDA}{10.4.30.151}{10.4.30.151:9300}], reason [RemoteTransportException[[Chloe Tran][10.4.30.151:9300][internal:discovery/zen/join]]; nested:
ConnectTransportException[[yujie-30-81][127.0.0.1:9300] connect_timeout[30s]]; nested: NotSerializableExceptionWrapper[Connection refused: /127.0.0.1:9300]; ]
新启动的节点不能加入到集群中,后来我添加了如下配置:
#network.host: 10.4.30.81
network.publish_host: 10.4.30.81
network.bind_host: 10.4.30.81
单独配置network.host 或者同时配置network.publish_host,network.bind_host。这样正常启动81节点。
network.publish_host是发布的与其它es节点进行通信的ip地址,network.bind_host是绑定ip与这台主机;而network.host可以同时设置这两个值。
如果单独设置network.publish_host,network.bind_host其中任意一个 启动也还是报错。
再次检查机器健康状态,看到集群已经是green状态,表名主分片和分片副本都已经分配了: