笔记三:基本概念-文档、索引和 REST API
文档
ES是面向文档的,文档是所有可搜索的最小单位
文档会被序列化成JSON格式,保存在ES里面
每个文档有个UNIQUE ID -可以自动生成也可以指定
JSON文档
一篇文档包含一系列的字段,类似数据库-表里的一条记录(ROW)
文档格式灵活,不需要预先规定格式
类似MYSQL里面的CHAR\VARCHAR类型
,可以自己指定,也可以ES自动推算,支持数组、跟嵌套TODO未懂
文档的元数据
索引
文档里的_index 对应索引的名TYPE
7.0开始,一个索引只能创建一个TYPE-‘_doc’
类似INODB的概念
抽象与类比
REST API-方便被各种语言调用
节点
节点是一个ES的实例
本质就是一个JAVA进程
一台机器上可以运行多个ES进程
每个节点都有名字,通过配置文件配置,或者启动
-E node.name=lsk
指定每个节点启动之后,会分配一个UID,保存在data目录下
不同节点承担不同角色。
Master-eligible nodes
每个节点启动之后,默认就是Master eligible节点
- 可以设置 node.master:false 禁止
Mater-eligible 节点可参加选主流程,成为Master节点
当第一个节点启动时候,它会将自己选举成Master节点
每个节点都保存了集群的状态,只有Master节点才能修改集群的状态信息
- 集群状态(Cluster State) ,维护了一个集群中必要的信息
- 所有节点信息
- 所有的索引和其相关的Mapping 与 Setting 信息
- 分片的路由信息
- 如果任意节点都能修改信息导致数据不一致
Data Node
- 可以保存数据的节点,负责保存分片数据。
Coordinating Node
- 负责接收Client的请求,将请求分发到合适的节点,最终把结果汇聚到一起
- 每个节点默认都起到 Coorinating Node的职责
其他的节点类型
- Hot & Warm Node (冷热节点)
- 不同的硬件配置的Data Node,用来实现Hot(热数据) & Warn(旧数据)架构,以降低集群部署的成本
- Machine Learning Node
- 负责跑机器学习的JOB,用来做异常检测
- Tribe Node ( 未来要被淘汰)
- 5.3 开始使用 Cross Cluster Serach
- 集群状态(Cluster State) ,维护了一个集群中必要的信息
配置节点类型
分片(Primary Shard & Replica Shard)
主分片,用来解决数据水平扩展问题。通过中分片,可以将数据分布到集群内的所有节点之上
- 一个分片是一个运行的Lucene的实例
- 主分片数在索引创建时指定,后期不允许修改,除非 Reindex
副本,解决数据高可用问题。分片是主分片的拷贝
- 副本分片数,可以动态的调整
- 增加副本数,可以在一个程度上提高服务的可用性(读取的吞吐)
图中,3个主分片分散到3个节点上,副本分配到其他节点上
分片的设定
- 对于生产环境中分片的设定,需要提前组好容量规划
- 分片数设置过小
- 导致后续无效增加节点实现水平扩展
- 单个分片的数据量太大,导致数据重新分配耗时
- 分片数设置过大,7.0开始,默认主分片设置成1(之前是5),解决了 over-sharding 的问题
- 影响搜素结果的相关性打分,影响统计结果的准确性
- 单个节点上过多的分片,会导致资源的浪费,同时也会影响性能
- 分片数设置过小
ES提供API ,了解集群情况
- Green - 主分片跟副本都正常分配
- Yellow - 主分片全部分配正常,有副本分片问能正常分配
- Red - 有主分片未能分配
- 例如:有磁盘容量超过85%时,去创建新的索引
GET _cluster/health //查看健康 { "cluster_name" : "lsk", "status" : "green", "timed_out" : false, "number_of_nodes" : 2, "number_of_data_nodes" : 2, "active_primary_shards" : 2, "active_shards" : 4, "relocating_shards" : 0, "initializing_shards" : 0, "unassigned_shards" : 0, "delayed_unassigned_shards" : 0, "number_of_pending_tasks" : 0, "number_of_in_flight_fetch" : 0, "task_max_waiting_in_queue_millis" : 0, "active_shards_percent_as_number" : 100.0 }
GET _cat/nodes // 相关node信息 //172.22.0.2 35 96 1 0.00 0.01 0.05 dim * es7_01 //172.22.0.4 33 96 1 0.00 0.01 0.05 dim - es7_02
GET _cat/shards //分片信息 .kibana_1 0 p STARTED 4 18.3kb 172.22.0.2 es7_01 .kibana_1 0 r STARTED 4 18.3kb 172.22.0.4 es7_02 .kibana_task_manager 0 p STARTED 2 29.6kb 172.22.0.2 es7_01 .kibana_task_manager 0 r STARTED 2 29.6kb 172.22.0.4 es7_02
- 例如:有磁盘容量超过85%时,去创建新的索引
- 对于生产环境中分片的设定,需要提前组好容量规划
本作品采用《CC 协议》,转载必须注明作者和本文链接
本帖由系统于 2年前 自动加精
GET _cat/nodes // 相关node信息
楼主你好,我想问下你上边这些命令在什么地方运行的?
我是win10 安装了docker ,在git工具 提供的命令行里边很不方便。。。
@Yii515 这个是在kibana里面运行的,具体安装流程你看我前几章笔记