我在AWS上有一个AWS集群,它有一些数据。数据是从Kinesis Firehose中摄取的,但是我得到了以下错误:
{"attemptsMade":8,"arrivalTimestamp":1660873371793,“errorCode”,“400”,“原因”:“验证失败: 1:此操作将添加10个总碎片,但该集群当前打开的最大碎片为3996/4000;”}
我有4个节点集群,当我试图获得分配给每个节点的碎片数量时,如下所示:
shards disk.indices disk.used disk.avail disk.total
983 89.8gb 115.1gb 376.8gb 492gb
983 91.2gb 116.5gb 375.4gb 492gb
983 89.1gb 114.5gb 377.5gb 492gb
983 90.6gb 115.9gb 376gb 492gb 在上面,shards列是什么意思?这是节点可以容纳的碎片总数(最大值)吗?
然后,我试图得到所有的索引和它们的碎片PS:在下面,我没有添加所有的索引,因为在3000+索引上有,所以下面有几个:
GET _cat/shards?v
index shard prirep state docs store
mc-2022-08-07 4 p STARTED 23 182.5kb
mc-2022-08-07 4 r STARTED 23 182.5kb
mc-2022-08-07 2 r STARTED 13 217.6kb
mc-2022-08-07 3 p STARTED 9 192.9kb
mc-2022-08-07 1 p STARTED 10 193kb
mc-2022-08-07 0 p STARTED 13 71.3kb
. . .我试图在上面的输出的shard列中添加所有的值,最后得到了值7506
但是根据上面的错误消息,它不能超过4000,但是它已经有了值7506
有人能帮我了解这里发生了什么吗?谢谢
发布于 2022-08-19 03:47:46
第一个输出显示每个节点都有983个碎片。看起来,您正在尝试添加另一个索引,每个索引包含5个主碎片+一个副本,这意味着需要额外添加10个碎片。
有一个名为集群范围设置的cluster.max_shards_per_node,它防止每个节点拥有超过1000个碎片,在您的例子中,4x1000= 4000。当然,这是一个可以更改的默认值,只是作为一个安全网,不使集群过载。
取消这一限制的命令如下:
PUT _cluster/settings
{
"persistent": {
"cluster.max_shards_per_node": 1100
}
}但是,看看您的第二个输出,我们可以得出以下几点:
我们没有看到_cat/shards的完整输出,但取决于您的工作负载,您的每个索引可能只需要一个主碎片即可。可以在索引创建时或在索引模板中为索引定义默认映射和设置。
关于_cat/shards输出的另一点,您在shards列中看到的数字不是若干碎片,而是碎片的id。如果索引有5个主碎片+一个副本,您将得到
但是,如果计算_cat/shards输出中的行数,将得到3996行。
总之,我强烈建议您实现索引生命周期管理(ILM),或者因为您正在使用Opensearch,所以这个特性被称为索引状态管理(ISM),以便只在绝对必要时创建一个新的索引。
另外,我建议再索引将小的每日指数合并成更大的指数(每周、每月等)。
https://stackoverflow.com/questions/73411388
复制相似问题