集群
其中一个节点就是一个 ES 进程,多个节点组成一个集群。一般每个节点都运行在不同的操作系统上,配置好集群相关参数后 ES 会自动组成集群(节点发现方式也可以配置)。集群内部通过 ES 的选主算法选出主节点(目前版本 1.2 存在脑裂问题),而集群外部则是可以通过任何节点进行操作,无主从节点之分(对外表现对等 / 去中心化,有利于客户端编程,例如故障重连)。 索引
“索引”有两个意思:
作为动词,它指的是把一个文档“保存”到 ES 中的过程,索引一个文档后,我们就可以使用 ES 搜索到这个文档
作为名词,它是指保存文档的地方,相当于一个数据库概念中的“库”
为了方便理解,我们可以将 ES 中的一些概念对应到我们熟悉的关系型数据库上:
ES索引类型文档DB库表行分片
ES 是一个分布式系统,我们一开始就应该以集群的方式来使用它。它保存索引时会选择适合的“主分片”(Primary Shard),把索引保存到其中(我们可以把分片理解为一块物理存储区域)。分片的分法是固定的,而且是安装时候就必须要决定好的(默认是 5),后面就不能改变了。
既然有主分片,那肯定是有“从”分片的,在 ES 里称之为“副本分片”(Replica Shard)。副本分片主要有两个作用:
高可用:某分片节点挂了的话可走其他副本分片节点,节点恢复后上面的分片数据可通过其他节点恢复
负载均衡:ES 会自动根据负载情况控制搜索路由,副本分片可以将负载均摊
一个示例
来个示例总结一下上面的内容(结合下面的图一起看):
3 个 ES 节点(es-58/59/60)组成一个集群
搭建集群时使用默认的主分片数 5,shard0~shard4
该集群内有加入两个索引 index1、index2
这两个索引中分别“索引”(保存)了两个文档
index1 索引中这个文档被 ES 自动保存到了分片 2 中,主分片在 es-58 节点,副本分片在 es-59 节点
index2 索引中这个文档被 ES 自动保存到了分片 2 中,主分片在 es-59 节点,副本分片在 es-58 节点
(该图是使用 ES 的 RESTful 接口获取的,后面会介绍常用接口) 多租户
ES 的多租户简单的说就是通过多索引机制同时提供给多种业务使用,每种业务使用一个索引(关于多租户的详细定义与用途,可以参考这里)。前面我们提到过可以把索引理解为关系型数据库里的库,那多索引可以理解为一个数据库系统建立多个库给不同的业务使用。
在实际使用时,我们可以通过每个租户一个索引的方式将他们的数据进行隔离,并且每个索引是可以单独配置参数的(可对特定租户进行调优),这在典型的多租户场景下非常有用:例如我们的一个多租户应用需要提供搜索支持,这时可以通过 ES 根据租户建立索引,这样每个租户就可以在自己的索引下搜索相关内容了。 RESTful
这个特性非常方便,最关键的是 ES 的 HTTP 接口不只是可以进行业务操作(索引 / 搜索),还可以进行配置,甚至是关闭 ES 集群。下面我们介绍几个很常用的接口: