Our OpenSearch usage is very heavy on percolate queries, and as such we have optimized our cluster to rapidly scale the nodes hosting our percolate indexes with the indexes set to auto-expand replicas. This works very well for an important use case and allows us to have appropriately scalable performance.
However, we need to keep system indexes off of those nodes, because they scale in rapidly, which has caused us to lose tenant indexes and other important internal indexes.
We are currently preventing the indexes we don’t want to go onto the percolate nodes with a very simple component index template:
{
"name" : "no_perc",
"component_template" : {
"template" : {
"settings" : {
"index" : {
"routing" : {
"allocation" : {
"exclude" : {
"data_type" : "percolate"
}
}
}
}
}
}
}
}
Then for the .kibana
indexes we apply this with a simple index template:
PUT _index_template/avoid_perc_nodes
{
"index_patterns" : [
".ds*", ".open*", ".kibana_*"
],
"template" : {
},
"composed_of" : ["no_perc" ],
"priority" : 0
}
However, for the Dashboards generated indexes such as .kibana_-283538891_user_1
we have the appropriate settings applied, but not the index mapping.
Per the documentation, the index templates should be combined, however that does not line up with what I am seeing on my cluster. Our templates are only specifying settings, never any mappings
, so the tenant_template
(which I can’t view or edit), should be unchanged in that regard, but the mappings are never set in the tenant generated indexes.
Is there a better way to provide settings to system indices to get them to avoid certain nodes? Is there another approach I could take to have a node reject all shards except those matching a specific name pattern? I am looking for any solution to keep those indexes off of some nodes that I know will be joining and leaving the cluster rapidly.
Thank you.