工欲善其事必先利其器linux
ElasticSearch6.3.2下载地址(Linux、mac OS、Windows通用,下载zip包便可):https://www.elastic.co/cn/downloads/past-releases/elasticsearch-6-3-2。ES历史版本下载页面:https://www.elastic.co/cn/downloads/past-releases#elasticsearch。git
在正式安装前,你须要确保你的系统已配置JDK8环境。程序员
在上述下载地址下载完elasticsearch-6.3.2.tar.gz后,首先在当前登陆用户的home
下建立一个Settings
目录,经过tar -zxvf elasticsearch-6.3.2.tar.gz
解压到当前目录。github
进入elasticsearch-6.3.2.tar.gz
目录,执行./bin/elasticsearch
命令,等待一小段时间,经过浏览器访问http://localhost:9200/?pretty
出现如下响应:数据库
{ "name": "x4x7wWJ", "cluster_name": "elasticsearch", "cluster_uuid": "sJ6LTYJ1TDmtR1kzl0M2Ig", "version": { "number": "6.3.2", "build_hash": "8bbedf5", "build_date": "2017-10-31T18:55:38.105Z", "build_snapshot": false, "lucene_version": "6.6.1" }, "tagline": "You Know, for Search" }
Linux的安装过程和Linux相同。json
ES须要使用普通用户安装、启动,若是你是root用户,须要先建立一个用户,用普通用户而不是root用户启动ES。浏览器
白马非马app
ES是一个搜索引擎,同时它也是一个分布式文档存储数据库(固然是非关系型的)。为了保证后续的实战教程顺利进行,这里经过对比传统的关系型数据库MySQL介绍在ES中的一些术语。elasticsearch
在MySQL中共有数据库(Database)、表(Table)、记录(Row)、列(Column)的概念,一样在ES中也有相似的概念,索引(Index),类型(Type),文档(Document),字段(Field)。分布式
能够这么理解:
数据库 | 表 | 记录 | 列 | |
---|---|---|---|---|
MySQL | DB | Table | Row | Column |
ES | Index | Document | Document | Field |
ES中的索引概念可不是关系型数据库中的“索引”,ES中的索引指的是存储数据的地方,相似关系型数据库中的数据库概念。
有的文章指出ES中的类型Type对应的就是关系型数据库中的表,在使用ES中咱们会遇到另一个概念映射(Mapping),也有很多的文章指出Mapping对应的就是关系型数据库中的表。关系型数据库中表与表是物理独立的,即便在两个表中存在相同名称不一样类型的列,这在咱们的关系型数据库也是极为合理的,但这在ES中就不合理,ES中即便是在同一个索引Index下,若是字段Field存在于不一样的类型Type中,即便他们表明不一样的含义,可是只要它们的名称相同也必需要求类型相同,在ES中类型Type对应于关系型数据库中表的概念已经名不副实。实际上在ES中Type做为表的概念在后期版本中愈来愈被弱化,在未被ES正式移除前,ES后期版本已经不容许一个索引Index建立多个Type,相信在后面的版本会完全移除类型Type。
(注:ES6已经不容许一个Index建立多个Type,https://github.com/elastic/elasticsearch/pull/24317)
若是在现阶段必定要理解ES中的Type,那么必定要和Mapping结合起来。能够理解为类型Type就是定义一个表,仅仅是定义而已,而映射Mapping定义了表结构(有哪些列,列的类型是什么)。
在非关系型数据库中,有部分被称之为“文档数据库”,对应于关系型数据库中的一行记录。
对应关系型数据库中的列。
一个ES实例称之为一个节点,单机部署的ES有且只有一个节点,集群部署的ES有多个节点且有一个主节点。
ES可做为分布式集群部署,一样也能够做为单机单节点部署。ES中的数据被分散存储在分片中,ES屏蔽了底层的分片实现,咱们直接与索引交互而不与分片交互。分片数量的多少与是不是集群部署和单机部署无关,即便是单机部署在建立索引时仍然也能够指定划分多个分片(默认5个主分片1份备份(包含5个备分片))。分片有主分片和备分片之分,顾名思义,备分片是主分片的备份,当主分片出现故障时,备份片充当主分片。
单机部署的ES,即表示ES有且只有一个节点,在建立索引时,若是不指定主分片与备分片的数量,默认建立5个主分片和1份备份(5个备分片),实际上对于单机部署的ES服务来说,多个主分片并无意义,多个分片存在的意义自己就是将数据分散存储到多个ES节点中进行同时查询,此时只有一个节点多个分片也没有意义。备分片在单机部署中一样也没有意义,备份存在的意义自己就是当主分片故障时,仍然能对外提供服务,此时主备都在一个节点上,若是主分片故障,备分片也一样会致使故障。
对于集群部署的ES来说,此时存在多个节点,主分片的分配与备分片机制就显得尤其重要(这涉及查询性能以及服务高可用),例如如今有3个节点,此时若是在建立索引时只分配1个主分片就显得有点浪费(注:主分片一旦在建立索引时肯定便不能修改)。主分片的划分并无必定放之四海而皆准的规则,更多的是取决于用户的数据量以及ES节点数量等。一般所理解的是,分片数量越多越好,由于这能将数据分散到不一样分片,以便之后在扩容新增节点时,ES能将自动将分片从新进行均匀分布。但这条理论也不绝对,若是你的节点只有3个,设置了100个分片,每一个节点就有33个节点,当搜索请求调度到同一节点的不一样分片时,此时会引起硬件资源(CPU)的抢夺,形成性能问题。反过来,若是3个节点只分配了3个分片,随着业务的发展,数据量愈来愈大,单个分片已不能承受它最大的数据量,此时就算新增节点,可是分片数量只有3个,分片的数量在建立索引时便肯定且不可修改,此时只能经过从新建立索引。
既要对合理的数据增加有一个判断(规划较大的分片),又要对指望有一个度的把握(合理的分片数量)。官方给出了一点建议,每一个分片的数据量最好是在20G~40G左右,这就意味着若是你有4个节点,数据量预估在200G左右甚至更大,此时分片数量设置为5~10个比较合适,七、8个差很少,每一个节点有2个分片。(官方博客的建议,https://www.elastic.co/cn/blog/how-many-shards-should-i-have-in-my-elasticsearch-cluster)
上面谈到的是主分片,副分片的划分也同等重要。若是不对分片备份,主分片故障则致使数据丢失,部分数据不可查询。副本分片设置过多形成额外的存储空间,默认状况下,建立索引时会建立一个分片副本(一个分片副本不表明一个备分片,若是有5个主分片,那么分片副本就有5个备分片,同理若是指定建立两个分片副本,此时一共就有10个备分片。)须要注意的是备分片是能够修改的,因此备分片能够直接采用默认一个分片副本。
关注公众号:CoderBuff,回复“es”获取《ElasticSearch6.x实战教程》完整版PDF。