一开始我也搞混了,以为分片就是节点
节点:节点就是我们一个个的主机,你也可以理解为一个个的ES
分片:分片就是将原来存放在一个节点上面的数据进行分片,然后存放到不同的节点。
分片分为主分片和副分片,副分片是用来进行数据拷贝的
比如这里创建一个索引库
- PUT /test
- {
- "settings": {
- "number_of_shards": 3, // 分片数量
- "number_of_replicas": 1 // 副本数量
- },
- "mappings": {
- "properties": {
- // mapping映射定义 ...
- }
- }
- }
这就表示这个索引库的数据会被存放到三个分片当中,三个分片会分到哪个节点上默认是有ES控制,同时也可以收主节点控制
es01、es02、es03表示三个节点,实体星号表示这个节点为主节点,右边的序号就是分片的序号,并且表示了分片在节点上的分布
下面看插入一条文档的过程,这样更能清楚明了的明白节点与分片的区别
过程:
1)新增一个id=1的文档
2)主节点对id做hash运算,假如得到的是2,则应该存储到shard-2
3)shard-2的主分片在node3节点,将数据路由到node3
4)node3保存文档
5)node3将数据同步给shard-2的副本replica-2,在node2节点
6)返回结果给coordinating-node节点
7)返回结果给用户
注解:
1)shard就是分片的意思
2)hash算法将文档id与分片数量进行取余得到分片的序号,然后就将文档数据存放到该分片所在主机的data数据节点上面去
3)主分片保存数据的时候,副分片也要进行数据备份
现在应该知道了分片和节点之间的区别