什么是ES?
是一个高可用分布式的搜索引擎。可以用于实时存储、检索数据。
底层是使用Lucene全文检索框架。
基本概念
- 存储结构:由_index _type和 _id标识唯一的一个文档
- _index:指向一个或多个物理分片的逻辑命名空间
- _type:用于区分同一个集合中的不同的细分(ES6.X中只允许一个index下创建一个type,7.X中会删除type这个概念)
- _id:文档唯一标识,由系统生成或者使用者提供
- Near Realtime(NRT近实时):是指新增到ES的数据在1秒后就可以被检索到。以及其检索和分析响应速度可以达到秒级别。
- Cluster(集群):包含多个节点。
- Green:所有主分片和副分片都正常运行
- Yellow:所有主分片运行正常,但是不是所有副分片都运行正常。
- Red:有主分片没能正常运行
- Node(节点):
- 主节点:负责集群层面相关操作,管理集群变更;集群中有且仅有一个。
- 为了防止多主产生脑裂,es根据discovery.zen.minimum_master_nodes参数防止脑裂。一般配置为N/2+1,N为集群中候选主节点个数。
- 由多个候选主节点选举一个主节点。
- 候选主节点配置参数 node.master:true
- 数据节点:负责保存数据、执行数据相关操作
- 节点名称:默认随机分配,如果启动多个节点构成集群,则需要将节点名称改成相同的集群名称。
- Index(索引):指向一个或多个物理分片的逻辑命名空间。
- 一个索引可以有多个分片。
- 多个主分片:主分片之间数据不一样,所有主分片的并集是当前索引的所有数据。
- 多个副分片:
- 同一个主分片的多个副分片的数据同一时间段不一定完全相同,但是最终是完全相同的。因为副本数据同步速率可能不一致,主分片在接收到一定程度副分片返回成功后就认为数据保存成功。
- 不同主分片的副分片数据不相同。
- 一个节点有多个索引分片
- 单节点的情况下,所有分片都在同一个节点,多节点情况下,为了保证数据可靠性,会将主/副分片分配到不同的节点中。
- 主节点:负责集群层面相关操作,管理集群变更;集群中有且仅有一个。
- Shard(分片):
- 分布式系统中,单机无法存储规模巨大的数据,要依靠大规模集群处理和存储这些数据。因此需要将数据分成若干小块分配到各个机器上。
- 除了将数据分片,提高水平扩展能力;还通过将数据复制到多个副本,放置不同机器增加可用性,同时多个数据副本还能提高读操作的并发度。