引言
ES体系化梳理第二篇,从基本概念和术语开始,走查了集群中的节点以及其在ES集群中可扮演的角色,最后走查了常见的集群部署架构。本文主要内容有:
一、基本概念与术语
Document: 是es搜索的最小单位,被序列化成json对象存入es。
Index: 索引是文档的容器,一类文档的集合,存储在分片Shard上。
节点: ES实例的java进程,节点名称在启动时通过 -Enode.name指定,每个节点存储集群状态信息。
主分片: 在创建索引时指定主分片,解决数据水平扩容问题。
副本: 主分片的备份,解决数据高可用问题。
二、节点角色与集群状态
Node官方文档:
https://www.elastic.co/guide/en/elasticsearch/reference/7.10/modules-node.html
Elasticsearch7.9通过node.roles配置节点角色,在配置文件elasticsearch.yml设置
角色选项 | 说明 |
---|---|
master | node.roles: [ master ]:拥有选举权和被选举权 |
master, voting_only | node.roles: [ master, voting_only ]:只有选举权没有被选举权 |
data | node.roles: [ data ]:处理与数据相关的操作CRUD、搜索、聚合 |
data_content | node.roles: [ data_content ]:冷热分层架构,通用节点,CRUD、搜索、聚合 |
data_hot | node.roles: [ data_hot ]:冷热分层架构,hot节点承担快速读写操作,可以配置为SSD盘 |
data_warm | node.roles: [ data_warm ]:冷热分层架构,warm节点索引不定期更新,查询频率比热节点低,配置低于热节点 |
data_cold | node.roles: [ data_cold ]:冷热分层架构,cold节点只存只读索引,低配置节点 |
ingest | node.roles: [ ingest ]:ingest节点用于对写入和查询的数据进行预处理 |
Coordinating only node | node.roles: [ ]:协调节点不承担master职责、不保存数据、不预处理;负责接受请求、分发请求、汇总结果 |
备注:生产环境建议一个节点设置单一角色,有利于更好的性能和根据角色定制化配置。
衡量集群健康与否的三种状态:
Green:主分片与副本正常分配
Yellow:主分片全部正常分配,有副本分片未正常分配
Red:有主分片未能正常分配
查看集群状况
官方API文档
// index API
https://www.elastic.co/guide/en/elasticsearch/reference/8.1/indices.html
// Get index API
https://www.elastic.co/guide/en/elasticsearch/reference/8.1/indices-get-index.html
// cat API
https://www.elastic.co/guide/en/elasticsearch/reference/8.1/cat.html
查询document总数
三、常用集群部署架构
生产环境架构中每个节点配置单一职责,具体为Master、Data、Ingest、Coordinate的一个,有利于每个角色可以使用不同的机器配置。
备注:集群中存在大量复杂的查询时,通过增加协作节点提升查询性能。
备注:通过配置不同的读写负载均衡,分离读写请求,读请求路由到协作节点,写请求路由到Ingest节点,协作节点和Ingest节点可以水平扩展。
备注:冷热分离架构,Hot节点通过高配置承担更多的读写压力,冷节点承担一定的读请求,常见于日志类使用场景。
备注:ES集群由data节点和master节点构成,常见于非生产环境以及线上读写均无压力的场景。