一个ES集群中有多个Server节点,每个Server节点中含有多个Index。
主节点(Master)
主资格节点的主要职责是和集群操作相关的内容,如创建或删除索引,跟踪哪些节点是集群的一部分,并决定哪些分片分配给相关的节点。稳定的主节点对集群的健康是非常重要的,默认情况下任何一个集群中的节点都有可能被选为主节点,索引数据和搜索查询等操作会占用大量的cpu,内存,io资源,为了确保一个集群的稳定,分离主节点和数据节点是一个比较好的选择。
数据节点(Server)
数据节点主要是存储索引数据的节点,主要对文档进行增删改查操作,聚合操作等。数据节点对cpu,内存,io要求较高, 在优化的时候需要监控数据节点的状态,当资源不够的时候,需要在集群中添加新的节点(可横向拓展)。
节点对等
每个节点都能接受请求, 每个节点接收到请求后能把该请求路由到相关数据的其它节点上, 接受原始请求的节点负责采集数据并返回给客户端。
Index(索引)
在ES中的index,可以理解为是一份数据的标识,类似于在hive中一份数据要通过一个表名来标识。
一个Index含有多个分片(shard),其中有一个 primary 主分片,负责写入,其他副本为 replica,不能写,只能同步 primary 的数据,但可以处理读请求。
分片机制
将文本数据切割成n个小文本存储在不同的节点, 减少大文件存储在单个节点上对设备带来的压力。
分片的副本
在集群中某个节点宕机后,通过副本可以快速对缺失数据进行复盘
分片的负载均衡
例如现在有10个分片(shard),集群中有三个节点, ES会进行均衡分配,以保持整体请求的负载均衡。增加或减少节点时会自动负载均衡(rebalance)
ES的底层是Lucene引擎,ES的每一个分片对应到底层实际上就是一个 Lucene Index,包含多个 segment 文件,和一个 commit point 文件。
segment
segment 文件存储的就是一个个的 Document,是负责真正存储数据的。
commit point
commit point 相当于一个索引文件,记录了都有哪些 segment 文件。