我正在研究 Cassandra 集群,但管理工作量似乎相当大。有没有什么方法可以配置 Cassandra,使其在添加新机器、某些机器关闭或暂时不可用等情况下自动重新平衡节点?
答案1
Cassandra 实际上会在您添加新节点时自动重新平衡节点;只是这种方法并不复杂。它会选择“负载”最高的节点(参见 nodetool ring 输出),并将新节点放在环上,接管负载最重的节点的大约一半工作。这不会对整个集群进行重新平衡,但确实会最大限度地减少集群扩展所需的流式负载。如果每次扩展时集群的大小几乎翻倍,这种自动平衡策略往往效果最佳。
如果您需要更细致的重新平衡,您可以使用“nodetool move”命令(这实际上是用于退役和重新添加节点的包装器)移动环上节点的位置。
答案2
还没有,因为 token 分配目前是静态的。你可以选择编写以下平衡操作脚本http://wiki.apache.org/cassandra/Operations#Ring_management或者使用自动引导一次性将集群规模翻倍。目前这两种选择都不太有吸引力,但只要您留出足够的时间进行数据迁移,添加节点和移动令牌并不是一件可怕的事情。
要注意的一件事nodetool loadbalance
是,事情不会按照你想象的那样发展。