- 数据均衡分布和快速恢复机制
- 副本机制:
- ElasticSearch 会自动为每个分片创建副本。当某个节点故障时,ElasticSearch 可以从其他节点上的副本恢复数据。例如,若节点 A 存储了业务类型 X 的数据分片,当节点 A 故障,ElasticSearch 会在其他健康节点上从该分片的副本重建数据。
- 可以通过
number_of_replicas
参数来设置每个主分片的副本数。增加副本数能提高数据的冗余度和恢复速度,但也会占用更多的磁盘空间。例如,在创建索引时可以指定:
PUT my_index
{
"settings" : {
"number_of_shards" : 3,
"number_of_replicas" : 2
}
}
- 自动分片分配:
- ElasticSearch 有自动分片分配机制。当节点故障后,Master 节点会检测到变化,并将故障节点上的分片重新分配到其他健康节点。例如,它会根据节点的负载、磁盘空间等因素来选择合适的节点。
- 相关参数
cluster.routing.allocation.enable
可以控制分片分配的行为。默认值为 all
,表示允许分配主分片和副本分片;若设置为 primaries
,则只允许分配主分片;设置为 replicas
,只允许分配副本分片。在节点故障恢复场景下,保持默认的 all
设置即可保证数据的重新均衡分布。
- 保证原有节点过滤规则仍然有效
- 节点标签和索引路由:
- 原有的节点过滤通常是通过节点标签(node attributes)和索引路由(index routing)来实现的。例如,通过在节点配置文件(
elasticsearch.yml
)中设置节点标签:
node.attr.rack: rack1
node.attr.business_type: type1
- 在创建索引时指定路由规则,确保特定业务类型的数据发送到特定标签的节点:
PUT my_index
{
"settings" : {
"number_of_shards" : 3,
"number_of_replicas" : 2,
"index.routing.allocation.include.business_type" : "type1"
}
}
- 故障恢复后的处理:
- 当节点故障恢复后,要保证其重新符合原有的过滤规则。需要确保节点启动时,其配置文件中的节点标签配置正确。如果节点标签发生变化,可能会导致数据分布不符合预期。例如,若故障节点原本的
business_type
标签为 type1
,恢复后错误设置为 type2
,就会破坏原有的数据分布规则。所以在节点恢复时,仔细检查和恢复节点的配置文件,确保标签设置与原规则一致。
- 使用索引模板:
- 可以使用索引模板来统一管理索引的设置,包括节点过滤相关的设置。例如,创建一个索引模板:
PUT _template/my_template
{
"index_patterns" : ["my_index*"],
"settings" : {
"number_of_shards" : 3,
"number_of_replicas" : 2,
"index.routing.allocation.include.business_type" : "type1"
}
}
- 这样新创建的索引只要匹配 `my_index*` 模式,就会自动应用这些设置,保证了节点过滤规则的一致性。即使节点故障恢复后重新创建索引,也能遵循原有的规则。