按节点比例分区:手动 or 自动再平衡
-
动态分区策略,分区数与数据集大小成正比,因为拆分、合并过程使每个分区的大小维持在固定的min和max之间
-
固定数量的分区方式,每个分区的大小与数据集大小成正比
两种情况下,分区数都和节点数无关。
Cassandra则采用第三种方案,使分区数与集群节点数成正比。即每个节点具有固定数量的分区。此时,每个分区的大小和数据集大小成正比,而节点数不变,但是当增加节点数时,分区将再次变小。由于较大数据量通常需大量节点来存储,因此这种方法也使每个分区的大小保持稳定。
当一个新节点加入集群时,它随机选择固定数量的现有分区进行拆分,然后拿走这些分区的一半数据量,将另一半数据留在原节点。随机选择可能产生不公平的分区分割,但平均分区数较大时(Cassandra默认每个节点有256个分区),新节点最终会从现有节点获得相当数量的负载。 Cassandra 3.0引入优化算法,可避免不公平的分割。
随机选择分区边界要求使用hash分区策略(可从hash函数产生的数字范围中设置边界)。这种方法也最符合一致性哈希的定义。
4.2 运维:手动 or 自动再平衡
动态是自动还是手动执行?
全自动的再平衡(即由系统自动决定,何时将分区从一个节点迁移到另一个节点,无须人工干预)和完全手动(即分区到节点的映射由管理员显式配置)之间有个权衡。如Couchbase会自动生成一个推荐的分区分配,但需管理员确认生效。
全自动再平衡更方便,正常维护之外操作工作很少,但可能不可预测。再平衡是个昂贵操作,因其需重新路由请求,并将大量数据从一个节点迁移到另一个节点。若出现异常,可能会使网络或节点的负载过重,并降低其他请求的性能。
自动平衡和自动故障检测相结合也可能存在风险。假设某节点过载,且对请求的响应暂时很慢,而其他节点得出结论:过载节点已失效,并自动平衡集群,转移其负载。客观上,这会加重该节点、其他节点和网络的负载,从而使情况更糟,甚至级联失效。
对此,再平衡过程中有人参与是更推荐做法。这比全自动响应慢一点,但可有效防止意外。
- 点赞
- 收藏
- 关注作者
评论(0)