1 . node(节点) : 一个运行的Elasticsearch实例就是一个节点.
用户可以将请求发送给任意节点,每个节点都知道任意文档的位置,并且能将我们的请求转发到任意存储我们需要的文档的节点上.
2 . shard(分片) : 一个分片是一个底层的工作单元,它仅仅保存的数据的一部分.
索引(名词)其实是一个或者多个分片的逻辑命名空间.其实一个分片是一个Lucene实例.分片分为主分片和副本分片.
3 . 查询集群健康 : GET / _cluster/health
主要注意该请求返回结果的status字段,分为green,yellow,red三种状态.green表示所有的主,副分片都可用;yellow表示所有的主分片都可用,有的副分片都不可用;red有主分片不可用.
1 . 每当一个文档被索引(动词)时,elasticsearch是如何知道文档应该存放在哪个分片呢?
公式 :shard = hash(routing) %number_of_primary_shards
公式里面routing是一个固定的值,通常默认为文档的id,hash函数将routing生成一个值,这个值再与主分片的数量取余.结果范围就是在0~(主分片数量-1)之间.
所有的API都支持routing这个参数,我们可以根据控制这个参数来自定义文档和分片之间的映射.
2 . 新建,索引(动词),删除索引时,分片之间是如何交互的?
举例 : 假设目前集群有3个node(节点),每个节点有两个分片,节点的属性如图,现在请求一个分片向并没有存储该分片的主分片的node请求.
步骤如图 :
当shard2的两个副分片都操作成功并向主分片报告以后,node1再将结果返回给用户.