目录
Elasticsearch(以下简称ES)是一款常用的全文检索工具。支持单节点分布和分布式集群部署。
本次用到的ES组件有 Elasticsearch,Kibana以及中文分词插件Ik,所有软件版本均为5.0.0,JDK版本为1.8
下载解压安装包
官网下载地址为:https://www.elastic.co/cn/downloads/past-releases#elasticsearch
选择tar包,保存到本地,并解压缩到指定目录
tar -zxvf elasticsearch-5.0.0.tar
解压完成后生成elasticsearch5.0.0文件夹。
单节点模式
ES默认为单节点模式,进入ES目录bin目录,执行启动命令:
./elasticsearch -d
-d表示以后台进程启动
分布式集群部署
假设有三个节点,角色分配如下:
主机名 | IP | ES节点 |
---|---|---|
host1 | 192.168.3.145 | node-1 |
host2 | 192.16.3.146 | node-2 |
host3 | 192.168.3.147 | node-3 |
1,配置node1
修改node1上ES配置文件,路径为config/elasticsearch.yml,常用配置如下:
#集群名字,elasticsearch,通过名字确定是否为同一集群
cluster.name: elasticsearch
#es启动后会将具有相同集群名字的节点放到一个集群下。
node.name: "node-1"
#节点名字。
discovery.zen.minimum_master_nodes: 2
#指定集群中的节点中有几个有master资格的节点。
#对于大集群可以写3个以上。
#data存放路径
path.data: /var/data/elasticsearch
#是否为主节点
node.master: true
#是否为数据节点
node.data: true
#节点地址
network.host:192.168.3.145
#端口
network.port: 9200
discovery.zen.ping.unicast.hosts: ["192.168.3.145", "192.168.3.146"]
#所有master节点列表:["节点1的 ip","节点2 的ip"]
#指明集群中其它可能为master的节点ip, #以防es启动后发现不了集群中的其他节点。
注意:所有配置项最前面及冒号后必须有空格,如: 空格network.port:空格9200
2,配置其他节点
将ES压缩包拷贝到node2和node3,注意拷贝的是压缩包,而不是node1上已经配置好的文件夹,因为节点1配置完后已经生成uuid,如果拷贝文件夹到node2,启动时会报 id已经存在的错误。
同样修改config/elasticsearch.yml文件,只需把节点名称和network改成对应值即可,对于node3,node.master属性值为false。
node2配置如下:
cluster.name: elasticsearch
#es启动后会将具有相同集群名字的节点放到一个集群下。
node.name: "node-2"
#节点名字。
discovery.zen.minimum_master_nodes: 2
#指定集群中的节点中有几个有master资格的节点。
#对于大集群可以写3个以上。
#data存放路径
path.data: /var/data/elasticsearch
#是否为主节点
node.master: true
#是否为数据节点
node.data: true
#节点地址
network.host:192.168.3.146
#端口
network.port: 9200
discovery.zen.ping.unicast.hosts: ["192.168.3.145", "192.168.3.146"]
#所有master节点列表:["节点1的 ip","节点2 的ip"]
#指明集群中其它可能为master的节点ip, #以防es启动后发现不了集群中的其他节点。
node3配置:
#集群名字,elasticsearch,通过名字确定是否为同一集群
cluster.name: elasticsearch
#es启动后会将具有相同集群名字的节点放到一个集群下。
node.name: "node-3"
#节点名字。
discovery.zen.minimum_master_nodes: 2
#指定集群中的节点中有几个有master资格的节点。
#对于大集群可以写3个以上。
#data存放路径
path.data: /var/data/elasticsearch
#是否为主节点
node.master: false
#是否为数据节点
node.data: true
#节点地址
network.host:192.168.3.145
#端口
network.port: 9200
discovery.zen.ping.unicast.hosts: ["192.168.3.145", "192.168.3.146"]
#所有master节点列表:["节点1的 ip","节点2 的ip"]
#指明集群中其它可能为master的节点ip, #以防es启动后发现不了集群中的其他节点。
启动过程中常见错误及解决
1,Linux版本过低
- 错误内容:
[WARN ][o.e.b.JNANatives ] unable to install syscall filter:
Java.lang.UnsupportedOperationException: seccomp unavailable: requires kernel 3.5+ with CONFIG_SECCOMPandCONFIG_SECCOMP_FILTERcompiledinatorg.elasticsearch.bootstrap.Seccomp.linuxImpl(Seccomp.java:349) ~[elasticsearch-5.0.0.jar:5.0.0]
at org.elasticsearch.bootstrap.Seccomp.init(Seccomp.java:630) ~[elasticsearch-5.0.0.jar:5.0.0]
- 解决办法:
1、重新安装新版本的Linux系统
2、警告不影响使用,可以忽略
2,无法创建本地文件问题,用户最大可创建文件数太小
- 错误内容
ERROR: bootstrap checks failed
max file descriptors [4096] for elasticsearch process likely too low, increase to at least [65536]
- 解决:
切换到root用户,编辑limits.conf配置文件, 添加类似如下内容:
vi /etc/security/limits.conf
添加如下内容:
* soft nofile 65536
* hard nofile 131072
* soft nproc 2048
* hard nproc 4096
3无法创建本地线程问题,用户最大可创建线程数太小
- 错误内容:
max number of threads [1024] for user [es] likely too low, increase to at least [2048]
- 解决:切换到root用户,进入limits.d目录下,修改90-nproc.conf 配置文件。
vi /etc/security/limits.d/90-nproc.conf
找到如下内容:
* soft nproc 1024
#修改为
* soft nproc 2048
4,最大虚拟内存太小
- 错误内容:
max virtual memory areas vm.max_map_count [65530] likely too low, increase to at least [262144]
- 解决:切换到root用户下,修改配置文件sysctl.conf
vi /etc/sysctl.conf
添加下面配置:
vm.max_map_count=655360
并执行命令:
sysctl -p
然后重新启动elasticsearch
5,集群节点之间的jdk版本不一致
- 错误内容:
org.elasticsearch.transport.RemoteTransportException: Failed to deserialize exception response from stream
- 解决:ElasticSearch集群统一jdk版本
6,jdk版本太低
问题内容:
Unsupported major.minor version 52.0
解决:更换jdk版本,ElasticSearch5.0.0支持jdk1.8.0