Elasticsearch 安装和配置

Elastic 需要 Java 8 环境。如果你的机器还没安装 Java,可以参考JDK安装

单机节点安装

  1. 下载安装包.zip
$ wget https://artifacts.elastic.co/downloads/elasticsearch/elasticsearch-5.5.1.zip
$ unzip elasticsearch-5.5.1.zip
$ cd elasticsearch-5.5.1/ 
  1. 进入解压后的目录,运行下面的命令,启动 Elastic。
$ ./bin/elasticsearch

如果报错"max virtual memory areas vm.maxmapcount [65530] is too low",要运行下面的命令。

$ sudo sysctl -w vm.max_map_count=262144
  1. 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"
}
  1. 创建数据存放路径(建议设置配置为在Elasticsearch主目录之外定位数据目录,以便在不删除数据的情况下删除主目录!)
    ./config/elasticsearch.yml配置path.data

  2. 创建日志存放路径
    ./config/elasticsearch.yml配置path.logs

集群安装

采用三台服务器部署Elasticsearch集群,部署ES集群就不得不提索引分片,以下是索引分片的简单介绍。

ES集群中索引可能由多个分片构成,并且每个分片可以拥有多个副本。通过将一个单独的索引分为多个分片,我们可以处理不能在一个单一的服务器上面运行的大型索引,简单的说就是索引的大小过大,导致效率问题。不能运行的原因可能是内存也可能是存储。由于每个分片可以有多个副本,通过将副本分配到多个服务器,可以提高查询的负载能力。

Node
es01.com
es02.com
es03.com
  1. 几个是最主要的配置文件路径
../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 
  1. 分别启动三台Elasticsearch
$ bin/elasticsearch -d    # -d 后台运行
  1. 测试启动
    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

集群安装踩坑

  1. 启动失败
    查看日志,日志文件会以集群名称命名
[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

  1. 节点启动成功,无法形成集群
[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。

  1. 只有主节点启动成功,其他节点没有连接集群
[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目录清空即可。

你可能感兴趣的:(Elasticsearch 安装和配置)