面试题答案
一键面试同步策略
- 主从复制:Elasticsearch采用主从复制机制。一个索引的主分片负责处理写操作,主分片将数据写入成功后,会将数据复制到其对应的从分片。这确保了在主分片所在节点出现故障时,从分片能接替服务,保证数据可用性与一致性。例如,当用户向集群写入一条文档,主分片先写入成功,然后异步复制到从分片。
- 同步刷新:Elasticsearch有刷新(refresh)操作。默认情况下,数据写入后1秒会执行一次刷新,将内存中的数据写入到文件系统缓存(os cache),使得数据可被搜索。通过设置
refresh_interval
参数,可以调整刷新频率,对于一致性要求极高的场景,可以缩短该间隔。例如,设置为0,则每次写入后立即刷新,但这会影响写入性能。同时,还有强制刷新(flush)操作,它将文件系统缓存中的数据持久化到磁盘,确保数据不会因节点故障丢失。
版本控制
- 内部版本号:Elasticsearch为每个文档分配一个版本号。每次文档被修改时,版本号会递增。当一个写请求到达时,请求中会包含预期的版本号。如果请求中的版本号与集群中该文档的实际版本号一致,写操作才会执行,否则会失败。这防止了多个并发写操作导致的数据覆盖问题。例如,节点A和节点B同时读取文档版本号为1的文档,节点A先修改并将版本号更新为2,此时节点B再尝试修改,由于其请求中的版本号还是1,与实际版本号2不一致,修改操作失败。
- 外部版本控制:除了内部版本号,Elasticsearch还支持外部版本控制。用户可以提供自己的版本号,在写请求中指定
version_type=external
以及对应的版本号。Elasticsearch会比较用户提供的版本号和文档当前的版本号(如果存在),只有当用户提供的版本号大于当前版本号时,写操作才会执行。这在与外部系统集成,且外部系统已有版本控制机制时非常有用。
故障处理与一致性恢复
- 选举机制:当主节点故障时,集群会通过选举机制选出新的主节点。只有拥有法定数量(quorum)的节点参与选举,选举才能成功。新主节点选出后,会负责协调数据同步等操作,确保集群状态的一致性。例如,在一个由5个节点组成的集群中,法定数量为3个节点,若主节点故障,只要有3个及以上节点正常运行,就能选举出新的主节点。
- 数据恢复:从节点在启动或与主节点重新连接时,会通过复制操作从主节点同步数据,以达到与主节点数据一致。此外,如果主分片所在节点故障,对应的从分片可能会被提升为新的主分片,其他从分片会与新主分片进行数据同步,确保数据一致性。