cassandra节点上数据的分布和存储是由系统自动完成的。除了我们要设计好partition key之外,在多机架(rack)配置环境中部署cassandra节点,也需要考虑cassandra分布数据的算法。系统在分布数据的时候,会尽最大可能保证数据均匀分配到不同机架上,这样可以实现最大的可靠性。但是,如果机架的部署不对的话,这个算法也会带来热点问题。请看下面问题:

  • 四个节点分布在两个机架:r1-n1,r1-n2,r1-n3,r2-n1
  • 3个分区(partition): P1, P2, P3

  • 假设复制指数是3,下面是每个分区的分布:

r1-n1: P1-R1, P3-R3                  r2-n1: P1-R2, P2-R2, P3-R2

r1-n2: P1-R3, P2-R1

r1-n3: P2-R3, P3-R1

  • 我们看到,机架r2上的节点比r1上的节点高50%的负载。

如何解决这个问题呢?

  1. 首先,为了方便系统平衡数据负载,最好所有节点有相同的配置:内存、硬盘、CPU。这样,系统数据负载会更均匀;
  2. 其次,尽量保证每个机架上有相同的节点数;
  3. 第三,如果有时候由于特殊原因,必须要分布不同的数量,对2个机架的情况,第一个机架必须有2倍于第二个机架的节点。
05-11 00:06