前言
全面几篇文章主要是使用单机跑ElasticSearch的,在生产环境为了保证高可用和高吞吐量我们都会采用集群的方式部署。那么本章不涉及ElasticSearch集群的搭建,只涉及理论部分!
集群架构
上图中ElasticSearch集群中有多个节点,其中我们会从多个节点中选取一个Master,Master就是来管理整个ElasticSearch集群的,当我们只有一个节点时,那么我们的数据就都会放到那一个节点中去,如果我们增加新的节点,那么数据该往哪放,那么这就是由Master进行调度,所以整个集群是由Master进行管理的,包括索引的添加和删除等操作都是由Master进行控制的,但是存放的数据与Master无关,(当然也可以设置Master存放数据咯,只是一般不建议这么做,如果想在Master上存放数据配置node.data: true即可)数据是有Master找到具体的某个节点进行数据的操作,每个节点中;图中P0、P1、P2这些是我们的分片,一个完整的索引被切成几片分别存储在ElasticSearch集群的各个节点上的,图中R0、R1、R2对应的概念就是副本了,防止数据都是,做备份,注意图中分片对应的副本是不在同一个节点上的,这是防止分片和副本在同一个节点上这个节点挂了,那么分片也没了,备份也没了,这样会导致数据不安全,在节点中每个分片其实就是Lucene的索引,每一个Lucene都是一个全文检索引擎,那么我们访问任何一个都能检索数据,那么查询的时候ElasticSearch会将各个Lecture搜索引擎符合条件的数据进行聚合,然后统一返回,ElasticSearch集群查询相对新增、修改、删除要复杂一些。