centos7下Elasticsearch5.2.2和head 插件环境搭建

 

ElasticSearch是一个基于Lucene构建的开源,分布式,RESTful搜索引擎。设计用于云计算中,可以达到实时搜索,稳定,可靠,快速,安装使用方便。支持经过HTTP使用JSON进行数据索引。 html

咱们创建一个网站或应用程序,并要添加搜索功能,令咱们受打击的是:搜索工做是很难的。咱们但愿咱们的搜索解决方案要快,咱们但愿有一个零配置和一个彻底免费的搜索模式,咱们但愿可以简单地使用JSON经过HTTP的索引数据,咱们但愿咱们的搜索服务器始终可用,咱们但愿可以一台开始并扩展到数百,咱们要实时搜索,咱们要简单的多租户,咱们但愿创建一个云的解决方案。Elasticsearch旨在解决全部这些问题和更多的。node

1.基于Lucene构建ES 

怎样在Lucene之上构建一个分布式、高度伸缩、接近实时的搜索引擎呢? 让咱们回顾一下在搜索引擎(基于lucene)伸缩性这条路上都作了那些尝试,而且elasticsearch是如未尝试并去解决这些挑战的。 linux

首先咱们了解下最基础的理论知识 building blocks (这些理论基础是构建分布式近实时搜索引擎的基础)。 接着咱们研究一下到底哪一种才是最佳的分区策略 partitioning (将lucene索引文档分割到多个分布式的分片中去)。 而后咱们一样须要决定使用哪一种分区复制方式 replication (复制可以保证系统的高可用以及提升搜索的吞吐)。 最后,咱们再看一下事务日志 transaction log (事务日志在elasticsearch里面是一个保证数据一致性的很是酷的功能)。git

二.ElasticSearch概念

1.Cluster(集群) 

表明一个集群,集群中有多个节点,其中有一个为主节点,这个主节点是能够经过选举github

产生的,主从节点是对于集群内部来讲的。es的一个概念就是去中心化,字面上理解就是无中心节点,这是对于集群外部来讲的,由于从外部来看es集群,在逻辑上是个总体,你与任何一个节点的通讯和与整个es集群通讯是等价的。 数据库

2.Node(节点) 

一个节点是你集群中的一个服务器,做为集群的一部分,它存储你的数据,参与集群的索引和搜索功能。和集群相似,一个节点也是由一个名字来标识的,默认状况下,这个名字是一个随机的漫威漫画角色的名字,这个名字会在启动的时候赋予节点。这个名字对于管理工做来讲挺重要的,由于在这个管理过程当中,你会去肯定网络中的哪些服务器对应于Elasticsearch 集群中的哪些节点。 npm

一个节点能够经过配置集群名称的方式来加入一个指定的集群。默认状况下,每一个节点都会被安排加入到一个叫作“elasticsearch”的集群中,这意味着,若是你在你的网络中启动了若干个节点,并假定它们可以相互发现彼此,它们将会自动地造成并加入到一个叫作“elasticsearch”的集群中。 bootstrap

在一个集群里,只要你想,能够拥有任意多个节点。并且,若是当前你的网络中没有运行任何Elasticsearch节点,这时启动一个节点,会默认建立并加入一个叫作“elasticsearch”的集群。 centos

3.index(索引) 

一个索引就是一个拥有几分类似特征的文档的集合。好比说,你能够有一个客户数据的索引,另外一个产品目录的索引,还有一个订单数据的索引。一个索引由一个名字来标识(必须所有是小写字母的),而且当咱们要对对应于这个索引中的文档进行索引、搜索、更新和删除的时候,都要使用到这个名字。 浏览器

在一个集群中,若是你想,能够定义任意多的索引。 

索引至关于数据库

4.Type(类型) 

在一个索引中,你能够定义一种或多种类型。一个类型是你的索引的一个逻辑上的分类/分区,其语义彻底由你来定。一般,会为具备一组共同字段的文档定义一个类型。好比说,

咱们假设你运营一个博客平台而且将你全部的数据存储到一个索引中。在这个索引中,你能够为用户数据定义一个类型,为博客数据定义另外一个类型,固然,也能够为评论数据定义另外一个类型。 

类型至关于数据库中的表

5.Document(文档) 

