面试题答案
一键面试1. 故障检测
- 基于心跳机制:管理器定期向每个服务节点发送心跳请求。正常情况下,节点会及时回复心跳响应。若管理器在一定时间(如超时时间)内未收到某个节点的心跳响应,则初步判定该节点可能发生故障。
- 节点间互相监测:除管理器检测外,正常服务节点之间也会互相发送心跳包。若某个节点长时间未收到来自特定邻居节点的心跳,它会向管理器报告这一情况,辅助管理器更准确地判断故障节点。
2. 负载重新分配
- 一致性哈希算法:
- Cassandra使用一致性哈希将数据分布在集群节点上。在故障恢复时,一致性哈希算法能确保重新分配负载的相对均衡。当某个节点故障时,原本由该节点负责的数据范围会被重新分配给其相邻的正常节点。例如,在一致性哈希环上,故障节点的顺时针或逆时针相邻节点会接收这些数据。
- 它使得新增或移除节点时,数据迁移量最小化。比如新加入一个节点时,只需将环上部分数据迁移到新节点,而非大规模重新分配所有数据。
- 数据复制:
- Cassandra采用多副本复制策略(如
RF
,复制因子)。当某个节点故障后,其他副本节点上的数据可继续提供服务。管理器会根据复制因子和数据副本的分布情况,决定哪些正常节点需要补充数据以恢复到原有的复制状态。例如,若原本复制因子为3,故障节点上有一份数据副本,管理器会指示其他正常节点根据需要复制数据,以确保数据仍有3个副本。 - 在负载重新分配过程中,数据复制机制保证了数据的可用性和完整性。即使部分节点故障,数据依然可从其他副本获取。
- Cassandra采用多副本复制策略(如
3. 服务节点与管理器交互
- 故障报告:当服务节点检测到自身故障(如硬件故障、进程崩溃等)或检测到邻居节点故障时,它会立即向管理器发送故障报告信息,告知管理器自身或其他节点的故障情况。
- 接收指令:管理器在确定故障节点并计算好负载重新分配方案后,向正常服务节点发送指令。这些指令包括需要接收的数据范围、复制任务等。例如,管理器会告诉某个节点需要从其他节点接收哪些数据块来补充故障节点缺失的数据副本。
- 同步与确认:服务节点接收到指令后,开始执行数据迁移和复制操作。在操作完成后,节点会向管理器发送确认消息,告知管理器任务已完成。若在执行过程中出现问题(如网络故障导致数据传输失败),节点会向管理器报告错误情况,管理器会重新调整方案或重试相关操作,以确保数据的完整性和系统的正常运行。