Elasticsearch介绍及安装

1. Elasticsearch介绍

Elasticsearch是一个建立在全文搜索引擎Apache Lucence基础上的搜索引擎,可以说Lucence是当今世界最先进、最高效的全功能开源搜索引擎框架。但是Lucence只是一个框架,要充分利用它的功能,需要使用Java,并且在应用程序中集成Lucence。更糟糕的是,还需要做很多的学习、了解,才能明白它是如何运行的,Lucence确实非常复杂。Elasticsearch使用Lucence作为内部搜索引擎,使用Elasticsearch时,只需要使用Elasticsearch提供的统一开发好的API即可,而并不需要了解其背后复杂的Lucence的运行原理。

当然,Elasticsearch并不仅仅是Lucence那么简单,它不仅包括了全文搜索功能,还可以进行如下工作:

  • 分布式实时文件存储,并它每一个字段都编入索引,使其可以被搜索

  • 实时分析的分布式搜索引擎

  • 可以扩展到上百台服务器,处理PB级别的结构化或非结构化数据

Elasticsearch支持单机部署和集群部署,你可以轻松的通过客户端或者任何你喜欢的程序语言与Elasticsearch的RESTful API进行交流。

2. Elasticsearch安装

2.1 安装环境

  • Oracle JDK 1.8.0_112

  • Elasticsearch 5.1.1

  • Ubuntu 14.04.5 LTS 64位

2.2 安装步骤

2.2.1 单机部署

目前,Elasticsearch官方最新版本是5.1.1(点此下载),Elasticsearch 5.1.1版本的安装需要使用Java 8,仅支持Oracle JDK和OpenJDK,官方建议Java版本1.8.0_73及以后,我这里的版本是Oracle JDK 1.8.0_112。注意,如果是集群安装,请确保各个节点的版本一致。

Step 1:请确保服务器上已安装好JDK,并设置JAVA_HOME,我这里的JAVA环境变量设置如下:

export JAVA_HOME="/opt/jdk1.8.0_112"
export JRE_HOME="$JAVA_HOME/jre"

export PATH="$JAVA_HOME/bin:$JRE_HOME/bin:$PATH"

Step 2:下载elasticsearch-5.1.1.tar.gz至/opt/,并解压缩到/opt/elasticsearch-5.1.1/,也可以换成其他目录,我这里统一安装到/opt/下。

Step 3:Elasticsearch的config/目录下有elasticsearch.ymljvm.optionslog4j2.properties三个配置文件,分别用以设置elasticsearch、JVM和日志输出,我这里均不做设置,使用默认配置。

Step 4:启动Elasticsearch:./bin/elasticsearch,如果出现类似如下结果,则表示启动成功:

Elasticsearch启动成功

上面的启动命令,默认是前台启动,启动日志会直接在控制台输出,可以直接通过Ctrl - C来停止。

如果想后台启动,可以运行:nohup ./bin/elasticsearch &,这样可以通过 tail -f nohup.out 来查看日志输出。

Step 5:测试启动是否成功:curl -XGET 'localhost:9200/?pretty',如果出现类似如下结果,则表示Elasticsearch已经正常运行,默认TCP端口为9200。

测试Elasticsearch启动成功

也可以通过浏览器查看,在浏览器输入:http://localhost:9200/?pretty,如果也出现类似上图结果则表示正常运行。

2.2.2 集群部署

节点(Node)是Elasticsearch运行的实例,集群(Cluster)是一组有着同样cluster.name的节点,它们协同工作,提供了故障转移和扩展的功能。当然,一个节点也可以是一个集群。

我们现在准备三台机器(IP:192.168.10.100、192.168.10.101、192.168.10.102)来作为Elasticsearch的集群搭建环境,并保证三台机器之间可以相互通信,三台服务器都是Ubuntu 14.04.5 LTS 64位系统,均安装Oracle JDK 1.8.0_112,安装Elasticsearch 5.1.1,并统一安装在/opt/目录下。

设置集群时,要修改elasticsearch.yml中的下面几个配置:

