本文介绍 Elasticsearch 的基本概念,包括文档和索引、节点和分片,以及 Elasticsearch 和关系型数据库的类比和 REST API。
Elasticsearch是面向文档的,文档是所有可搜索数据的最小单位。例如:
在 elasticsearch 中,文档会被序列化成 JSON 格式并保存。
JSON 对象由字段组成,每个字段都有相对应的字段类型,如字符串、数值、布尔、日期、二进制、范围类型。
每个文档都有一个唯一 ID,Unique ID 可以手动指定也可以通过 Elasticsearch 自动生成。
一篇文档包含了一系列字段,类似于数据库中的一条记录。JSON 文档格式灵活,不需要预先定义格式,字段的类型可以指定或通过 Elasticsearch 自动推算,JSON 文档还支持数组和嵌套。
文档的元数据
文档的元数据用于标注文档的相关信息。
元数据 | 描述 |
---|---|
_index | 文档所属的索引名 |
_type | 文档所属的类型名 |
_id | 文档唯一 ID |
_source | 文档的原始 JSON数据 |
_all | 整合所有字段内容到该字段(已废除) |
_version | 文档版本信息 |
_score | 相关性打分 |
索引 Index是文档的容器,是一类文档的集合。
Index 体现了逻辑空间的概念,每个索引都有自己的 Mapping 定义,用于定义包含的文档的字段名和字段类型。
Shard 体现了物理空间的概念,索引中的数据分散在 shard 上。
索引的 Mapping 定义文档字段的类型,Setting 定义不同的数据分布。
索引的不同语义 名词:一个 Elasticsearch 集群中,可以创建多个不同的索引,索引是文档的集合。 动词:将文档写入到 Elasticsearch(indexing) 名词:B 树索引、倒排索引
RDBMS | Elasticsearch |
---|---|
Table | Index(Type) |
Row | Doucment |
Column | Filed |
Schema | Mapping |
SQL | DSL |
在7.0之前,一个 Index 可以设置多个 Types,目前 Type 已经被 Deprecated,从7.0开始,一个索引只能创建一个 Type-“_doc”。
Elasticsearch 提供 REST API 供其他程序调用。
以下列举了一些 API 示例:
分布式系统的可用性和扩展性
Elasticsearch 分布式的特性
-E cluster.name=myes
GET _cluster/health
集群的健康程度使用3中颜色表示:
当集群中节点发生变化后,集群状态颜色由绿色变成黄色
集群发生变化后,副本和主分片的变化
节点是一个 Elasticsearch 的实例,本质上就是一个 JAVA 进程,一台机器上可以运行多个 Elasticsearch 进程,生产环境中建议一台机器只运行一个 Elasticsearch 实例。
每一个节点都有名称,通过配置文件或启动时 -E node.name=node1
指定。每一个节点在启动之后,会分配一个 UID,保存在 data 目录。
Master-eligible nodes 和 Master Node
每个节点启动后,默认为 Master eligible节点(取消设置 node.master:false
),Master-eligible节点可以参加选主流程,成为 Master 节点。当第一个节点启动的时候,它会将自己选举成 Master 节点。每个节点都保存了集群的状态,只有 Master 节点才能修改集群状态信息,如果任意节点都能修改信息会导致数据的不一致性。
集群状态(Cluster State)维护了一个集群中必要的信息,包括所有的节点信息、所有的索引和其相关的 Mapping 和 Setting信息、分片的路由信息。
Data Node 和 Coordinating Node
Data Node是可以保存数据的节点,用于保存分片数据,在数据扩展上起到了至关重要的作用。
Coordinating Node 负责接收 Client 的请求,将请求分发到合适的节点,最终把结果汇集到一起,集群中的每个节点默认拥有 Coordinating Node 的功能。
其他节点类型
配置节点类型
开发环境中一个节点可以承担多种角色。生产环境中,应该设置单一角色的节点。
节点类型 | 配置参数 | 默认值 |
---|---|---|
master eligible | node.master | true |
data | node.data | true |
ingest | node.ingest | true |
coordinating only | 无 | 每个节点默认都是 coordinating 节点 |
machine learning | node.ml | true(需要 enable x-pack) |
主分片(Primary Shard)
主分片用来解决数据水平扩展的问题。通过主分片可以将数据分布到集群内的所有节点之上。主分片数在索引创建时指定,后续不可以修改(reindex 可以)。
副本(Replica Shard)
副本用来解决数据高可用的问题,是主分片的的拷贝。副本的分片数可以动态调整,增加副本数还可以在程度上提高服务的可用性(读取的吞吐)
分片的设定
对于生产环境中的分片设定,要提前做好容量规划。
本文介绍了 Elasticsearch 的相关概念:文档和索引、API、以及节点的分类和分片。另外将 Elasticsearch 和关系型数据库进行对比。以及 Elasticsearch 集群的相关内容。
API 文本示例
//查看索引相关信息
GET kibana_sample_data_ecommerce
//查看索引的文档总数
GET kibana_sample_data_ecommerce/_count
//查看前10条文档,了解文档格式
POST kibana_sample_data_ecommerce/_search
{
}
//_cat indices API
//查看 indices
GET /_cat/indices/kibana*?v&s=index
//查看状态为绿的索引
GET /_cat/indices?v&health=green
//按照文档个数排序
GET /_cat/indices?v&s=docs.count:desc
//查看具体的字段
GET /_cat/indices/kibana*?pri&v&h=health,index,pri,rep,docs,count,mt
//查看每个索引占用内存
GET /_cat/indices?v&h=i,tm&s=tm:desc
//查看集群健康
GET /_cat/health?v
//查看集群节点
GET /_cat/nodes
原创声明:本文系作者授权腾讯云开发者社区发表,未经许可,不得转载。
如有侵权,请联系 cloudcommunity@tencent.com 删除。
原创声明:本文系作者授权腾讯云开发者社区发表,未经许可,不得转载。
如有侵权,请联系 cloudcommunity@tencent.com 删除。