面试题答案
一键面试配置参数调整
- cluster.routing.allocation.node_initial_primaries_recoveries
- 原理:该参数控制每个节点在启动时恢复主分片的并发数。降低此值可以减少启动时的资源竞争,避免因过多的并发恢复操作导致系统资源耗尽。
- 适用场景:适用于集群资源有限,特别是在网络带宽或磁盘I/O能力不足的情况下。例如,在老旧服务器组成的集群中,可适当降低该值,如设置为1或2。
- cluster.routing.allocation.node_concurrent_recoveries
- 原理:它决定每个节点同时进行的分片恢复总数(包括主分片和副本分片)。合理调整此参数可以平衡节点间的负载,优化整体恢复性能。
- 适用场景:当集群中有部分节点性能较差,为避免这些节点因过多恢复任务而负载过高,可适当降低该值。一般可根据节点的硬件性能进行调整,性能高的节点可设置相对较高的值,如4 - 6,性能低的节点设置为2 - 3。
节点规划
- 硬件资源分配
- 原理:为ElasticSearch节点分配足够且合适的硬件资源,如CPU、内存、磁盘和网络带宽。足够的资源可以保证在reroute操作时,节点有能力处理大量的分片迁移和恢复任务。
- 适用场景:在规划新集群或对现有集群进行扩容时,根据预估的负载和数据量,合理配置硬件。例如,对于数据量较大且读写频繁的集群,可选用多核CPU、大容量内存和高速磁盘的服务器作为节点。
- 节点角色划分
- 原理:将节点划分为不同角色,如master节点、data节点和coordinating节点。Master节点主要负责集群的元数据管理,data节点负责数据的存储和处理,coordinating节点负责接收客户端请求并转发。明确的角色划分可以避免单个节点承担过多任务,提高reroute操作的效率。
- 适用场景:在大规模集群中,建议采用专门的master节点和data节点。对于读写负载特别高的场景,还可以增加coordinating节点来分担请求压力。例如,一个有50个节点的集群,可以设置3 - 5个master节点,其余为data节点,根据需要适当增加coordinating节点。
算法优化
- 自定义路由算法
- 原理:根据业务需求和数据特点,开发自定义的路由算法。例如,基于地理位置、业务类型等因素进行分片路由,使数据分布更合理,减少reroute操作的频率和开销。
- 适用场景:当业务数据有明显的分区特性时,如按地区划分的数据。通过自定义路由算法,可以将同一地区的数据集中存储在特定的节点或节点组,在reroute时可以减少跨节点的数据迁移。
- 预计算和缓存
- 原理:在集群启动前,预计算一些可能在reroute操作中用到的信息,如节点的负载情况、可用资源等,并进行缓存。这样在启动时,reroute操作可以直接使用这些缓存信息,加快决策速度。
- 适用场景:适用于集群规模较大且相对稳定的环境。例如,每天凌晨业务低谷时,对集群状态进行分析和预计算,将结果缓存起来,在白天业务高峰期集群重启时,可利用这些缓存信息快速完成reroute操作。