Elastic 需要 Java 8 环境。如果你的机器还没安装 Java,可以参考JDK安装
单机节点安装
- 下载安装包.zip
$ wget https://artifacts.elastic.co/downloads/elasticsearch/elasticsearch-5.5.1.zip
$ unzip elasticsearch-5.5.1.zip
$ cd elasticsearch-5.5.1/
- 进入解压后的目录,运行下面的命令,启动 Elastic。
$ ./bin/elasticsearch
如果报错"max virtual memory areas vm.maxmapcount [65530] is too low",要运行下面的命令。
$ sudo sysctl -w vm.max_map_count=262144
- Elastic就会在默认的9200端口运行。
请求9200端口,Elastic 返回一个 JSON 对象,包含当前节点、集群、版本等信息
{
"name" : "MuuucZm",
"cluster_name" : "elasticsearch",
"cluster_uuid" : "Fejq3vkgQN-tUGHt_8Mxvg",
"version" : {
"number" : "5.5.1",
"build_hash" : "19c13d0",
"build_date" : "2017-07-18T20:44:24.823Z",
"build_snapshot" : false,
"lucene_version" : "6.6.0"
},
"tagline" : "You Know, for Search"
}
创建数据存放路径(建议设置配置为在Elasticsearch主目录之外定位数据目录,以便在不删除数据的情况下删除主目录!)
./config/elasticsearch.yml
配置path.data
创建日志存放路径
./config/elasticsearch.yml
配置path.logs
集群安装
采用三台服务器部署Elasticsearch集群,部署ES集群就不得不提索引分片,以下是索引分片的简单介绍。
ES集群中索引可能由多个分片构成,并且每个分片可以拥有多个副本。通过将一个单独的索引分为多个分片,我们可以处理不能在一个单一的服务器上面运行的大型索引,简单的说就是索引的大小过大,导致效率问题。不能运行的原因可能是内存也可能是存储。由于每个分片可以有多个副本,通过将副本分配到多个服务器,可以提高查询的负载能力。
Node |
---|
es01.com |
es02.com |
es03.com |
- 几个是最主要的配置文件路径
../elasticsearch-5.5.1/config/elasticsearch.yml # els的配置文件
../elasticsearch-5.5.1/config/jvm.options # JVM相关的配置,内存大小等等
../elasticsearch-5.5.1/config/log4j2.properties # 日志系统定义
/var/lib/elasticsearch # 数据的默认存放位置
修改elasticsearch配置文件
./config/elasticsearch.yml
#集群的名称
#日志文件会以集群名称命名
cluster.name: esCluster
#节点名称,其余两个节点分别为node-2 和node-3
node.name: node-1
#指定该节点是否有资格被选举成为master节点,默认是true,es是默认集群中的第一台机器为master,如果这台机挂了就会重新选举master
node.master: true
#允许该节点存储数据(默认开启)
node.data: true
#索引数据的存储路径
path.data: /usr/local/elasticsearch/data
#日志文件的存储路径
path.logs: /usr/local/elasticsearch/logs
#设置为true来锁住内存。因为内存交换到磁盘对服务器性能来说是致命的,当jvm开始swapping时es的效率会降低,所以要保证它不swap
bootstrap.memory_lock: true
#绑定的ip地址
network.host: 0.0.0.0
#设置对外服务的http端口,默认为9200
http.port: 9200
# 设置节点间交互的tcp端口,默认是9300
transport.tcp.port: 9300
#Elasticsearch将绑定到可用的环回地址,并将扫描端口9300到9305以尝试连接到运行在同一台服务器上的其他节点。
#这提供了自动集群体验,而无需进行任何配置。数组设置或逗号分隔的设置。每个值的形式应该是host:port或host
discovery.zen.ping.unicast.hosts: ["192.168.8.101:9300", "192.168.8.103:9300", "192.168.8.104:9300"]
#这个参数控制的是,一个节点需要看到的具有master节点资格的最小数量,然后才能在集群中做操作。官方的推荐值是(N/2)+1,其中N是具有master资格的节点的数量
discovery.zen.minimum_master_nodes: 2
调整jvm内存
./config/jvm.options
#建议对jvm进行一些修改,不然很容易出现OOM,参考官网改参数配置最好不要超过内存的50%
-Xms2g
-Xmx2g
- 分别启动三台Elasticsearch
$ bin/elasticsearch -d # -d 后台运行
- 测试启动
ps -ef | grep elasticsearc
查看进程是否启动
curl -XGET 'http://es01:9200/_cat/nodes?pretty'
ip01 18 68 0 0.07 0.06 0.05 mdi - els2
ip02 25 67 0 0.01 0.02 0.05 mdi * els1 # *号表示为当前节点为主节点的意思
ip03 7 95 0 0.02 0.04 0.05 mdi - els3
集群安装踩坑
- 启动失败
查看日志,日志文件会以集群名称命名
[ERROR][o.e.b.Bootstrap ] [node-1] node validation exception
[3] bootstrap checks failed
[1]: max file descriptors [4096] for elasticsearch process is too low, increase to at least [65536]
[2]: memory locking requested for elasticsearch process but memory is not locked
[3]: max virtual memory areas vm.max_map_count [65530] is too low, increase to at least [262144]
解决方法:(root用户)
$ vim /etc/security/limits.conf
* soft nofile 65536
* hard nofile 65536
* soft nproc 2048
* hard nproc 4096
#选择锁住swapping因此需要在这个配置文件下再增加两行代码
es soft memlock unlimited
es hard memlock unlimited
$ vim /etc/sysctl.conf
vm.max_map_count=655360
fs.file-max=655360
# 使系统配置生效(使用root用户)
$ sysctl -p
参数参考 https://my.oschina.net/987openlab/blog/94634
- 节点启动成功,无法形成集群
[2018-02-15T21:15:06,352][INFO ][rest.suppressed ] /_cat/health Params: {h=node.total}
MasterNotDiscoveredException[waited for [30s]]
at org.elasticsearch.action.support.master.TransportMasterNodeAction$4.onTimeout(TransportMasterNodeAction.java:160)
at org.elasticsearch.cluster.ClusterStateObserver$ObserverClusterStateListener.onTimeout(ClusterStateObserver.java:239)
at org.elasticsearch.cluster.service.InternalClusterService$NotifyTimeout.run(InternalClusterService.java:630)
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)
原因:将discovery.zen.minimum_master_nodes
的值设置为了3,总共3个节点,都充当主节点是不行的,将discovery.zen.minimum_master_nodes
将这个配置改为2。
- 只有主节点启动成功,其他节点没有连接集群
[2018-02-15T21:53:58,084][INFO ][o.e.d.z.ZenDiscovery ] [node-3] failed to send join request to master [{node-1}{SVrW6URqRsi3SShc1PBJkQ}{y2eFQNQ_TRenpAPyv-EnVg}{192.168.8.101}{192.168.8.101:9300}], reason [RemoteTransportException[[node-1][192.168.8.101:9300][internal:discovery/zen/join]]; nested: IllegalArgumentException[can't add node {node-3}{SVrW6URqRsi3SShc1PBJkQ}{uqoktM6XTgOnhh5r27L5Xg}{192.168.8.104}{192.168.8.104:9300}, found existing node {node-1}{SVrW6URqRsi3SShc1PBJkQ}{y2eFQNQ_TRenpAPyv-EnVg}{192.168.8.101}{192.168.8.101:9300} with the same id but is a different node instance]; ]
之前启动的时候报错,没有启动成功,但是data文件中生成了其他节点的数据。将三个节点的data目录清空即可。