面试题答案
一键面试数据同步
- 等待同步完成:Elasticsearch 本身具备数据同步机制,在正常关闭集群前,应等待所有数据同步操作完成。可通过
_cat/recovery
API 查看各个分片的恢复状态,确保所有分片的stage
为DONE
。例如:
curl -XGET 'http://localhost:9200/_cat/recovery?v'
- Flush 操作:执行
_flush
API 强制将所有未提交的事务日志(translog)写入磁盘,确保数据的持久化。
curl -XPOST 'http://localhost:9200/_flush'
副本处理
- 确保副本健康:在关闭集群前,使用
_cluster/health
API 检查集群健康状态,确保所有副本都已分配且处于健康状态。例如:
curl -XGET 'http://localhost:9200/_cluster/health?pretty'
其中 status
应显示为 green
(所有主分片和副本分片都可用)或 yellow
(所有主分片可用,但部分副本分片不可用,这种情况需谨慎处理)。
2. 副本同步:Elasticsearch 会自动在主分片和副本分片之间进行数据同步。确保在关闭节点前,所有副本分片都与主分片数据一致。可通过 _cat/shards
API 查看各分片的状态,确保副本分片的 state
为 STARTED
且 docs
数量与主分片一致。
curl -XGET 'http://localhost:9200/_cat/shards?v'
相关配置和 API 操作
- Graceful Shutdown(优雅关闭):使用
_shutdown
API 进行优雅关闭,允许节点完成当前的任务(如数据同步、索引刷新等)后再关闭。
curl -XPOST 'http://localhost:9200/_shutdown'
- 配置
gateway.expected_nodes
、gateway.recover_after_nodes
和gateway.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
这些配置有助于在集群重启时更好地管理数据恢复过程,保障数据的一致性和完整性。