按节点比例分区:手动 or 自动再平衡

举报
JavaEdge 发表于 2022/08/31 23:51:25 2022/08/31
【摘要】 动态分区策略,分区数与数据集大小成正比,因为拆分、合并过程使每个分区的大小维持在固定的min和max之间固定数量的分区方式,每个分区的大小与数据集大小成正比两种情况下,分区数都和节点数无关。Cassandra则采用第三种方案,使分区数与集群节点数成正比。即每个节点具有固定数量的分区。此时,每个分区的大小和数据集大小成正比,而节点数不变,但是当增加节点数时,分区将再次变小。由于较大数据量通常需...


  • 动态分区策略,分区数与数据集大小成正比,因为拆分、合并过程使每个分区的大小维持在固定的min和max之间

  • 固定数量的分区方式,每个分区的大小与数据集大小成正比

两种情况下,分区数都和节点数无关。

Cassandra则采用第三种方案,使分区数与集群节点数成正比。即每个节点具有固定数量的分区。此时,每个分区的大小和数据集大小成正比,而节点数不变,但是当增加节点数时,分区将再次变小。由于较大数据量通常需大量节点来存储,因此这种方法也使每个分区的大小保持稳定。

当一个新节点加入集群时,它随机选择固定数量的现有分区进行拆分,然后拿走这些分区的一半数据量,将另一半数据留在原节点。随机选择可能产生不公平的分区分割,但平均分区数较大时(Cassandra默认每个节点有256个分区),新节点最终会从现有节点获得相当数量的负载。 Cassandra 3.0引入优化算法,可避免不公平的分割。

随机选择分区边界要求使用hash分区策略(可从hash函数产生的数字范围中设置边界)。这种方法也最符合一致性哈希的定义。

4.2 运维:手动 or 自动再平衡

动态是自动还是手动执行?

全自动的再平衡(即由系统自动决定,何时将分区从一个节点迁移到另一个节点,无须人工干预)和完全手动(即分区到节点的映射由管理员显式配置)之间有个权衡。如Couchbase会自动生成一个推荐的分区分配,但需管理员确认生效。

全自动再平衡更方便,正常维护之外操作工作很少,但可能不可预测。再平衡是个昂贵操作,因其需重新路由请求,并将大量数据从一个节点迁移到另一个节点。若出现异常,可能会使网络或节点的负载过重,并降低其他请求的性能。

自动平衡和自动故障检测相结合也可能存在风险。假设某节点过载,且对请求的响应暂时很慢,而其他节点得出结论:过载节点已失效,并自动平衡集群,转移其负载。客观上,这会加重该节点、其他节点和网络的负载,从而使情况更糟,甚至级联失效。

对此,再平衡过程中有人参与是更推荐做法。这比全自动响应慢一点,但可有效防止意外。

【版权声明】本文为华为云社区用户原创内容,转载时必须标注文章的来源(华为云社区)、文章链接、文章作者等基本信息, 否则作者和本社区有权追究责任。如果您发现本社区中有涉嫌抄袭的内容,欢迎发送邮件进行举报,并提供相关证据,一经查实,本社区将立刻删除涉嫌侵权内容,举报邮箱: cloudbbs@huaweicloud.com
  • 点赞
  • 收藏
  • 关注作者

评论(0

0/1000
抱歉,系统识别当前为高风险访问,暂不支持该操作

全部回复

上滑加载中

设置昵称

在此一键设置昵称,即可参与社区互动!

*长度不超过10个汉字或20个英文字符,设置后3个月内不可修改。

*长度不超过10个汉字或20个英文字符,设置后3个月内不可修改。