在ElasticSearch中,集群(Cluster),节点(Node),分片(Shard),Indices(索引),replicas(备份)之间是啥关系( 四 )


■网友
最近正在研究 Elasticsearch(下称 ES),试着回答下你的问题:
几个关键的概念:
Node:一个运行着的 ES 实例即为 NodeCluster:多个 Node 组成 Cluster。其中会有一个 Node 充当 Master 角色,用来进行集群管理类的工作Index:ES 的数据从逻辑空间上分为不同的 Index,这个概念可类比于 SQL 数据库的 table,一般集群中存在着多个 Index,即多个逻辑上的同类数据组合Shard:Index 只是逻辑上同类数据组合,从物理存储上,一个 Index 上的数据将被 Hash 分配到不同的 Node。每个物理上存储数据的最小单元即为 Shard。通常,一个 Cluster 有多个 Shard,一个 Index 上的数据将被存储于不同的 Shard 上Replica:ES 中数据的实际存储是以 Shard 为基本单位,容灾设计也是如此。ES 的 Shard 有两种类型:主分片和副本分片。其中副本分片只是对主分片数据的备份。当某一个主分片因某些原因挂掉了,副本分片将被提升为主分片。主分片和副本分片不会位于同一个 Node 中。举个例子,假如有 3 个 Node 组成一个 Cluster,其中这个 Cluster 拥有 3 个 Index: Index-01,Index-02 和 Index-03。我们将集群配置为 3 个主分片,1 个副本分片,则每个主分片都拥有一个副本分片。

■网友
集群=一堆节点。索引=一堆分片。副本=分片的备份
■网友
个人的理解,仅供参考:(1)cluster node 可以看做是物理视图概念。(2)shard 可以看做是业务层的概念,业务总是部署在 cluster中。shard呢就是运行在node上的。一个node可以运行多个shard,从资源高可用,当然是多shard叠加一个node,从隔离安全性看,最好一个shard部署一个node。(3)replicas通常是对indices,也时常说是对shard更大粒度的。(4)单排结构、双排结构;虚拟机、物理机。如果是已经虚拟好的vm,在日常、预发环境,还是叠加部署了。一个node尽可能部署更多的shard。线上环境,可以考虑预分配不同规格的vm,然后让每个vm部署一个合适的node,一个node运行一个shard。底层对应物理机,考虑jvm垃圾回收,多进程代替多shard。 中小应用,可以考虑单排结构。对应大应用,依然建议走两排结构,带来系统的高可以运维、性能的优化、扩容的便利、资源调度等。


推荐阅读