目录
2. 候选节点/投票节点 (master eligible 缩写m)
6. 候选客户端节点 (remote_cluster_client 缩写 r)
一. 节点
1. 概念: 节点是指elasticsearch的一个实例, 可以理解为一个elasticsearch的进程。
一个节点 ≠ 一台机器, 一个机器上可以同时启动多个节点。注意在一台机器上启动多个
节点时, 注意使用不同端口, 避免端口冲突。
如图: 以下为elasticsearch启动的节点
http://IP:PORT
二. 角色
#查看节点属性, v代表着以vip身份查看
GET _cat/nodes?v
1. 主节点( active master *)
一般在日常口语中说的master就是 active matser 而非 候选节点 master eligible。主节点在一 个集群中只能有一个,负责管理整个集群。在matser节点宕机后,其他候选/投票节点会重新选 举出一个 主节点。
如上图所示: node-1/2/3的角色都有m, 代表所有节点都为候选节点,但只有node-2被真正选 举为了 主节点 active master,被选举为主节点后 “master” 属性为 * 。
2. 候选节点/投票节点 (master eligible 缩写m)
默认情况下, master eligible节点是在集群状态发布或初始化期间参与选举及完成某些任 务的 节点,配置了matser的节点都是有效的投票节点,也可以参与选举(被选举为主节点)
任何不是仅投票节点的 matser节点都可以在选举过程被推选为主节点
如上图, 所有节点都拥有候选节点的角色
3. 仅投票节点(voting_only 缩写 v)
严格来说 voting_only 并不能单独作为一个角色使用, 需要和matser一起使用, 当节点配置配置了voting_only后, 该节点在集群选举过程中仅具备投票权利, 并不能被选举为主节点.
如上图, node-3即为仅投票节点
4. 数据节点 (data 缩写 d)
见名知意, 该节点主要用来存储数据, 包含了已编入索引的文档分片及副本。另外,数据节点 还要承担数据操作的职责, 如CRUD,查询,聚合等等。这些操作都是IO密集型, 内存密集 型, CPU密集型。 我们需要随时监控资源, 在资源过载时及时添加新节点尤为重要。
如上图, 三个节点均为数据节点。
5. 预处理节点(Ingest 缩写 i)
预处理节点有点类似于 logstash中的管道,所以也会叫他 ingest pipeline。常用于在数据写入前进行的一些预先处理,如去掉空格,split,格式规范化等等。
如上图, node-1及node-2 为预处理节点
6. 候选客户端节点 (remote_cluster_client 缩写 r)
具备该角色的节点,可以充当其他集群的远程客户端
该角色在如下功能中必须配置
- 跨集群搜索
- 跨集群复制
- 通过公网地址访问节点
三. 索引
1. 概念: ElasticSearch中索引(index)的作用等价于Mysql中表(table)。索引声明了数据的字段名称, 字段类型等,与table类似。 但不同的是,elasticsearch在数据写入前不绝对需要提前建立好索引,es提供了自动映射器来自动完成字段映射,但值得注意的是,索引一旦建立映射则无法修改, 在工作中尽量提前建立好索引在进行数据写入。
2. product索引的组成部分:
为方便大家查看, 此处为折叠的简易信息, 若想了解详细信息, 可看下面代码。
aliases | 索引别名, 可以为索引设置一个或多个别名,也可为多个索引设置通一个别名。 |
mapping | 映射。声明了索引包含哪些字段, 字段名称,长度, 评分,分词器等 |
setting | 索引设置, 常用设置如分片及副本数量等 |
#查看索引
GET /product
#结果
{
"product" : {
"aliases" : { },
"mappings" : {
"properties" : {
"createtime" : {
"type" : "date"
},
"desc" : {
"type" : "text",
"fields" : {
"keyword" : {
"type" : "keyword",
"ignore_above" : 256
}
}
},
"lv" : {
"type" : "text",
"fields" : {
"keyword" : {
"type" : "keyword",
"ignore_above" : 256
}
}
},
"name" : {
"type" : "text",
"fields" : {
"keyword" : {
"type" : "keyword",
"ignore_above" : 256
}
}
},
"price" : {
"type" : "long"
},
"tags" : {
"type" : "text",
"fields" : {
"keyword" : {
"type" : "keyword",
"ignore_above" : 256
}
}
},
"type" : {
"type" : "text",
"fields" : {
"keyword" : {
"type" : "keyword",
"ignore_above" : 256
}
}
}
}
},
"settings" : {
"index" : {
"routing" : {
"allocation" : {
"include" : {
"_tier_preference" : "data_content"
}
}
},
"number_of_shards" : "1",
"provided_name" : "product",
"creation_date" : "1692791625243",
"number_of_replicas" : "1",
"uuid" : "5gXxgSaNSxal7mKg82w33g",
"version" : {
"created" : "8010099"
}
}
}
}
}
四. 类型
概念: 类型这个概念在7.x 之后已被删除, 这里的类型指的是索引的类型而非字段的类型。但在ES中仍保留有相关语法,因此类型的概念还需要大家有一个初步的认知。
五. 文档
1. 概念: 在elasticsearch中, 一个文档即一条数据,是最小的存储单元,大家可以理解为mysql中的一行数据。 在elasticsearch中, 数据是以json的格式存储的。
2. 组成结构:
- 元数据: 可以理解为系统相关字段, 每条数据都是默认拥有这些字段
- 业务字段: 即我们在开发中定义的数据
六. 集群
1. 概念: 集群是多个elasticsearch节点组成,提供了elasticsearch的高可用, 高性能, 高负载能力。
此处不做过多讲解, 详情请点击一下链接。
七. 分片
1. 概念: Shard即分片, 是elasticsearch的数据载体。在ES中数据被分为primary shard(主分片)和 replica shard (副本分片),每一个主分片承载单个索引的一部分数据,分布于各个节点,副本分片为每个主分片的备份。副本分片不能和主分片在同一节点,分配原则是尽可能均匀在多个节点(如果有多个副本的话),以最大程度降低某个主分片出现问题后对整个集群乃至服务的影响。