面试题答案
一键面试节点属性
- 自定义属性:通过设置节点的自定义属性(如
rack
、zone
等),可依据业务需求对节点分类。例如设置rack
属性区分不同机架的节点,在分配分片时,可利用require
、include
、exclude
参数,要求分片分配到特定属性值的节点上,避免多个副本分片集中在同一机架,提高数据的可用性和容灾能力。 - 内置属性:如
node.role
,标记节点的角色(如master
、data
、ingest
等),数据分片默认不会分配到master
角色节点,只会分配到具有data
角色的节点,保证主节点专注于集群管理,不承担数据存储和检索压力。
节点资源
- 磁盘空间:Elasticsearch会监控节点的磁盘使用情况。如果节点磁盘空间不足(默认设置当磁盘使用率达到85%时),新的分片将不会分配到该节点,以防止因磁盘满导致的写入失败等问题。同时,对于已在磁盘空间紧张节点上的分片,可能会触发重新分配,迁移到有足够磁盘空间的节点。
- 内存:节点内存影响其处理能力,虽然Elasticsearch不会像磁盘空间那样严格基于内存使用率来筛选节点,但内存不足会影响节点性能。如果节点内存持续处于高负载状态,可能在集群重新平衡分片时,该节点被优先考虑减少分配的分片数量,以保障整体性能。
- CPU:类似内存,CPU使用率过高会影响节点性能。虽然不会直接基于CPU使用率来阻止分片分配,但在集群进行重新平衡时,CPU长期高负载的节点可能会被分配较少的分片,以避免因节点性能问题影响整个集群的搜索和写入效率。
节点健康状态
- 节点连通性:如果节点与集群断开连接(如网络故障),该节点会被标记为不可用,其上的分片会被视为丢失。集群会尝试将这些丢失的分片重新分配到其他可用节点上,以保持数据的完整性和可用性。
- 节点错误状态:若节点出现内部错误(如进程崩溃、文件损坏等),即使节点仍在集群中连接,也可能被标记为不健康。不健康的节点可能会被减少分配新的分片,同时已在该节点上的分片可能会被重新分配到健康节点,以确保数据的正常读写和集群的稳定性。
集群拓扑和副本策略
- 副本分配:为保证数据的高可用性,副本分片不会分配到与主分片相同的节点上。集群会在不同节点间均匀分配副本分片,以实现负载均衡和数据冗余。例如,一个索引有一个主分片和两个副本分片,这三个分片会尽量分配到不同的节点。
- 跨机架和跨区域分配:结合节点的自定义属性(如
rack
、zone
等),集群可以按照拓扑结构进行分片分配。例如,通过配置可确保不同副本分片分布在不同机架或不同区域的节点上,防止因单个机架或区域故障导致数据丢失,提高容灾能力。