基本概念
索引,对应关系型数据库一个数据库
文档,数据库中的一条记录
字段,数据库中的一个column列
映射,文档的数据结构
集群和节点:
在分布式系统中,为了完成海量数据的存储、计算并提升系统的高可用性,需要多台计算机集成在一起协作,这种形式被称为集群。这些集群中的每台计算机叫作节点。
分片、副分片:为了能存储和计算海量的数据,会先对数据进行切分,然后再将它们存储到多台计算机中;每个分片可以设置多个副分片,这样当主分片所在的计算机因为发生故障而离线时,副分片会充当主分片继续服务。
架构原理
节点职责
节点按照职责可以分为master节点、数据节点和协调节点
master节点负责维护整个集群的相关工作,管理集群的变更,如创建/删除索引、节点健康状态监测、节点上/下线等。数据节点主要负责索引数据的保存工作。客户端向es集群的某一个节点发起请求,这个节点就是协调节点;协调节点的生命周期和此次请求一样,一般情况下可以把某些节点专门设置为协调节点接收客户端请求。
主分片和副分片
为了支持分布式搜索,es会把数据按照分片进行切分。一个索引由一个或者多个分片构成,且每个分片可以有0到多个副分片。
文档读写过程
如上图所示,集群中有三个节点,三个主分片,每个分片有两个副分片;客户端向节点1发起写入一个文档,此时节点1是协调节点,节点1通过映射计算出分片ID(协调节点通过hash和取模计算出分片id),然后根据路由表(分片id和节点的路由表)计算出应该存储到哪个节点,假如计算出的结果是分片1(在节点2上),此时节点1就把请求转发给节点2,节点2的主分片1把数据存储之后会转发请求到副分片1所在的节点1和节点3,当所有存储完成后由协调节点节点1响应给客户端存储成功。
如上图所示,集群中有三个节点,三个主分片,每个分片有两个副分片;客户端向节点1请求一个文档,此时节点1是协调节点,节点1通过映射计算出分片ID(协调节点通过hash和取模计算出分片id),假如是分片1,分片1分为主、副两种分片,分别在节点2(主分片1),节点1(副分片1)和节点3(副分片1)上。假如此时协调节点根据轮询算法选择的是节点3,那么它会把请求转发到节点3,节点3查询自己分片上的数据返回的协调节点1,由节点1返回给客户端结果。
关于es中type:
在 5.X 版本中,一个 index 下可以创建多个 type;
在 6.X 版本中,一个 index 下只能存在一个 type;
在 7.X 版本中,直接去除了 type 的概念,就是说 index 不再会有 type。
文章基于elasticsearch7.10.0