ES是基于Lucene的分布式搜索引擎。
核心思想就是在堕胎服务器上启动多个ES进程实例,组成一个ES集群。

ES存储数据的基本单位是索引

index -> type -> mapping -> document -> field
一个index可能就一个type,也可能是多个type。

一个index是一个类别的表,具体的每个type代表了mysql中的一个表,每个type都有一个mapping,如果认为一个type就是一个具体的表 ,index就代表多个type同属于一个类型,而mapping就是这个type的表结构定义。 实际上index里的一个type里写入一条数据,叫做document,一条document就代表了mysql中某个表里的一行,每个document里面有多个field, 每个field就代表了这个document中一个字段的值。

搞一个索引,这个索引可以拆分成多个shard,每个shard存储部分数据 ,拆分多个shard的好处:

  • 支持横向扩展
  • 提高性能,多个shard即多台服务器上,所有的操作,都会在多台机器上并行分布式执行,提高了吞吐量和性能。

通过replica的方案。这个shard的数据实际上是由多个备份,如果某个机器宕机了,由别的副本在其他机器上 ,高可用。

ES集群有多个节点,会自动选举一个节点做master节点,这个master节点其实就是干一些管理的工作的,比如维护索引元数据,负责切换primary shard 和 replica shard身份等。如果master节点宕机了,会重新选举一个master节点。

如果非master节点宕机了,会由master节点,让那个宕机几点上的Primary Shard的身份转移到其他机器上个的replica shard,接着你要是修复了宕机的机器,重启了之后,master节点会控制将确实的replica shard 分配过去,同步后续修改的数据之类的,让集群恢复正常。