elasticsearch basic concept - downgoon/hello-world GitHub Wiki

Elasticsearch 架构与概念

任何一个分布式系统,认识它的基本思路都是:

  • 了解它的数据模型:从逻辑上,它刻画了一个什么样的编程数据模型。
  • 了解它的分布式原理:分布式机制,无非是Partition,Replica和Allocation/Assignment。
  • 动态发现与选主: 分布式需要回答的一个基本问题是 集群(Cluster)与成员(Member),成员里面有Master和Slave的角色。很多分布式系统都借助ZooKeeper来完成这项工作。但成熟的分布式系统都有个趋势是自建类似ZK的功能,好处是部署会变得简单。

Elasticsearch 的数据模型

在关系型中,database -> Table -> Row / Column / Schema 对应ES中, Index -> Type -> Document / Field / Mapping

  • 索引(Index): 相当于关系数据库中的database概念,一个集群中可以包含多个索引。这个是个逻辑概念。
  • 类型(Type): 相当于数据库中的table概念,mapping是针对 Type 的。同一个索引里可以包含多个 Type。
  • Mapping: 相当于数据库中的schema,用来约束字段的类型,不过 Elasticsearch 的 mapping 可以自动根据数据创建。
  • **文档(Document) **: 相当于数据库中的row。
  • 字段(Field): 相当于数据库中的column。

Elasticsearch的分布式

谈到分布式,都会有三个概念:Partition,Replica 和 Allocation/Assignment。

  • 何为Partition: 在关系型中,如果一个表太大,会横向和纵向拆表,分布到不同的机器。在ES中,如果索引太大,也会分拆若干份。这里的Partition是逻辑概念,是数学概念。

  • 何为Replica: 一个数据存一份,万一那个数据出问题了,就丢失了。所以,一般都基于Partition做Replica处理。

  • 何为Allocation/Assignment: 逻辑上有Partition和Replica,物理上都要落实到机器上去。当然我们知道在分布式系统里面,一般都是以网络进程为单位的,所以更准确的说,不是机器,而是“节点(Node)”。所谓Allocation,即使将Partition和Replica分派到各个节点(Node)上去的方法与过程。

ES结构

两个端口

ES 有两个端口:HTTP REST 的9200 和 TCP RPC 的9300 端口。

9200&9300.png

结构图

ES 把最终以来的文件系统抽象为了Gateway,使得索引文件既可以存在本地文件系统,又可以存在HDFS,还可以存在Amazon S3里面。

ES Gateway.png

第三方管理插件 elasticsearch_head

ES集群管理插件.png