一个文档是一个可被索引的基础信息单元。好比,你能够拥有某一个客户的文档,某一个产品的一个文档,固然,也能够拥有某个订单的一个文档。文档以 JSON(Javascript Object Notation)格式来表示,而 JSON 是一个处处存在的互联网数据交互格式。 

在一个 index/type 里面,只要你想,你能够存储任意多的文档。注意,尽管一个文档,物理上存在于一个索引之中,文档必须被索引/赋予一个索引的 type。 

文档至关于表中的一行记录

6.Shards(分片) 

表明索引分片,es能够把一个完整的索引分红多个分片,这样的好处是能够把一个大的索引拆分红多个,分布到不一样的节点上。构成分布式搜索。分片的数量只能在索引建立前指定,而且索引建立后不能更改。 

7.Replicas(副本分片) 

表明索引副本,es能够设置多个索引的副本,副本的做用一是提升系统的容错性,当个某个节点某个分片损坏或丢失时能够从副本中恢复。二是提升es的查询效率,es会自动对搜索请求进行负载均衡。 

总之,每一个索引能够被分红多个分片。一个索引也能够被复制 0 次(意思是没有复制)或屡次。一旦复制了,每一个索引就有了主分片(做为复制源的原来的分片)和复制分片(主分片的拷贝)之别。分片和复制的数量能够在索引建立的时候指定。在索引建立以后,你能够在任什么时候候动态地改变复制的数量,可是你过后不能改变分片的数量。 

默认状况下,Elasticsearch 中的每一个索引被分片 5 个主分片和 1 个复制,这意味着,若是你的集群中至少有两个节点,你的索引将会有 5 个主分片和另外 5 个复制分片(1 个彻底拷贝),这样的话每一个索引总共就有 10 个分片。 

1、elasticsearch安装配置并运行
集群搭建

1.以本人为例,在三台机器上安装了es,来搭建集群

2进入elasticsearch的config目录,打开并编辑elasticsearch.yml

 

# ======================== Elasticsearch Configuration =========================

#

# NOTE: Elasticsearch comes with reasonable defaults for most settings.

#       Before you set out to tweak and tune the configuration, make sure you

#       understand what are you trying to accomplish and the consequences.

#

# The primary way of configuring a node is via this file. This template lists

# the most important settings you may want to configure for a production cluster.

#

# Please see the documentation for further information on configuration options:

# <http://www.elastic.co/guide/en/elasticsearch/reference/current/setup-configuration.html>

#

# ---------------------------------- Cluster -----------------------------------

#

# Use a descriptive name for your cluster:

#三台电脑cluster.name:保持一致

  cluster.name: my-askingdata

#

# ------------------------------------ Node ------------------------------------

#

# Use a descriptive name for the node:

#三台电脑的node.name不能同样

  node.name: node-1

#

# Add custom attributes to the node:

#

#  node.rack: r1

#

# ----------------------------------- Paths ------------------------------------

#

# Path to directory where to store the data (separate multiple locations by comma):

#

# path.data: /path/to/data

#

# Path to log files:

#

# path.logs: /path/to/logs

#

# ----------------------------------- Memory -----------------------------------

#

# Lock the memory on startup:

#

# bootstrap.mlockall: true

#

# Make sure that the `ES_HEAP_SIZE` environment variable is set to about half the memory

# available on the system and that the owner of the process is allowed to use this limit.

#

# Elasticsearch performs poorly when the system is swapping the memory.

#

# ---------------------------------- Network -----------------------------------

#

# Set the bind address to a specific IP (IPv4 or IPv6):

#   ip

  network.host: 192.168.1.106

#

# Set a custom port for HTTP:

#端口

  http.port: 9200

#

# For more information, see the documentation at:

# <http://www.elastic.co/guide/en/elasticsearch/reference/current/modules-network.html>

#

# --------------------------------- Discovery ----------------------------------

#

# 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]"]

#写入三台电脑的ip

  discovery.zen.ping.unicast.hosts: ["192.168.1.106", "192.168.1.108","192.168.1.109"]

#

# Prevent the "split brain" by configuring the majority of nodes (total number of nodes / 2 + 1):

#

 

1.进入elasticsearch的bin目录

2.执行    ./elasticsearch  命令便可运行

3.浏览器中运行:http://192.168.1.108:9200/    若是出现如下画面表示运行成功

 

 

3、head插件安装和使用

 

1、下载安装包 

 

下载Elasticsearch 5.1.1 

