Elasticsearch之重要核心概念如下:

1、cluster

  代表一个集群,集群中有多个节点,其中有一个为主节点,这个主节点是可以通过选举产生的,主从节点是对于集群内部来说的。es的一个概念就是去中心化,字面上理解就是无中心节点,这是对于集群外部来说的,因为从外部来看es集群,在逻辑上是个整体,你与任何一个节点的通信和与整个es集群通信是等价的。

  主节点的职责是负责管理集群状态,包括管理分片的状态和副本的状态,以及节点的发现和删除。

    注意:主节点不负责对数据的增删改查请求进行处理,只负责维护集群的相关状态信息。

  集群配置(修改conf/elasticsearch.yml文件)

    discovery.zen.ping.unicast.hosts: ["host1", "host2:9300"]

  集群状态查看

    http://your ip:9200/_cluster/health?pretty

  

  比如,我这里是

http://192.168.80.145:9200/_cluster/health?pretty

  想学习,请移步

Elasticsearch-2.4.3的单节点安装(多种方式图文详解)

Elasticsearch-2.4.3的3节点安装(多种方式图文详解)

2、shards

  代表索引分片,es可以把一个完整的索引分成多个分片Elasticsearch Client发送搜索请求,某个索引库,一般默认是5个分片(shard)。这样的好处是可以把一个大的索引水平拆分成多个,分布到不同的节点上。构成分布式搜索,提高性能和吞吐量。

  比如,http://master:9200/zhouls/user/1。则将索引zhouls,分成多个分片。

  分片的数量只能在创建索引库时指定,索引库创建后不能更改。

  只能在创建索引库的时候指定

    curl -XPUT 'localhost:9200/zhouls/' -d'{"settings":{"number_of_shards":3}}'

  默认是一个索引库有5个分片

    index.number_of_shards: 5

  每个分片中最多存储2,147,483,519条数据

    Integer.MAX_VALUE-128【详细解释见备注】

  为了,更好的观看es核心概念之shards索引片的效果,我在3台机器组建的es集群里演示,并且,关闭192.168.80.11和192.168.80.12,只留下192.168.80.10这台来测试。

  

  然后,执行

[hadoop@HadoopMaster elasticsearch-2.4.3]$ jps
2610 Jps
2014 Elasticsearch
[hadoop@HadoopMaster elasticsearch-2.4.3]$ curl -XPUT 'http://192.168.80.10:9200/zhouls/emp/1' -d'{"name":"tom","age":"18"}'
{"_index":"zhouls","_type":"emp","_id":"1","_version":1,"_shards":{"total":2,"successful":1,"failed":0},"created":true}[hadoop@HadoopMaster elasticsearch-2.4.3]$
[hadoop@HadoopMaster elasticsearch-2.4.3]$
[hadoop@HadoopMaster elasticsearch-2.4.3]$ ll
total 56
drwxrwxr-x. 2 hadoop hadoop 4096 Feb 22 01:37 bin
drwxrwxr-x. 3 hadoop hadoop 4096 Feb 22 18:46 config
drwxrwxr-x. 3 hadoop hadoop 4096 Feb 22 06:05 data
drwxrwxr-x. 2 hadoop hadoop 4096 Feb 22 01:37 lib
-rw-rw-r--. 1 hadoop hadoop 11358 Aug 24 2016 LICENSE.txt
drwxrwxr-x. 2 hadoop hadoop 4096 Feb 23 16:51 logs
drwxrwxr-x. 5 hadoop hadoop 4096 Dec 8 00:41 modules
-rw-rw-r--. 1 hadoop hadoop 150 Aug 24 2016 NOTICE.txt
drwxrwxr-x. 4 hadoop hadoop 4096 Feb 22 05:34 plugins
-rw-rw-r--. 1 hadoop hadoop 8700 Aug 24 2016 README.textile
[hadoop@HadoopMaster elasticsearch-2.4.3]$ cd data/
[hadoop@HadoopMaster data]$ ll
total 4
drwxrwxr-x. 3 hadoop hadoop 4096 Feb 22 06:05 elasticsearch
[hadoop@HadoopMaster data]$ cd elasticsearch/
[hadoop@HadoopMaster elasticsearch]$ ll
total 4
drwxrwxr-x. 3 hadoop hadoop 4096 Feb 22 06:05 nodes
[hadoop@HadoopMaster elasticsearch]$ cd nodes/
[hadoop@HadoopMaster nodes]$ ll
total 4
drwxrwxr-x. 4 hadoop hadoop 4096 Feb 23 18:31 0
[hadoop@HadoopMaster nodes]$ cd 0
[hadoop@HadoopMaster 0]$ ll

