Return-Path: X-Original-To: apmail-cassandra-user-archive@www.apache.org Delivered-To: apmail-cassandra-user-archive@www.apache.org Received: from mail.apache.org (hermes.apache.org [140.211.11.3]) by minotaur.apache.org (Postfix) with SMTP id B4A26DA44 for ; Mon, 30 Jul 2012 11:41:31 +0000 (UTC) Received: (qmail 20227 invoked by uid 500); 30 Jul 2012 11:41:29 -0000 Delivered-To: apmail-cassandra-user-archive@cassandra.apache.org Received: (qmail 20171 invoked by uid 500); 30 Jul 2012 11:41:29 -0000 Mailing-List: contact user-help@cassandra.apache.org; run by ezmlm Precedence: bulk List-Help: List-Unsubscribe: List-Post: List-Id: Reply-To: user@cassandra.apache.org Delivered-To: mailing list user@cassandra.apache.org Received: (qmail 20150 invoked by uid 99); 30 Jul 2012 11:41:28 -0000 Received: from nike.apache.org (HELO nike.apache.org) (192.87.106.230) by apache.org (qpsmtpd/0.29) with ESMTP; Mon, 30 Jul 2012 11:41:28 +0000 X-ASF-Spam-Status: No, hits=3.3 required=5.0 tests=FSL_RCVD_USER,HTML_MESSAGE,RCVD_IN_DNSWL_LOW,SPF_NEUTRAL,TRACKER_ID X-Spam-Check-By: apache.org Received-SPF: neutral (nike.apache.org: 209.85.215.44 is neither permitted nor denied by domain of tamar@tok-media.com) Received: from [209.85.215.44] (HELO mail-lpp01m010-f44.google.com) (209.85.215.44) by apache.org (qpsmtpd/0.29) with ESMTP; Mon, 30 Jul 2012 11:41:21 +0000 Received: by lagv3 with SMTP id v3so3476625lag.31 for ; Mon, 30 Jul 2012 04:41:01 -0700 (PDT) X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=google.com; s=20120113; h=mime-version:in-reply-to:references:from:date:message-id:subject:to :content-type:x-gm-message-state; bh=NvMiGgp6ZVA6x+vv3MxxXb5mEiBBlEYktLJZJ2s4elQ=; b=PJ5vtYNHb0CYY3Cgsy4XpqZRNaI6Mdb8b7HjyBSxWBBMtxKarGuuKT+iD8jxzD06C4 1C6TrelNPk1v2jag/jkIwCYlWLk+3qUk5sCH/JFY9RWuhPIW7KQKQTlORFh6TwMDT0AK elYhEkIIZIRxGlLr15YieFkm1yb34AVroAV0YAQUoxd0X4NNn2BCZHAN0e1R3g3WAzNn 9t84XFkCoA1bzmh6HmuwXvmeajD4dZ+b89o2yewi+AnVkZFHo7Em3H8PJUIJfUF70KQM +f/s1S442g9uvY32f6Rm/i5u06vR9ZLjkLyVcBuHcV18IO/fpaxqMhILGe4B3hdqxHdq nYcA== Received: by 10.152.104.44 with SMTP id gb12mr11196926lab.29.1343648460920; Mon, 30 Jul 2012 04:41:00 -0700 (PDT) MIME-Version: 1.0 Received: by 10.112.103.38 with HTTP; Mon, 30 Jul 2012 04:40:39 -0700 (PDT) In-Reply-To: References: <1343414587.v2.mailanyonewebmail-596227@fuseweb2e> From: Tamar Fraenkel Date: Mon, 30 Jul 2012 14:40:39 +0300 Message-ID: Subject: Re: increased RF and repair, not working? To: user@cassandra.apache.org Content-Type: multipart/related; boundary=f46d04088ef53758b204c60a89de X-Gm-Message-State: ALoCoQlPUpIBC7wDxd9PRujGYmM/DCM6h7sjXcZYXzFikoxmRpXSbmTiB29H0l654yt+P1H4P2vy --f46d04088ef53758b204c60a89de Content-Type: multipart/alternative; boundary=f46d04088ef53758b104c60a89dd --f46d04088ef53758b104c60a89dd Content-Type: text/plain; charset=ISO-8859-1 Hi! To clarify it a bit more, Let's assume the setup is changed to RF=3 W_CL=QUORUM (or two for that matter) R_CL=ONE The setup will now work for both read and write in case of one node failure. What are the disadvantages, other than the disk space needed to replicate everything trice instead of twice? Will it affect also performance? Thanks *Tamar Fraenkel * Senior Software Engineer, TOK Media [image: Inline image 1] tamar@tok-media.com Tel: +972 2 6409736 Mob: +972 54 8356490 Fax: +972 2 5612956 On Fri, Jul 27, 2012 at 11:29 PM, Riyad Kalla wrote: > Dave, > > What I was suggesting for Yan was to: > > WRITE: RF=2, CL=QUORUM > READ: CL=ONE > > But you have a good pt... if he hits one of the replicas that didn't have > the data, that would be bad. > > Thanks for clearing that up. > > > On Fri, Jul 27, 2012 at 11:43 AM, Dave Brosius wrote: > >> You have RF=2, CL= Quorum but 3 nodes. >> >> So each row is represented on 2 of the 3 nodes. >> >> If you take a node down, one of two things can happen when you attempt to >> read a row. >> >> The row lives on the two nodes that are still up. In this case you will >> successfully read the data. >> >> The row lives on one node that is up, and one node that is down. In this >> case the read will fail because you haven't fulfilled the quorum (2 nodes >> in agreement) requirement. >> >> >> *----- Original Message -----* >> *From:* "Riyad Kalla" >> *Sent:* Fri, July 27, 2012 8:08 >> *Subject:* Re: increased RF and repair, not working? >> >> Dave, per my understanding of Yan's description he has 3 nodes and took >> one down manually to test; that should have worked, no? >> >> On Thu, Jul 26, 2012 at 11:00 PM, Dave Brosius wrote: >> >>> Quorum is defined as >>> >>> (replication_factor / 2) + 1 >>> therefore quorum when rf = 2 is 2! so in your case, both nodes must be up. Really, using Quorum only starts making sense as a 'quorum' when RF=3 >>> >>> >>> >>> >>> >>> >>> On 07/26/2012 10:38 PM, Yan Chunlu wrote: >>> >>> I am using Cassandra 1.0.2, have a 3 nodes cluster. the consistency >>> level of read & write are both QUORUM. >>> >>> At first the RF=1, and I figured that one node down will cause the >>> cluster unusable. so I changed RF to 2, and run nodetool repair on every >>> node(actually I did it twice). >>> >>> After the operation I think my data should be in at least two nodes, and >>> it would be okay if one of them is down. >>> >>> But when I tried to simulate the failure, by disablegossip of one node, >>> and the cluster knows this node is dow n. then access data from the >>> cluster, it returned "MaximumRetryException"(pycassa). as my experiences >>> this is caused by "UnavailableException", which is means the data it is >>> requesting is on a node which is down. >>> >>> so I wonder my data might not be replicated right, what should I do? >>> thanks for the help! >>> >>> here is the keyspace info: >>> >>> * >>> * >>> *Keyspace: comments:* >>> * Replication Strategy: org.apache.cassandra.locator.SimpleStrategy* >>> * Durable Writes: true* >>> * Options: [replication_factor:2]* >>> >>> >>> >>> the scheme version is okay: >>> >>> *[default@unknown] describe cluster;* >>> *Cluster Information:* >>> * Snitch: org.apache.cassandra.locator.SimpleSnitch* >>> * Partitioner: org.apache.cassandra.dht.RandomPartitioner* >>> * Schema versions: * >>> * f67d0d50-b923-11e1-0000-4f7cf9240aef: [192.168.1.129, 192.168.1.40, >>> 192.168.1.50]* >>> >>> >>> >>> the loads are as below: >>> >>> *nodetool -h localhost ring* >>> *Address DC Rack Status State Load >>>   ;Owns Token * >>> * >>> 113427455640312821154458202477256070484 * >>> *192.168.1.50 datacenter1 rack1 Up Normal 28.77 GB >>> 33.33% 0 * >>> *192.168.1.40 datacenter1 rac k1 Up Normal 26.67 GB >>> 33.33% 56713727820156410577229101238628035242 * >>> *192.168.1.129 datacenter1 rack1 Up Normal 33.25 GB >>> 33.33% 113427455640312821154458202477256070484 * >>> >>> >> > --f46d04088ef53758b104c60a89dd Content-Type: text/html; charset=ISO-8859-1 Content-Transfer-Encoding: quoted-printable
Hi!
To clarify it a bit more,=A0
= Let's assume the setup is changed to
RF=3D3
W_CL=3D= QUORUM (or two for that matter)
R_CL=3DONE

