标签:
Elasticsearch是一个高度可扩展的开源的全文搜索和分析引擎,它可以接近实时的快速的存储、搜索、分析大量的数据
基本概念
对es有几个核心概念,开始学习之前理解这些概念将极大的帮助你理解后面的学习
Near Realtime(NRT)--接近实时
elasticsearch 是一个接近实时的搜索平台。通俗的讲就是,从你索引一个文档直到这个文档可被搜索会有一段时间的延迟(一般是1s)。个人理解就是你创建了个文档,会有将近1秒的延迟,别人才能搜索到这个文档
Cluster--集群
集群就是一个或者多个节点(服务器)的集合,承载着你的所有数据并在所有节点之间提供联合索引和搜索能力。一个集群被一个唯一的名字所标识,默认是elasticsearch。这个名字很重要,因为一个节点要加入集群,必须指定这个集群的名字。
确保在不同的环境不要使用相同的集群名字,否则节点将加入错误的集群。
注意,一个集群就有一个节点是合法的。除此之外,你也可以有多个相互独立的集群,每个用一个唯一的名字标识。
Node--节点
节点就是集群中的一个单个服务器,它存储数据,参与集群的索引和搜索。就像一个集群,节点也用一个名字来标识,默认是一个随机的传奇人物的名字,在节点启动的时候被指定。
一个节点可以配置加入一个集群通过集群的名字。默认,每个节点设置为加入名字为elasticsearch 的集群,这就意味着,如果你启动了多个节点在你的网络-假定他们能彼此发现对方-他们将自动的组织成一个名字为elasticsearch的集群。
在一个集群中,你可以拥有你想要数量的节点。除此之外,如果没有其他elastisearch节点当前运行在你的网络上,启动一个节点将默认形成一个新的单个节点的名字为elastisearch的集群
index--索引
一个索引就是文档的集合,这些文档有几分相似的特性。比如,你可以有一个索引存储客户数据,另一个索引存储产品分类,另一个索引存储订单信息。一个索引用一个名字来标识(必须是小写),这个名字被用来指定索引当针对其中的文档执行索引、搜索、更新、删除操作时。
在一个集群中,你可以定义任意数量的索引,只要你想。
es 的index 相当于mysql 的database (个人理解)
Type--类型
在索引中,你可以定义一个或者多个类型。type是index的逻辑分类,怎么定义完全取决于你。大体上,具有相同字段的文档的集合被定义为一个type。打个比方,你运行了一个博客平台,且所有数据存储在了一个index里。在这个index里,你可以给用户数据定义一个type,给博客数据定义一个type,给评论数据定义一个type。
type相当于mysql的 table
Document -- 文档
一个文档是可被索引的基本信息单元。例如,你可以有一个针对顾客的文档,还可以有个针对产品的文档,还可以有一个针对订单的文档。文档用json格式表示,此格式是普遍使用的一种数据交换格式。
在一个index/type中,你可以存储你想要数量的文档。注意,尽管一个文档物理上存在一个index中,一个文档事实上必须被指定到一个index中的type上。
document相当于myslq 的 row
shards & replicas -- 分片与副本
一个index可能存储大量的数据,且超过了一个节点硬件的容量限制。比如,一个index存储了10亿个文档,这将占据1TB的硬盘,这不适合存储在一个节点的硬盘上,或者在如此大的数据量的情况下,从单一节点请求未免太慢。
去解决这个问题,elastisearch细分index为多个碎片称之为shards。当创建索引时,你可以定义你想要的shards数量。每个shard都是功能齐全、独立的‘index‘,且可分布在集群的任何节点上。
分片重要主要有以下两点:
- 它允许你水平的拆分/扩展你的数据量
- 它允许你分发和并行的跨分片操作(可能在多个节点上),从而提高性能和吞吐量。
shard是如何分布的和文档是如何聚合回搜索请求点是完全由elasticsearch管理的,这对于你来说是透明的。
在网络/云环境,故障在任何时候都可能不期而至,这是非常有用和高度推荐的去部署一个故障转移机制,以防shard/node不知何故掉线或者消失因为某种原因。为此,elasticsearch允许你去给shards 部署一个或者多个拷贝被称为副本shards,或者副本简而言之。
副本重要的两点原因:
- 支持高可用当shard/node挂掉。基于这个原因,需要明确注意的是副本永远不要和他的shard分配到一个节点(node)上。
- 它可以扩展搜索量和吞吐量,因为搜索可以并行的在所有副本上执行
总结,每个index可以拆分成多个shards。一个index也可以被复制0次或者多次。一旦被复制,每个index将拥有主分片(primary)和副本分片(replica)。index在创建的时候可以指定shards和replicas的数量。index创建后,副本的数量可以在任何时候动态的调整,但是主分片(primary)的数量是不能调整的。
默认,每个index在es里被分配5个主分片和一个副本,这个的意思是如果你有至少两个节点在你的集群里,你的index将有5个主分片和另五个副本分片(1 个完整的副本),总共10个分片对每个index。
注意
每个es的shard 都是一个lucene index。在每个Luene index里,documents数量都有个上线。根据LUCENE-5843,这个限制是2,147,483,519(=integer.MAX_VALUE-128)。你可以监控shard size 使用_cat/shards api (之后会学习到)
Elasticsearch安装
Elasticsearch的运行需要java的支持,es需要至少java 7。当写作本节的时候,推荐使用Oracle JDK version 1.8.0_73。所以在安装es之前需要先查看java 的版本通过执行以下命令
- java -version
- echo $JAVA_HOME
es官网有很重类型的es安装文件,现在我们以tar文件为例说明(linux 平台)
下载tar 文件:
curl-L-O
https://download.elastic.co/elasticsearch/release/org/elasticsearch/distribution/tar/elasticsearch/2.3.2/elasticsearch-2.3.2.tar.gz
解压
tar-xvf
elasticsearch-2.3.2.tar.gz
进入解压后的 es目录
cd
elasticsearch-2.3.2/bin
启动es
./elasticsearch
此时集群名字和节点名字都是默认的 如果想开启守护进程 可以加-d 参数
如果想启动es的时候自己指定集群名字和节点名字,可以加以下参数
./elasticsearch--cluster.name
my_cluster_name --node.name
my_node_name
其中my_cluster_name和my_node_name就是要新命名的集群名字和
节点名字
默认 es使用端口号9200来支持REST API的请求。
Exploring Your Cluster(探索你的集群)
我们可以使用curl或者其他任何可以进行http/rest请求的工具与es进行交互请求。
集群健康
curl‘localhost:9200/_cat/health?v‘
epoch
timestamp cluster status node.total node.data shards pri relo init unassign pending_tasks max_task_wait_time active_shards_percent
1462841542 08:52:22 elasticsearch yellow 1 1 139 139 0 0 139 0 - 50.0%
这个我自己搭建的一个cluster,可以看到我集群elasticsearch 状态为yellow,因为我只有一个节点,主分片和副本分片不能在一个node上,故副本分片没有被分配,因此状态是yellow,但是整个集群是完全可用的。
集群状态有三种,green、yellow、red。green的意思就是集群一切正常,功能完全可用。yellow的意思是所有数据可用但是一些副本没有被分配(集群完全可用),red的意思是一些数据是不可用的因为某种原因。注意就算一个集群的状态是red,它仍然是部分可用的(仍将从可用的分片上提供请求服务),但是需要尽快修复,因为已经丢失数据了。
查看集群列表
curl‘localhost:9200/_cat/nodes?v‘
列出所有index
curl‘localhost:9200/_cat/indices?v‘
创建索引
curl -XPUT ‘localhost:9200/customer?pretty‘
此命令代表创建一个名为customer的index
如果返回此值就代表创建成功
{
"acknowledged" : true
}
初识Elasticsearch
标签:
原文地址:http://blog.csdn.net/baoxifu/article/details/51356089