面试题答案
一键面试数据一致性与高可用性保障机制
- 节点加入
- 环结构调整:当新节点加入Cassandra环时,系统会重新计算环上的令牌范围。例如,假设有节点A、B,新节点C加入。系统会重新划分数据区间,C节点会负责一部分原本由A或B负责的数据。
- 数据迁移:数据从现有节点迁移到新节点。Cassandra采用基于范围的复制策略,例如,如果采用简单策略(SimpleStrategy),数据会按照令牌范围从源节点复制到新节点。在一致性协议方面,系统会通过协调器节点来保证数据迁移过程中的一致性。协调器会与源节点和目标节点通信,确保数据准确迁移。在这个过程中,通过设置合适的读写一致性级别(如QUORUM),即使在数据迁移期间,读写操作也能保证一定程度的一致性。比如读操作在QUORUM级别下,需要从大多数副本读取数据,这样能保证读到的数据是较新的版本。
- 节点离开
- 检测与标记:系统通过gossip协议检测节点离开。一旦检测到节点离开,该节点会被标记为不可用。例如,节点D准备离开,其他节点通过gossip得知此信息。
- 数据重新分配:离开节点所负责的数据需要重新分配到其他节点。基于复制策略,如NetworkTopologyStrategy,会根据数据中心和机架的布局重新分布数据。一致性协议方面,协调器会再次发挥作用,它会确保在数据重新分配过程中,读写操作能维持一致性。比如写操作在QUORUM级别下,只要大多数副本写入成功,就认为写操作成功,即使在节点离开导致数据重新分配的过程中,也能保证数据一致性。同时,由于Cassandra的多副本机制,其他副本节点仍然可以提供服务,维持系统的高可用性。即使某个节点离开,只要还有足够的副本节点可用,系统就能继续正常运行读写操作。