本文共 1129 字,大约阅读时间需要 3 分钟。
一 分片概念以及设置
分片概念:一个 分片 是一个底层的 工作单元 ,它仅保存了全部数据中的一部分。我们往 Elasticsearch 添加数据时需要用到索引 —— 保存相关数据的地方。索引实际上是指向一个或者多个物理 分片 的 逻辑命名空间。
分片分为主分片和副本,数量可以设置。
举个例子:
假设elasticsearch集群由6台服务器,分别是 node-1、node-2、node-3、node-4、node-5、node-6
分片以及副本的数量在创建索引时候设置:
PUT /index-test-1
{
"settings" : {
"index" : {
"number_of_shards" : 6,
"number_of_replicas" : 1,
"max_result_window" : 50000
}
}
}
其中分片数量设置为 6,副本数量设置成 1;即index 包含6个主分片,6个副本,均衡散落在6台服务器上;
下图是kinaba视图,可以看出该索引分片的散落位置
node -1 : 主分片 5 、副本 4
node -2 : 副本 0 、副本 2
node -3 : 主分片 0 、副本 1
node -4 : 主分片 3 、主分片 4
node -5 : 副本 3 、副本 5
node -6 : 主分片 1 、主分片 2
主分片负责读、写,副本只负责读。
二 分片动态变化
索引创建好之后,在每个节点上的分片或者主从关系并不是一成不变的;
比如node-3 节点因为网络原因失联了,集群该如何应对? (这在生产环境中实际遇见过此问题)
集群会对分片进行再均衡,具体如下:
分片动态变化保证了集群数据的安全性;同时也会引发其他问题,比如Node-3是偶尔失联,几分钟之内有回来了,那么这些操作也会不会被终止,恰巧如果集群数据量巨大,那么这个机制会引发大量的IO操作,以至于集群卡死。这样的结果肯定不是我们想要的。如何解决这个问题,我们将在另外一篇文章集群管理进行解答。
参考:
《Elasticsearch权威指南》