如果我有一个15节点集群,我是否必须更改
index.number_of_shards
所有15个节点上的值,并在新值对新索引生效之前重新启动它们吗?
答案 0 :(得分:6)
正确更改配置文件中的index.number_of_shards
默认设置将涉及更改所有节点上的设置,然后理想地按照rolling restarts的准则重新启动实例。
但是,如果这不是一个选项,并且在创建新索引时在设置中明确指定number_of_shards
并不理想,那么解决方法将使用index templates
示例:
可以创建index_defaults
默认值,如下所示
PUT /_template/index_defaults
{
"template": "*",
"settings": {
"number_of_shards": 4
}
}
这会将index_defaults
模板中指定的设置应用于所有新索引。
答案 1 :(得分:0)
在ElasticSearch中设置索引的分片数后,您无法更改它们。您需要使用所需数量的分片创建一个新索引,并根据您的使用情况,您可能希望将数据传输到新索引。
我说根据用例,因为,例如,如果您要存储基于时间的数据,例如日志事件,关闭一个索引并打开一个具有不同数量的分片的新索引是完全合理的,并且索引全部数据前进到新索引,保留旧索引。
但是,如果您的用例是,例如,存储博客文档,并且您的索引是按主题划分的,那么您将需要(a)创建具有不同数量的分片的上述新索引和(b)重新索引你的数据。对于(b)我建议使用Scroll and Scan API从旧索引中获取数据。
答案 2 :(得分:0)
请记住,指定分片数是静态操作,应在创建索引时完成。但是,创建索引后的任何更改都需要重新完成重新索引,这需要时间。
要在创建索引时创建分片数,请使用此命令。
SubShipments
您不必在所有节点上运行此操作。在任何一个节点上运行它们。所有节点都相互之间就弹性指数的变化进行了沟通。
答案 3 :(得分:0)
您需要为将要创建的新索引创建模板:
PUT /_template/index_defaults
{
"index_patterns": "*",
"settings" : {
"index" : {
"number_of_shards" : 1,
"number_of_replicas" : 1
}
}
}
对于旧索引,您需要重新索引。
示例:从my_old_index到my_new_index
使用适当的映射和设置创建新索引:
PUT my_new_index
{
"settings" : {
"index" : {
"number_of_shards" : 1,
"number_of_replicas" : 1
}
}
}
从旧索引重新索引到新索引,仅在需要时指定类型:
POST /_reindex?slices=5
{
"size": 100000,
"source": { "index": "my_old_index" },
"dest": { "index": "my_new_index", "type": "my_type" }
}
答案 4 :(得分:0)
更新了语法,以避免在Elasticsearch 6+中出现某些弃用警告
每 https://www.elastic.co/guide/en/elasticsearch/reference/6.0/indices-templates.html
PUT /_template/index_defaults
{
"index_patterns": ["*"],
"order" : 0,
"settings": {
"number_of_shards": 2
}
}