total 8
drwxrwxr-x. 3 hadoop hadoop 4096 Feb 23 18:31 indices
-rw-rw-r--. 1 hadoop hadoop 0 Feb 22 06:05 node.lock
drwxrwxr-x. 2 hadoop hadoop 4096 Feb 23 16:49 _state
[hadoop@HadoopMaster 0]$ cd indices/
[hadoop@HadoopMaster indices]$ ll
total 4
drwxrwxr-x. 8 hadoop hadoop 4096 Feb 23 18:31 zhouls
[hadoop@HadoopMaster indices]$ cd zhouls/
[hadoop@HadoopMaster zhouls]$ ll
total 24
drwxrwxr-x. 5 hadoop hadoop 4096 Feb 23 18:31
drwxrwxr-x. 5 hadoop hadoop 4096 Feb 23 18:31
drwxrwxr-x. 5 hadoop hadoop 4096 Feb 23 18:31
drwxrwxr-x. 5 hadoop hadoop 4096 Feb 23 18:31
drwxrwxr-x. 5 hadoop hadoop 4096 Feb 23 18:31
drwxrwxr-x. 2 hadoop hadoop 4096 Feb 23 18:31 _state
[hadoop@HadoopMaster zhouls]$ pwd
/home/hadoop/app/elasticsearch-2.4.3/data/elasticsearch/nodes/0/indices/zhouls
[hadoop@HadoopMaster zhouls]$

  蓝色,这个目录下,有0、1、2、3和4目录,这几个就是es的核心概念之shards索引片。

  现在,我将在192.168.80.10起来的基础上,去对192.168.80.11和192.168.80.12启动,来注意看shards索引片,是如何变化的?

  这就是变化!

  即,192.168.80.10是1,3,4

     192.168.80.11是0,2,3,4

     192.168.80.12是0,1,2

  es可以把一个完整的索引分成多个分片,这样的好处是可以把一个大的索引水平拆分成多个,分布到不同的节点上。构成分布式搜索,提高性能和吞吐量。

  问:es的分片数,可以配置吗?

  答:可以修改,在创建索引库的时候,修改分片数,默认是5。当创建完索引库之后,不能再修改分片数了。只能在创建索引库的时候进行修改!!!

  比如, curl -XPUT 'http://192.168.80.10:9200/zhouls/' -d'{"settings":{"number_of_shards":3}}'

   新建索引库zhouls时,对索引库的默认5个修改为3个。

  更多,详细,见es的官网

https://www.elastic.co/guide/en/elasticsearch/reference/2.4/_basic_concepts.html#_shards_amp_replicas

3、replicas

  代表索引副本,es可以给索引分片设置副本。

  副本的作用:

  一是提高系统的容错性,当某个节点某个分片损坏或丢失时可以从副本中恢复。

  二是提高es的查询效率,es会自动对搜索请求进行负载均衡。

  【副本的数量可以随时修改】

  可以在创建索引库的时候指定

    curl -XPUT   'localhost:9200/zhouls/' -d'{"settings":{"number_of_replicas":2}}'

  或   curl -XPUT  'master:9200/zhouls/' -d'{"settings":{"number_of_replicas":2}}'

  默认是一个分片有1个副本。   数据量大了的话,分片多了也不太好。

    index.number_of_replicas: 1

  注意:主分片和副本不会存在一个节点中。

  同样,做测试,为了,更好的观看es核心概念之replicas副本的效果,我在3台机器组建的es集群里演示,并且,关闭192.168.80.11和192.168.80.12,只留下192.168.80.10这台来测试。

  可以看到,只开启192.168.80.10这台机器的话,则默认的5个分片都到192.168.80.10这台了。

  注意:默认是一个分片有1个副本!

 为什么,是黄色? 按理说,现在这个集群里,是要有10个分片的,但是呢,现在,你只有5个分片。所以,是黄色警告。显示集群监控值:yellows ( 5 of 10)

   单节点的话,这几个分片,压根就不会有副本。

  那好,现在,再依次把192。168.80.11和192.168.80.12启动起来。

  再刷新!

  那么,怎么认识,哪个框是主分片,哪个框是副本呢?

  答:颜色深的是主分片。

  同理,192.168.80.11和192.168.80.12的情况也是一样:,如下

  可以看出,注意:主分片和副本不会存在一个节点中!

  分片,在磁盘里,本质就是一个目录。

