分片(shard):一个ES的index由多个shard组成,每个shard承载index的一部分数据。
副本(replica):index也可以设定副本数(number_of_replicas),也就是同一个shard有多少个备份。对于查询压力较大的index,可以考虑提高副本数(number_of_replicas),通过多个副本均摊查询压力
shard数量(number_of_shards)设置过多或过低都会引发一些问题:shard数量过多,则批量写入/查询请求被分割为过多的子写入/查询,导致该index的写入、查询拒绝率上升;对于数据量较大的inex,当其shard数量过小时,无法充分利用节点资源,造成机器资源利用率不高 或 不均衡,影响写入/查询的效率。
对于每个index的shard数量,可以根据数据总量、写入压力、节点数量等综合考量后设定,然后根据数据增长状态定期检测下shard数量是否合理。腾讯云CES技术团队的推荐方案是:
- 对于数据量较小(100GB以下)的index,往往写入压力查询压力相对较低,一般设置3~5个shard,number_of_replicas设置为1即可(也就是一主一从,共两副本) 。
- 对于数据量较大(100GB以上)的index: 一般把单个shard的数据量控制在(20GB~50G