The setup will now work for both read and write in case of one node fail= ure.
What are the disadvantages, other than the disk space needed to replic= ate everything trice instead of twice? Will it affect also performance?

Thanks

Tamar Fraenkel=A0
Senio= r Software Engineer, TOK Media=A0

3D"Inline

tamar@tok-media.com
Tel:=A0=A0=A0+972 2 6409736=A0
Mob:=A0=A0<= a value=3D"+972548356490">+972 54 8356490=A0
Fax:=A0=A0=A0+972 2 5612956=A0





On Fri, Jul 27, 2012 at 11:29 PM, Riyad = Kalla <rkalla@gmail.com> wrote:
Dave,

What I was suggesting for Yan was to:
WRITE: RF=3D2, CL=3DQUORUM
READ: CL=3DONE
=
But you have a good pt... if he hits one of the replicas tha= t didn't have the data, that would be bad.

Thanks for clearing that up.

=
On Fri, Jul 27, 2012 at 11:43 AM, Dave Brosi= us <dbrosius@mebigfatguy.com> wrote:
You have RF=3D2, CL=3D Quorum but 3 nodes.= =A0

So each row is represented on 2 of the 3 nodes.

If you ta= ke a node down, one of two things can happen when you attempt to read a row= .

The row lives on the two nodes that are still up. In this case you will= successfully read the data.