4、recovery

  代表数据恢复或叫数据重新分布,es在有节点加入或退出时会根据机器的负载对索引分片进行重新分配,挂掉的节点重新启动时也会进行数据恢复。

  为了,更好的观看es核心概念之recovery数据重新分布的效果,我在3台机器组建的es集群里演示,并且,先开启192.168.80.10和192.168.80.11,然后,让192.168.80.12来启动!添加进来

  

  现在,进行启动192.168.80.12

  同样,也是,框线深的是主分片,浅的是副本。

  再把,192.168.80.12kill掉

  注意:如果索引很多,则数据恢复的工作非常慢!

  问:恢复期间,访问数据会出现问题吗?

  答:不会,因为,会有副本。只是说,访问有延迟!

  问:具体多少个副本,或具体多少个分片,该怎么处理呢?在实际生产中。

  答:具体牵扯到ES的优化!后续,请见我的博客, https://i.cnblogs.com/posts?categoryid=950999 。

5、 Gateway

  代表es索引的持久化存储方式,es默认是先把索引存放到内存中,当内存满了时再持久化到硬盘。当这个es集群关闭再重新启动时就会从gateway中读取索引数据。es支持多种类型的gateway,有本地文件系统(默认),分布式文件系统,Hadoop的HDFS和Amazon的s3云存储服务。

  

  比如,我下面写的这篇博客。

Elasticsearch之Hadoop插件的安装(图文详解)

6、discovery.zen(es的自动发现节点机制机制)

  代表es的自动发现节点机制,es的一个基于p2p的系统,它先通过广播寻找存在的节点,再通过多播协议来进行节点之间的通信,同时也支持点对点的交互。

   并没有如spark、hadoop一样,使用zookeeper。

  点对点,即数据的传输并不需要通过服务器,直接通过网络中节点就可以了。

  如果是同网段,则默认是使用多播机制。

  如果是不同网段的节点如何组成es集群呢?如下

  禁用自动发现机制  

discovery.zen.ping.multicast.enabled:  false

  设置新节点被启动时能够发现的主节点列表

discovery.zen.ping.unicast.hosts:  ["192.168.20.210" , "192.168.20.211"  .  "192.168.20.212" ]

  更详细,见官网

https://www.elastic.co/guide/en/elasticsearch/reference/current/modules-discovery.html

 7、Transport(内部节点或集群与客户端的交互方式)

  代表es内部节点或集群与客户端的交互方式,默认内部是使用tcp协议进行交互,同时它支持http协议(json格式)、thrift、servlet、memcached、zeroMQ等的传输协议(通过插件方式集成)。

  更详细,见官网

https://www.elastic.co/guide/en/elasticsearch/reference/current/modules-transport.html

8、settings(修改索引库默认配置)

https://www.elastic.co/guide/en/elasticsearch/reference/current/indices-create-index.html

Elasticsearch之settings和mappings

推荐

Elasticsearch笔记四之配置参数与核心概念

