MST
星途 面试题库

面试题:ElasticSearch集群关闭时如何确保数据一致性与完整性

当ElasticSearch集群进行关闭操作时,如何保障集群内各节点数据的一致性和完整性?请详细描述涉及的数据同步、副本处理以及可能用到的相关配置和API操作。
39.3万 热度难度
数据库ElasticSearch

知识考点

AI 面试

面试题答案

一键面试

数据同步

  1. 等待同步完成:Elasticsearch 本身具备数据同步机制,在正常关闭集群前,应等待所有数据同步操作完成。可通过 _cat/recovery API 查看各个分片的恢复状态,确保所有分片的 stageDONE。例如:
curl -XGET 'http://localhost:9200/_cat/recovery?v'
  1. Flush 操作:执行 _flush API 强制将所有未提交的事务日志(translog)写入磁盘,确保数据的持久化。
curl -XPOST 'http://localhost:9200/_flush'

副本处理

  1. 确保副本健康:在关闭集群前,使用 _cluster/health API 检查集群健康状态,确保所有副本都已分配且处于健康状态。例如:
curl -XGET 'http://localhost:9200/_cluster/health?pretty'

其中 status 应显示为 green(所有主分片和副本分片都可用)或 yellow(所有主分片可用,但部分副本分片不可用,这种情况需谨慎处理)。 2. 副本同步:Elasticsearch 会自动在主分片和副本分片之间进行数据同步。确保在关闭节点前,所有副本分片都与主分片数据一致。可通过 _cat/shards API 查看各分片的状态,确保副本分片的 stateSTARTEDdocs 数量与主分片一致。

curl -XGET 'http://localhost:9200/_cat/shards?v'

相关配置和 API 操作

  1. Graceful Shutdown(优雅关闭):使用 _shutdown API 进行优雅关闭,允许节点完成当前的任务(如数据同步、索引刷新等)后再关闭。
curl -XPOST 'http://localhost:9200/_shutdown'
  1. 配置 gateway.expected_nodesgateway.recover_after_nodesgateway.recover_after_time
    • gateway.expected_nodes:设置集群期望的节点数。例如在 elasticsearch.yml 中配置:
gateway.expected_nodes: 3
- `gateway.recover_after_nodes`:设置达到多少个节点可用时开始恢复数据。例如:
gateway.recover_after_nodes: 2
- `gateway.recover_after_time`:设置等待节点恢复的最长时间。例如:
gateway.recover_after_time: 5m

这些配置有助于在集群重启时更好地管理数据恢复过程,保障数据的一致性和完整性。