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 0
drwxrwxr-x. 5 hadoop hadoop 4096 Feb 23 18:31 1
drwxrwxr-x. 5 hadoop hadoop 4096 Feb 23 18:31 2
drwxrwxr-x. 5 hadoop hadoop 4096 Feb 23 18:31 3
drwxrwxr-x. 5 hadoop hadoop 4096 Feb 23 18:31 4
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的官网
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
推荐