Elasticsearch之重要核心概念(cluster(集群)、shards(分配)、replicas(索引副本)、recovery(据恢复或叫数据重新分布)、gateway(es索引的持久化存储方式)、discovery.zen(es的自动发现节点机制机制)、Transport(内部节点或集群与客户端的交互方式)、settings(修改索引库默认配置)和mappings)的更多相关文章

  1. ElasticStack系列之二十 & 数据均衡、迁移、冷热分离以及节点自动发现原理与机制

    1. 数据均衡 某个shard分配到哪个节点上,一般来说,是由 ELasticSearch 自行决定的.以下几种情况会触发分配动作: 新索引的建立 索引的删除 新增副本分片 节点增减引发的数据均衡 在 ...

  2. ElasticSearch入门及核心概念介绍

      Elasticsearch研究有一段时间了,现特将Elasticsearch相关核心知识和原理以初学者的角度记录下来,如有不当,烦请指正! 0. 带着问题上路——ES是如何产生的? (1)思考:大 ...

  3. ElasticSearch安装和核心概念

    1.ElasticSearch安装 elasticsearch的安装超级easy,解压即用(要事先安装好java环境). 到官网 http://www.elasticsearch.org下载最新版的 ...

  4. JPA,EclipseLink 缓存机制学习(一) 树节点搜索问题引发的思考

    最近在项目在使用JPA+EclipseLink 的方式进行开发,其中EclipseLink使用版本为2.5.1.遇到一些缓存方面使用不当造成的问题,从本篇开始逐步学习EclipseLink的缓存机制. ...

  5. ElasticSearch 全文检索— ElasticSearch 核心概念

    ElasticSearch核心概念-Cluster 1)代表一个集群,集群中有多个节点,其中有一个为主节点,这个主节点是可以通过选举产生的,主从节点是对于集群内部来说的.es的一个概念就是去中心化,字 ...

  6. Elasticsearch核心概念

    Elasticsearch 核心概念 Cluster 代表一个集群, 集群中有多个节点, 其中一个为主节点, 该节点可以通过选举产生.(主从节点只针对于集群内部) 去中心化: 对于集群外来说无中心节点 ...

  7. ElasticSearch 核心概念

    ElasticSearch核心概念-Cluster ElasticSearch核心概念-shards ElasticSearch核心概念-replicas ElasticSearch核心概念-reco ...

  8. ELK & ElasticSearch 5.1 基础概念及配置文件详解【转】

    转自:https://blog.csdn.net/zxf_668899/article/details/54582849 配置文件 基本概念 接近实时NRT 集群cluster 索引index 文档d ...

  9. 理解maven的核心概念

    原文出处:http://www.cnblogs.com/holbrook/archive/2012/12/24/2830519.html 好久没进行java方面的开发了,最近又完成了一个java相关的 ...

随机推荐

  1. Spring《六》管理Bean

    BeanWrapper BeanFactory ApplicationContext 1.通常情况下使用BeanFactory.ApplicationContext 2.ApplicationCont ...

  2. Spark SQL 编程API入门系列之SparkSQL数据源

    不多说,直接上干货! SparkSQL数据源:从各种数据源创建DataFrame 因为 spark sql,dataframe,datasets 都是共用 spark sql 这个库的,三者共享同样的 ...

  3. Spark RDD概念学习系列之什么是Pair RDD

    不多说,直接上干货! 什么是Pair RDD (1)包含键值对类型的RDD被称作Pair RDD. (2)Pair RDD通常用来进行聚合计算. (3)Pair RDD通常由普通RDD做ETL转换而来 ...

  4. 洛谷P4015 运输问题(费用流)

    题目描述 WW 公司有 mm 个仓库和 nn 个零售商店.第 ii 个仓库有 a_iai​ 个单位的货物:第 jj 个零售商店需要 b_jbj​ 个单位的货物. 货物供需平衡,即\sum\limits ...

  5. RAP开发入门-运行第一个HelloWorld(二)

    环境搭建好了之后我们就可以照惯例运行第一个helloworld程序了. (ps:这里钉几个资料吧 官网开发指导:http://help.eclipse.org/indigo/index.jsp?top ...

  6. 【工作细节记录】维护项目中前端JS组件丢失后,应如何维护开发之启发

    事因: 我所维护的项目为旧项目,接手项目后并没有什么开发文档留下,导致很多时候一出现问题就需要自己去研究整个过程. 项目中一直使用一个"$.download()"的方法进行文件下载 ...

  7. WebApp开发技巧大全

    1.开发成本较低使用web开发技术就可以轻松的完成web app的开发 2.升级较简单升级不需要通知用户,在服务端更新文件即可,用户完全没有感觉 3.维护比较轻松和一般的web一样,维护比较简单,它其 ...

  8. 页面定制CSS代码初探(五):给每篇文章最后加上'<完>'

    前言 我刚写博客的时候,有几篇是手动在最后加了个<完> 今天在看别人CSS布局时,发现很多::before和::after标签,因为没学过CSS,从名字看大概是前边/后边 加上某个东西的意 ...

  9. 搭建自己的koa+mysql后台模板

    1.在vscode里面打开一个文件夹 2.cnpm init 3.导入必要的依赖项 "dependencies": { "koa": "^2.7.0& ...

  10. Oracle查询优化之减少统计的数据量

    统计各部门人数很简单,通过部门分组即可,要统计部门以下下级部门的人数也简单,通过递归.要统计所有有下级部门的部门人数(包含下级)页比较简单, 先查询出有下级的部门,在对每个部门进行递归查询,如下: ) ...