下载地址:https://www.elastic.co/downloads/elasticsearch 

zip和tar格式是各类系统都通用的,解压以后启动Elasticsearch便可。 

下载elasticsearch-head 

下载地址:https://github.com/mobz/elasticsearch-head,下载后解压缩。 

1、安装nodejs
  
curl -sL -o /etc/yum.repos.d/khara-nodejs.repo https://copr.fedoraproject.org/coprs/khara/nodejs/repo/epel-7/khara-nodejs-epel-7.repo
yum install -y nodejs nodejs-npm

 

$ node -v 

$ npm -v 



2、安装grunt 
npm install -g grunt-cli
npm install -g grunt --save-dev

grunt -version 

 

3、npm安装依赖 

 

到elasticsearch-head-master目录下,运行命令: 

npm install 

若是速度较慢或者安装失败,可使用国内镜像: 

 npm install -g cnpm --registry=https://registry.npm.taobao.org 

4、修改Elasticsearch配置文件 

编辑elasticsearch-5.1.1/config/elasticsearch.yml,加入如下内容: 

http.cors.enabled: true 

http.cors.allow-origin: "*" 

5、修改Gruntfile.js 

打开elasticsearch-head-master/Gruntfile.js,找到下面connect属性,新增hostname: ‘0.0.0.0’: 

connect: { 

        server: { 

            options: { 

                hostname: '*', 

                port: 9100, 

                base: '.', 

                keepalive: true 

            } 

        } 

    }    

6、启动elasticsearch-head 

在elasticsearch-head-master/目录下,运行启动命令: 

grunt server 

访问http://192.168.1.124:9100/ 

7、后台启动elasticsearch-head 

后台启动grunt server命令; 

nohup grunt server &

若是想关闭head插件,使用Linux查找进程命令: 

ps aux|grep head 

结束进程: 

kill进程号 

 

 

 

 

4、索引的操做

一、索引文档的建立

将以下一条歌曲信息的数据提交到ES中建立索引:

[plain] view plain copy

url:http://127.0.0.1:9200/song001/list001/1  

data:{"number":32768,"singer":"杨坤","size":"5109132","song":"今夜二十岁","tag":"中国好声音","timelen":319}  

索引名字是:song001;

索引的类型是:list001;

本记录的id是:1

返回的信息能够看到建立是成功的,而且版本号是1;ES会对记录修改进行版本跟踪,第一次建立记录为1,同一条记录每修改一次就追加1。

至此一条记录就提交到ES中创建了索引,注意HTTP的方法是PUT,不要选择错了。

二、索引文档的查询

根据索引时的ID查询的文档的RESTful接口以下

url:http://127.0.0.1:9200/song001/list001/1
HTTP方法采用GET的形式。

三、索引文档的更新

根据索引时的ID更新的文档的内容其RESTful接口以下

url:http://127.0.0.1:9200/song001/list001/1
HTTP方法采用PUT的形式。

将歌手名由“杨坤”改为“杨坤独唱”;

结果中的version字段已经成了2,由于咱们这是是修改,索引版本递增;created字段是false,表示此次不是新建而是更新。

更新接口与建立接口彻底同样,ES会查询记录是否存在,若是不存在就是建立,存在就是更新操做。

 

 

四、索引文档的删除

根据索引时的ID更新的文档的内容其RESTful接口以下

url:http://127.0.0.1:9200/song001/list001/1
HTTP方法采用DELETE的形式。

删除事后,再经过查询接口去查询将得不到结果。

总结:

增删改查的RESTful接口URL形式:http://localhost:9200/<index>/<type>/[<id>]

增删改查分别对应:HTTP请求的PUT、GET、DELETE方法。PUT调用是若是不存在就是建立,已存在是更新。

 

快速bulk插入数据

使用插件elasticsearch-reindexing

下载     https://github.com/codelibs/elasticsearch-reindexing

执行命令在线安装,不用下载   $ $ES_HOME/bin/plugin install org.codelibs/elasticsearch-reindexing/2.1.1
 
在查询时出现max_result_window错误时,
执行如下命令,红字要>=文档总数
curl -XPUT " http://192.168.1.106:9200/shark/_settings" -d '{ "index" : { "max_result_window" :30000 } }'
关闭节点
ps -ef | grep elasticsearch    
kill ****
 
 
相关文章
相关标签/搜索