Всех приветствую!
Есть 2 параллельно работающих кластера - старый, работающий на версии 2.4.1 и новый на 5.2.1 (ставил 5.0, 5.1, 5.2 версии).
Данные на них записываются одинаково, через два output в logstash. Проблема заключается в том, что есть запросы, которые 2.4.1 отрабатывает за 4.5 секунды, а 5.х виснет глухо, сжирает весь HeapSize и либо отваливается, либо перестаёт отвечать несколько нод.
Кластер 2.4.1 содержит 13 серверов (3 мастера и 10 дата-инстансов) 8CPU/64GbRam/916Gb SSD/Ubuntu 14.04/Java 1.8
Кластер 5.2.1 содержит 3 сервера (3 мастера и 9 дата-инстансов) 32CPU/128Gb/3x1Tb SSD + 1HDD/ ubuntu 16.04/ Java 1.8
На серверах с версией 2.4.1 запущен всего один процесс эластика. (30Гб памяти на процесс эластика)
На серверах с версией 5.2.1 запущено 4 процесса эластика. (один мастер с 8Гб памяти на hdd и три дата-инстанса с 24Гб памяти и своим SSD на 1Тб)
Суммарный объём данных в обоих кластерах:
Nodes: 12 Disk Available: 1TB / 2TB (63.62%) JVM Heap: 23.89% (57GB / 238GB) Indices: 164 Documents: 4,553,799,983 Disk Usage: 3TB Primary Shards: 658 Replica Shards: 199
Для примера есть запрос, который смотрит в индекс views-2017.02.11 объёмом:
44,525,722 Documents 33.8GB Primary Size 33.8GB Total Size 4 Total Shards
curl -XGET 'http://CLUSTERNAME:9200/views-2017.02.11/_search?pretty' -d '{
"size" : 0,
"query" : {
"bool" : {
"must" : [
{
"query_string" : {
"query" : "*",
"fields" : [ ],
"use_dis_max" : true,
"tie_breaker" : 0.0,
"default_operator" : "or",
"auto_generate_phrase_queries" : false,
"fuzziness" : "AUTO",
"fuzzy_prefix_length" : 0,
"fuzzy_max_expansions" : 50,
"phrase_slop" : 0,
"analyze_wildcard" : true,
"escape" : false,
"boost" : 1.0
}
},
{
"range" : {
"@timestamp" : {
"from" : 1486789200000,
"to" : 1486799200000,
"include_lower" : true,
"include_upper" : true,
"format" : "epoch_millis",
"boost" : 1.0
}
}
}
],
"disable_coord" : false,
"adjust_pure_negative" : true,
"boost" : 1.0
}
},
"_source" : {
"includes" : [ ],
"excludes" : [ ]
},
"aggregations" : {
"2" : {
"terms" : {
"field" : "ip",
"size" : 5,
"min_doc_count" : 1,
"shard_min_doc_count" : 0,
"show_term_doc_count_error" : false,
"order" : [
{
"1" : "desc"
},
{
"_term" : "asc"
}
]
},
"aggregations" : {
"1" : {
"cardinality" : {
"field" : "ip"
}
}
}
}
}
}
}'
На 2.4.1 он отрабатывает:
# time sh elasticdie.sh
{
"took" : 4105,
"timed_out" : false,
"_shards" : {
"total" : 4,
"successful" : 4,
"failed" : 0
},
"hits" : {
"total" : 4241136,
"max_score" : 0.0,
"hits" : [ ]
},
"aggregations" : {
"2" : {
"doc_count_error_upper_bound" : -1,
"sum_other_doc_count" : 4241121,
"buckets" : [ {
"key" : "1.0.164.97",
"doc_count" : 5,
"1" : {
"value" : 1
}
}, {
"key" : "1.0.167.140",
"doc_count" : 4,
"1" : {
"value" : 1
}
}, {
"key" : "1.0.192.154",
"doc_count" : 1,
"1" : {
"value" : 1
}
}, {
"key" : "1.0.192.56",
"doc_count" : 2,
"1" : {
"value" : 1
}
}, {
"key" : "1.0.195.13",
"doc_count" : 1,
"1" : {
"value" : 1
}
} ]
}
}
}
real 0m4.298s
user 0m0.004s
sys 0m0.000s
На новом идёт тайм-аут:
# time sh elasticdie.sh
curl: (52) Empty reply from server
real 1m32.485s
user 0m0.004s
sys 0m0.000s