The row lives on one node that is up, a= nd one node that is down. In this case the read will fail because you haven= 't fulfilled the quorum (2 nodes in agreement) requirement.


----- Original Message -----
Fr= om: "Riyad Kalla" <rkalla@gmail.com>
Sent: Fri, July 27, 2012 8:08
Subject:= Re: increased RF and repair, not working?

Dave, per my understanding o= f Yan's description he has 3 nodes and took one down manually to test; = that should have worked, no?

On Thu, Jul 26, 2012 at 11:00 PM,= Dave Brosius <dbrosius@mebigfatguy.com> wrote:
Quorum is defined as

(replication_factor / 2) + 1

therefore quorum when rf =3D 2 is 2! so in your case, both nodes must =
be up.  Really, using Quorum only starts making sense as a 'quorum'=
 when RF=3D3 





On 07/26/2012 10:38 PM, Yan Chunlu w= rote:
I am using Cassandra 1.0.2, = have a 3 nodes cluster. the consistency level of read & write are= =A0both QUORUM.
=A0
At first the RF=3D1, and I figured that one node down = will cause the cluster unusable. so I changed RF to 2, and run = nodetool repair on every node(actually I did it twice). =A0
=
=A0
After the operation I think my data should be in at le= ast two nodes, and it would be okay if one of them is down.
=
=A0
But when I tried to simulate the failu= re, by disablegossip of one node, and the cluster knows this node i= s dow n. then access data from the cluster, it returned =A0"= ;MaximumRetryException"(pycassa). =A0 as my experiences this is = caused by "UnavailableException", which is means the data it is= requesting is on a node which is down.
=A0
so I wonder my data might not be repl= icated right, what should I do? thanks for the help!
=A0
here is the keyspace info:
=A0

Ke= yspace: comments:
=A0 Replication Strategy: = org.apache.cassandra.locator.SimpleStrategy
=
=A0 Durable Writes: true
=A0 =A0 Options: [r= eplication_factor:2]
=A0
= =A0
=A0
the scheme version is okay: =20
=A0
[default@unknown] describe cluster;=
Cluster Information:
= =A0 =A0Snitch: org.apache.cassandra.locator.SimpleSnitch
=
=A0 =A0Partitioner: org.apache.cassandra.dht.RandomPartiti= oner
=A0 =A0Schema versions:=A0
=
f67= d0d50-b923-11e1-0000-4f7cf9240aef: [192.168.1.129, 192.168.1.= 40, 192.168.1.50]
=A0
=A0
=A0
=
the loads are as below:
=A0
=
nodetool -h localhost ring
A= ddress =A0 =A0 =A0 =A0 DC =A0 =A0 =A0 =A0 =A0Rack =A0 =A0 =A0 =A0Status Sta= te =A0 Load =A0 =A0 =A0 =A0 =A0 &nbsp ;Owns =A0 =A0Token =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0= =A0 =A0 =A0 =A0 =A0=A0
=A0 = =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0= =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 = =A0 =A0 =A0 =A0 =A0113427455640312821154458202477256070484 = =A0 =A0=A0
192.168.1.50 =A0 =A0datacenter1 rack1 =A0 =A0 =A0 Up =A0= =A0 Normal =A028.77 GB =A0 =A0 =A0 =A033.33% =A00 =A0 =A0 = =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 = =A0 =A0 =A0 =A0=A0
192.168.1.40 =A0 =A0da= tacenter1 rac k1 =A0 =A0 =A0 Up =A0 =A0 Normal =A026.67 GB =A0 =A0 =A0 =A0= 33.33% =A056713727820156410577229101238628035242 =A0 =A0 =A0<= /i>
192.168.1.129 =A0 datacenter1 rack1 =A0 = =A0 =A0 Up =A0 =A0 Normal =A033.25 GB =A0 =A0 =A0 =A033.33% = =A0113427455640312821154458202477256070484 =A0 =A0
<= /div>


--f46d04088ef53758b104c60a89dd-- --f46d04088ef53758b204c60a89de Content-Type: image/png; name="tokLogo.png" Content-Transfer-Encoding: base64 Content-ID: X-Attachment-Id: ii_135b91fb888fa9ff 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 RK5CYII= --f46d04088ef53758b204c60a89de--