Мы столкнулись с производственным инцидентом, когда проверка работоспособности кластера Elasticsearch вернула red
статус.Отчет о проверке работоспособности показывает, что marvel-2019.06.20
имеет 2 unassigned_shards, что является основной причиной.
curl -XGET 'localhost:9200/_cluster/health?level=indices&pretty'
{
"cluster_name" : "sap-jam-jam8",
"status" : "red",
"timed_out" : false,
"number_of_nodes" : 2,
"number_of_data_nodes" : 2,
"active_primary_shards" : 122,
"active_shards" : 239,
"relocating_shards" : 0,
"initializing_shards" : 0,
"unassigned_shards" : 7,
"delayed_unassigned_shards" : 0,
"number_of_pending_tasks" : 0,
"number_of_in_flight_fetch" : 0,
"indices" : {
...
...
".marvel-2019.06.20" : {
"status" : "red",
"number_of_shards" : 1,
"number_of_replicas" : 1,
"active_primary_shards" : 0,
"active_shards" : 0,
"relocating_shards" : 0,
"initializing_shards" : 0,
"unassigned_shards" : 2
}
}
мы проверили конфигурацию Elasticseach, обнаружил, что cluster.routing.allocation
был отключен.
curl -XGET 'localhost:9200/_cluster/settings?pretty'
{
"persistent" : { },
"transient" : {
"cluster" : {
"routing" : {
"allocation" : {
"enable" : "none"
}
}
}
}
}
* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * 1015 *
* * * * * * * * * * * * * * *1015* * * * * * * * * * * * * * * * * * * * * * * * *
curl -XPOST -d '{ "commands" : [ {
"allocate" : {
"index" : ".marvel-2014.05.21",
"shard" : 0,
"node" : "SOME_NODE_HERE",
"allow_primary":true
}
} ] }' http://localhost:9200/_cluster/reroute?pretty
* После того, как этот инцидент решениз основной концепции
shard allocation
.Я провел некоторое исследование, но следующие вопросы все еще сбивают меня с толку.
1.Почему эластичный поиск должен assign shard
к другим узлам?
В моем случае у нас есть два узла эластичного поиска, A и B. Два сегмента уже созданы в A и занимают место на диске.
Когда B недоступен, почему бы просто не активировать эти два шарда на сервере A?
По крайней мере, он возвращает yellow
состояние здоровья.
2.Каковы процедуры assign a shard
?
В первом вопросе мы предполагаем, что и первичный осколок, и реплика были созданы на сервере A. Когда вы говорите assign shard to B
, что это значит?
То есть копировать осколок с сервера А на сервер Б?
3.Как объяснить этот нулевой активный шард?
И основной шард, и его копия созданы, но не активны.Как это возможно?Помимо дискового пространства, есть ли другие накладные расходы для активации шарда?например, память?
".marvel-2019.06.20" : {
"status" : "red",
"number_of_shards" : 1,
"number_of_replicas" : 1,
"active_primary_shards" : 0,
"active_shards" : 0, // both shards are inactive.
"relocating_shards" : 0,
"initializing_shards" : 0,
"unassigned_shards" : 2
}
4.Верно ли следующее предположение?
Чтобы активировать осколок, Elasticsearch необходимо выполнить следующие шаги:
- Создать осколок.
- Найти сервер, который имеетдостаточно дискового пространства и оперативной памяти для его запуска.
- скопируйте этот шард с исходного сервера на целевой сервер.
- Активируйте этот шард.
Ссылка
Блог Elasticsearch: Красный кластер Elasticsearch?Паника больше не
Переполнение стека: эластичный поиск - что делать с неназначенными осколками