面试题答案
一键面试索引元数据的存储方式
- 元数据结构:Elasticsearch的索引元数据包含索引的设置(如分片数量、副本数量、索引类型等)、映射(字段类型、分词器等)以及别名等信息。这些元数据以JSON格式存储在集群状态中。
- 存储位置:集群状态由主节点维护,并且会复制到所有数据节点。主节点负责管理和更新集群状态,数据节点通过定期同步来获取最新的集群状态信息。例如,当创建一个新索引时,主节点会将新索引的元数据添加到集群状态中,并将更新后的集群状态广播给所有数据节点。
删除操作在集群中的传播机制
- 客户端请求:当客户端发送删除索引请求时,该请求首先到达一个协调节点(Coordinating Node)。协调节点负责将请求路由到正确的主节点。
- 主节点处理:主节点接收到删除索引请求后,会从集群状态中移除该索引的元数据信息。同时,主节点会向所有数据节点发送删除索引的指令。
- 数据节点执行:数据节点收到删除索引指令后,会删除本地磁盘上该索引对应的所有物理文件,包括分片文件、事务日志等。例如,在基于Lucene的存储中,每个分片是一个独立的Lucene索引,数据节点会删除对应Lucene索引目录下的所有文件。
恢复操作如何重新构建索引结构
- 基于备份恢复:如果存在索引备份(如通过Snapshot API创建的快照),恢复操作时,首先从备份存储(如共享文件系统、云存储等)中读取索引的元数据和数据。主节点根据恢复的元数据重建索引的设置和映射等信息,并将这些信息更新到集群状态中。然后,数据节点从备份中下载对应的分片数据,并按照元数据中的设置进行恢复。例如,将分片恢复到指定的数据节点,并设置正确的副本关系。
- 从其他节点复制恢复:在某些情况下,如果集群中其他节点还保留有该索引的副本数据,可以通过从这些节点复制数据来恢复索引。主节点重新创建索引元数据并更新集群状态,然后数据节点根据集群状态中的信息,从拥有副本的节点复制数据来重建分片。例如,数据节点会建立与副本节点的连接,通过网络传输数据来恢复本地的分片。