See this thread for background http://cassandra-user-incubator-apache-org.3065146.n2.nabble.com/Replica-data-distributing-between-racks-td6324819.html
In a multi DC environment, if you calculate the initial tokens for the entire cluster data will not be evenly distributed. Cheers ----------------- Aaron Morton Freelance Cassandra Developer @aaronmorton http://www.thelastpickle.com On 16 Jun 2011, at 15:51, Vijay wrote: > +1 for more documentation (I guess contributions are always welcomed).... I > will try to write it down sometime when we have a bit more time... > > 0.8 nodetool ring command adds the DC and RAC information.... > > http://www.datastax.com/dev/blog/deploying-cassandra-across-multiple-data-centers > http://www.datastax.com/products/opscenter > > Hope this helps... > > Regards, > </VJ> > > > > On Wed, Jun 15, 2011 at 7:24 PM, AJ <a...@dude.podzone.net> wrote: > Ok. I understand the reasoning you laid out. But, I think it should be > documented more thoroughly. I was trying to get an idea as to how flexible > Cass lets you be with the various combinations of strategies, snitches, token > ranges, etc.. > > It would be instructional to see what a graphical representation of a cluster > ring with multiple data centers looks like. Google turned-up nothing. I > imagine it's a multilayer ring; one layer per data center with the nodes of > one layer slightly offset from the ones in the other (based on the example in > the wiki). I would also like to know which node is next in the ring such so > as to understand replica placement in, for example, the > OldNetworkTopologyStrategy when it's doc states, > > "...It places one replica in a different data center from the first (if there > is any such data center), the third replica in a different rack in the first > datacenter, and any remaining replicas on the first unused nodes on the ring." > > I can only assume for now that "the ring" referred to is the "local" ring of > the first data center. > > > > On 6/15/2011 5:51 PM, Vijay wrote: >> >> No it wont.... it will assume you are doing the right thing... >> >> Regards, >> </VJ> >> >> >> >> On Wed, Jun 15, 2011 at 2:34 PM, AJ <a...@dude.podzone.net> wrote: >> Vijay, thank you for your thoughtful reply. Will Cass complain if I don't >> setup my tokens like in the examples? >> >> >> On 6/15/2011 2:41 PM, Vijay wrote: >>> >>> All you heard is right... >>> You are not overriding Cassandra's token assignment by saying here is your >>> token... >>> >>> Logic is: >>> Calculate a token for the given key... >>> find the node in each region independently (If you use NTS and if you set >>> the strategy options which says you want to replicate to the other >>> region)... >>> Search for the ranges in each region independntly >>> Replicate the data to that node. >>> >>> For multi DC cassandra needs nodes to be equally partitioned within each dc >>> (If you care that the load equally distributed).... as well >>> as there shouldn't be any collusion of tokens within a cluster.... >>> >>> The documentation tried to explain the same and the example in the >>> documentation. >>> Hope this clarifies... >>> >>> More examples if it helps.... >>> >>> DC1 Node 1 : token 0 >>> DC1 Node 2 : token 8.. >>> >>> DC2 Node 1 : token 4.. >>> DC2 Node 1 : token 12.. >>> >>> or >>> >>> DC1 Node 1 : token 0 >>> DC1 Node 2 : token 1.. >>> >>> DC2 Node 1 : token 8.. >>> DC2 Node 1 : token 7.. >>> >>> Regards, >>> </VJ> >>> >>> >>> >>> On Wed, Jun 15, 2011 at 12:28 PM, AJ <a...@dude.podzone.net> wrote: >>> On 6/15/2011 12:14 PM, Vijay wrote: >>>> >>>> Correction.... >>>> >>>> "The problem in the above approach is you have 2 nodes between 12 to 4 in >>>> DC1 but from 4 to 12 you just have 1" >>>> >>>> should be >>>> >>>> "The problem in the above approach is you have 1 node between 0-4 (25%) >>>> and and one node covering the rest which is 4-16, 0-0 (75%)" >>>> >>>> Regards, >>>> </VJ> >>>> >>> >>> Ok, I think you are saying that the computed token range intervals are >>> incorrect and that they would be: >>> >>> DC1 >>> *node 1 = 0 Range: (4, 16], (0, 0] >>> >>> node 2 = 4 Range: (0, 4] >>> >>> DC2 >>> *node 3 = 8 Range: (12, 16], (0, 8] >>> >>> node 4 = 12 Range: (8, 12] >>> >>> If so, then yes, this is what I am seeking to confirm since I haven't found >>> any documentation stating this directly and that reference that I gave only >>> implies this; that is, that the token ranges are calculated per data center >>> rather than per cluster. I just need someone to confirm that 100% because >>> it doesn't sound right to me based on everything else I've read. >>> >>> SO, the question is: Does Cass calculate the consecutive node token ranges >>> A.) per cluster, or B.) for the whole data center? >>> >>> From all I understand, the answer is B. But, that documentation (reprinted >>> below) implies A... or something that doesn't make sense to me because of >>> the token placement in the example: >>> >>> "With NetworkTopologyStrategy, you should calculate the tokens the nodes in >>> each DC independantly... >>> >>> DC1 >>> node 1 = 0 >>> node 2 = 85070591730234615865843651857942052864 >>> >>> DC2 >>> node 3 = 1 >>> node 4 = 850705917302346158658436518579 >>> 42052865" >>> >>> >>> However, I do see why this would be helpful, but first I'm just asking if >>> this token assignment is absolutely mandatory >>> or if it's just a technique to achieve some end. >>> >>> >>> >> >> > >