Elasticsearch 集群集群自我保护配置
配置调试原因主要是为了保护ES 集群能够自我保护,避免业务人员写暴力查询语句,大量的占用内存或者CPU最终将es集群直接查挂。文档所有值均为参考值,具体设置多少合适需要根据集群规模、index分片数量、节点配置等等。。因素进行考量,设置合理阈值。
ES 版本 :elasticsearch-6.2.4-1.noarch
OS:centos7.X
除了在每个请求中设置超时之外,ES还支持全局性的搜索超时search.default_search_timeout,此设置没有默认值,设置为-1可以取消先前设置的值。
persistent :重启后依然有效
transient :重启后无效
PUT /_cluster/settings
{
"persistent" : {
"search.default_search_timeout" : "35s"
}
}
搜索可以通过标准的任务取消机制来取消。默认情况下ES仅仅在段边界(segment boundaries)来检查请求是否已经被取消,因此取消操作可能由于大段而延迟。要降低取消操作的响应时间,可以设置search.low_level_cancellation=true,但是要注意此设置会导致更加频繁的检查。定期检查自己是否被取消,如果是则退出查询。
PUT /_cluster/settings
{
"persistent" : {
"search.low_level_cancellation" :true
}
}
#查询正在运行的task
GET _tasks?detailed=true&actions=*indices:data/read/search
#取消任务
POST _tasks/CdoilmnzRVyllc0PbRbB2w:7280/_cancel
这个参数主要用于限制一次操作过多的分片,防止过多的占用内存和CPU资源。默认情况下ES不限制搜索请求牵涉到的分片数量,你可以设置软限制 action.search.shard_count.limit 来拒绝命中太多分片的请求。
如果看到错误日志如下,修改此参数可以解决问题。
"reason" : "Trying to query 1344 shards, which is over the limit of 1000. This limit exists because querying
many shards at the same time can make the job of the coordinating node very CPU and/or memory
intensive. It is usually a better idea to have a smaller number of larger shards. Update
[action.search.shard_count.limit] to a greater value if you really want to query that many shards at the same time."
PUT /_cluster/settings
{
"persistent" : {
"action.search.shard_count.limit" :"1000"
}
}
or
curl -u admin:admin -XPUT 'https://localhost:9200/_cluster/settings' -H 'Content-Type: application/json' -d'
{
"persistent" : {
"action.search.shard_count.limit" : "1000"
}
}
参数可以限制搜索请求最多同时在多少个分片上执行,可以防止单个搜索请求消耗整个集群的资源。此参数的默认值取决于集群中数据节点的数量,最多256。
###### 设置方法:
PUT /_cluster/settings
{
"persistent" : {
"max_concurrent_shard_requests : "80"
}
}
默认大小:10000
就是from+size,from:决定要返回的文档从哪里开始,size:决定返回多少条。假如from+size很大的话,将会消耗很多的内存和时间;这个设置就是为了防止内存不够用的情况。
这个设置是索引层的,即便是使用_all设置了,看日志也是对逐个索引加这个配置,后续新加的索引,max_result_window默认还是1w。
使用Elasticsearch进行search查询的过程中,出现了Result window is too large问题。一般是这个参数设置过小导致的。
可通过如下方式修改:
#查看单个索引设置
GET /27_hot_v1/_settings
#修改配置
PUT /27_hot_v1/_settings
{
"index.max_result_window":"10000"
}
or
PUT /27_hot_v1/_settings
{
"index.max_result_window":"10000"
}
curl -XPUT 192.168.40.31:9200/$(Index-name)/_settings -d '{ "index.max_result_window" :"1000000"}'
curl -XPUT 192.168.40.31:9200/_all/_settings -d '{ "index.max_result_window" :"1000000"}'
curl -XGET 172.20.7.22:9200/$(index-name)/_settings
默认是:100。这个设置限制的是 返回 结果中的 结果!
index.max_inner_result_window:和index.max_result_window原理差不多,这个设置限制的是返回结果中的结果。
#查看单个索引设置
GET /27_hot_v1/_settings
#修改配置
PUT /27_hot_v1/_settings
{
"max_inner_result_window":"5000"
}
or
PUT /27_hot_v1/_settings
{
"index.max_inner_result_window":"100"
}
默认最多请求100字段,Doc-value 字段成本很高,因为它们可能会导致每个字段的每个文档搜索。可以通过使用index.max_docvalue_fields_search索引设定覆盖.
PUT /27_hot_v1/_settings
{
"index.max_docvalue_fields_search":"100"
}
默认为32。ndex.max_script_fields:查询中允许的最大script_field数。
PUT /27_hot_v1/_settings
{
"ndex.max_script_fields":"32"
}
参考文档:
https://www.elastic.co/guide/en/elasticsearch/reference/6.5/search.html#global-search-cancellation
https://mp.weixin.qq.com/s/mKL2PJuNUJTl71Axv4-Rcw
https://www.cnblogs.com/huangpeng1990/p/4364341.html
https://kionf.com/2019/01/22/errornote-elk/
https://www.elastic.co/guide/en/elasticsearch/reference/6.6/modules-threadpool.html#_literal_fixed_literal
免责声明:本站发布的内容(图片、视频和文字)以原创、转载和分享为主,文章观点不代表本网站立场,如果涉及侵权请联系站长邮箱:is@yisu.com进行举报,并提供相关证据,一经查实,将立刻删除涉嫌侵权内容。