回顾一下mongoDB的分布式:
- replica set:若干mongod组成,只有一个master可写,自动选举 。
- sharding: 若干mongos 作为前端router,每个shard对应一个replica set,还有一个replica set作为sharding metatadata的存储(config server)
MongoDB有两种process(或者说binary,instance),而ES集群的所有结点都是相同的Process - org.elasticsearch.bootstrap.Elasticsearch。
ES的分布式:
- 每个node具有相同binary。Every node is identical and handles a proportionate share of every activity in the system
- 动态选举master,动态的role(相同binary,但role,behavior不一定相同)
- 任何一个结点都可以对外提供服务 (注意Coordinator不等于master)
从内部的角度,每个结点都了解集群的membership,shard的分布这些全局信息。
ES的shard不是跟node直接绑定的,而是分两步:
- 第一步是决定一个全集分成几个部分进行管理、以及每个doc属于哪个逻辑shard的问题。
- 第二步才是每个shard和node之间的assign关系。这点和一般的一致性hash不一样,后者是一个key直接找到负责这个key的node。