cluster.name:集群名称,相同集群名称的Elasticsearch节点会自动发现
node.name:节点名称,唯一标识一个Elasticsearch节点
node.master:是否可以充当主节点
node.data:是否可以充当数据节点
network.host:绑定host,0.0.0.0代表所有IP,为了安全考虑,建议设置为内网IP
transport.tcp.port:节点之间交互使用的tcp端口
http.port:对外提供http服务的端口,默认为9200
discovery.zen.fd.ping_timeout、discovery.zen.ping_timeout:设置节点之间的连接ping时长
discovery.zen.minimum_master_nodes:设置节点需要看到的具有master节点资格的最小数量,官方推荐(N/2)+1,N是具有master资格的节点数量
discovery.zen.ping.unicast.hosts:设置自动发现的节点

Step 1:配置192.168.10.100的elasticsearch.yml如下:

cluster.name: my-es-cluster
node.name: node-100
node.master: true
node.data: true
network.host: 0.0.0.0
transport.tcp.port: 9300
http.port: 9200
discovery.zen.fd.ping_timeout: 100s
discovery.zen.ping_timeout: 100s
discovery.zen.minimum_master_nodes: 2
discovery.zen.ping.unicast.hosts: ["192.168.10.100", "192.168.10.101", "192.168.10.102"]

Step 2:配置192.168.10.101的elasticsearch.yml如下:

cluster.name: my-es-cluster
node.name: node-101
node.master: true
node.data: true
network.host: 0.0.0.0
transport.tcp.port: 9300
http.port: 9200
discovery.zen.fd.ping_timeout: 100s
discovery.zen.ping_timeout: 100s
discovery.zen.minimum_master_nodes: 2
discovery.zen.ping.unicast.hosts: ["192.168.10.100", "192.168.10.101", "192.168.10.102"]

Step  3:配置192.168.10.102的elasticsearch.yml如下:

cluster.name: my-es-cluster
node.name: node-102
node.master: true
node.data: true
network.host: 0.0.0.0
transport.tcp.port: 9300
http.port: 9200
discovery.zen.fd.ping_timeout: 100s
discovery.zen.ping_timeout: 100s
discovery.zen.minimum_master_nodes: 2
discovery.zen.ping.unicast.hosts: ["192.168.10.100", "192.168.10.101", "192.168.10.102"]

Step 4:分别启动三个服务器上的Elasticsearch:./bin/elasticsearch,如果三台服务器都出现如下结果,说明启动成功:

ES启动成功

Step 5:检查Elasticsearch集群健康状态、查看集群信息

(1)查看集群健康状态:curl -XGET 'localhost:9200/_cat/health?v'

集群Health

从上图可以看到my-es-cluster集群状态为green,一共有3个节点,其中有3个数据节点。

(2)查看集群nodes信息:curl -XGET 'localhost:9200/_cat/nodes?v'

集群nodes信息

从上图可以看到一共有3个节点,名称分别为node-101、node-102、node-100,及相对应的IP,并且可以看到node-100是集群中的master。

(3)查看集群master信息:curl -XGET 'localhost:9200/_cat/master?v'

查看集群master信息

2.3 安装问题及解决方法

Question 1:don't run elasticsearch as root

Elasticsearch不允许以root用户启动,需要预先创建用户,并指定用户启动,我这里安装启动的时候均是以自定义用户hand操作,所以没有问题。

创建elasticsearch用户组以及elasticsearch用户,命令如下:

groupadd elasticsearch
useradd  elasticsearch(用户名) -g elasticsearch(组名) -p elasticsearch(密码)

Question 2:max virtual memory areas  vm.max_map_count [65530] is too low, increase to at least [262144]

vm.max_map_count is too low

对于上述问题,要修改配置文件:sudo vim /etc/sysctl.conf,末尾增加:vm.max_map_count=262144,然后使其生效:sudo sysctl -p,即可。

Question 3:max file descriptors [4096] for elasticsearch process is too low, increase to at least [65536]

max file descriptors is too low

对于上述问题,修改配置文件:sudo vim /etc/security/limits.conf,末尾追加:

* hard nofile 65536
* soft nofile 65536

可以将*改为指定的用户名,*表示对于全部用户生效。修改以后,重启服务器,重启Elasticsearch即可。

本文标题:Elasticsearch介绍及安装

本文链接:http://yedward.net/post/416.html

本文版权归作者所有,欢迎转载,转载请以文字链接的形式注明文章出处。

本博客不提供评论功能,有任何问题请发送邮件至:yedward92@qq.com

相关文章