After further review, I'm definitely going to scrub all the original nodes
in the cluster.

We've lost some data as a result of this situation.  It can be restored, but
the question is what to do with the problematic new node first.  I don't
particularly care about the data that's on it, since I'm going to re-import
the critical data from files anyway, and then I can recreate derivative data
afterwards.  So it's purely a matter of getting the cluster healthy again as
quickly as possible so I can begin that import process.

Any issue with running scrubs on multiple nodes at a time, provided they
aren't replication neighbors?

On Thu, Sep 15, 2011 at 8:18 AM, Ethan Rowe <et...@the-rowes.com> wrote:

> I just noticed the following from one of Jonathan Ellis' messages
> yesterday:
>
>> Added to NEWS:
>>
>>    - After upgrading, run nodetool scrub against each node before running
>>      repair, moving nodes, or adding new ones.
>
>
> We did not do this, as it was not indicated as necessary in the news when
> we were dealing with the upgrade.
>
> So perhaps I need to scrub everything before going any further, though the
> question is what to do with the problematic node.  Additionally, it would be
> helpful to know if scrub will affect the hinted handoffs that have
> accumulated, as these seem likely to be part of the set of failing streams.
>
> On Thu, Sep 15, 2011 at 8:13 AM, Ethan Rowe <et...@the-rowes.com> wrote:
>
>> Here's a typical log slice (not terribly informative, I fear):
>>
>>>  INFO [AntiEntropyStage:2] 2011-09-15 05:41:36,106
>>> AntiEntropyService.java (l
>>> ine 884) Performing streaming repair of 1003 ranges with /10.34.90.8 for
>>> (299
>>>
>>> 90798416657667504332586989223299634,54296681768153272037430773234349600451]
>>>  INFO [AntiEntropyStage:2] 2011-09-15 05:41:36,427 StreamOut.java (line
>>> 181)
>>> Stream context metadata
>>> [/mnt/cassandra/data/events_production/FitsByShip-g-1
>>> 0-Data.db sections=88 progress=0/11707163 - 0%,
>>> /mnt/cassandra/data/events_pr
>>> oduction/FitsByShip-g-11-Data.db sections=169 progress=0/6133240 - 0%,
>>> /mnt/c
>>> assandra/data/events_production/FitsByShip-g-6-Data.db sections=1
>>> progress=0/
>>> 6918814 - 0%,
>>> /mnt/cassandra/data/events_production/FitsByShip-g-12-Data.db s
>>> ections=260 progress=0/9091780 - 0%], 4 sstables.
>>>  INFO [AntiEntropyStage:2] 2011-09-15 05:41:36,428 StreamOutSession.java
>>> (lin
>>> e 174) Streaming to /10.34.90.8
>>> ERROR [Thread-56] 2011-09-15 05:41:38,515 AbstractCassandraDaemon.java
>>> (line
>>> 139) Fatal exception in thread Thread[Thread-56,5,main]
>>> java.lang.NullPointerException
>>>         at
>>> org.apache.cassandra.net.IncomingTcpConnection.stream(IncomingTcpC
>>> onnection.java:174)
>>>         at
>>> org.apache.cassandra.net.IncomingTcpConnection.run(IncomingTcpConn
>>> ection.java:114)
>>
>>
>>
>> Not sure if the exception is related to the outbound streaming above;
>> other nodes are actively trying to stream to this node, so perhaps it comes
>> from those and temporal adjacency to the outbound stream is just
>> coincidental.  I have other snippets that look basically identical to the
>> above, except if I look at the logs to which this node is trying to stream,
>> I see that it has concurrently opened a stream in the other direction, which
>> could be the one that the exception pertains to.
>>
>>
>> On Thu, Sep 15, 2011 at 7:41 AM, Sylvain Lebresne 
>> <sylv...@datastax.com>wrote:
>>
>>> On Thu, Sep 15, 2011 at 1:16 PM, Ethan Rowe <et...@the-rowes.com> wrote:
>>> > Hi.
>>> >
>>> > We've been running a 7-node cluster with RF 3, QUORUM reads/writes in
>>> our
>>> > production environment for a few months.  It's been consistently stable
>>> > during this period, particularly once we got out maintenance strategy
>>> fully
>>> > worked out (per node, one repair a week, one major compaction a week,
>>> the
>>> > latter due to the nature of our data model and usage).  While this
>>> cluster
>>> > started, back in June or so, on the 0.7 series, it's been running 0.8.3
>>> for
>>> > a while now with no issues.  We upgraded to 0.8.5 two days ago, having
>>> > tested the upgrade in our staging cluster (with an otherwise identical
>>> > configuration) previously and verified that our application's various
>>> use
>>> > cases appeared successful.
>>> >
>>> > One of our nodes suffered a disk failure yesterday.  We attempted to
>>> replace
>>> > the dead node by placing a new node at OldNode.initial_token - 1 with
>>> > auto_bootstrap on.  A few things went awry from there:
>>> >
>>> > 1. We never saw the new node in bootstrap mode; it became available
>>> pretty
>>> > much immediately upon joining the ring, and never reported a "joining"
>>> > state.  I did verify that auto_bootstrap was on.
>>> >
>>> > 2. I mistakenly ran repair on the new node rather than removetoken on
>>> the
>>> > old node, due to a delightful mental error.  The repair got nowhere
>>> fast, as
>>> > it attempts to repair against the down node which throws an exception.
>>>  So I
>>> > interrupted the repair, restarted the node to clear any pending
>>> validation
>>> > compactions, and...
>>> >
>>> > 3. Ran removetoken for the old node.
>>> >
>>> > 4. We let this run for some time and saw eventually that all the nodes
>>> > appeared to be done various compactions and were stuck at streaming.
>>> Many
>>> > streams listed as open, none making any progress.
>>> >
>>> > 5.  I observed an Rpc-related exception on the new node (where the
>>> > removetoken was launched) and concluded that the streams were broken so
>>> the
>>> > process wouldn't ever finish.
>>> >
>>> > 6. Ran a "removetoken force" to get the dead node out of the mix.  No
>>> > problems.
>>> >
>>> > 7. Ran a repair on the new node.
>>> >
>>> > 8. Validations ran, streams opened up, and again things got stuck in
>>> > streaming, hanging for over an hour with no progress.
>>> >
>>> > 9. Musing that lingering tasks from the removetoken could be a factor,
>>> I
>>> > performed a rolling restart and attempted a repair again.
>>> >
>>> > 10. Same problem.  Did another rolling restart and attempted a fresh
>>> repair
>>> > on the most important column family alone.
>>> >
>>> > 11. Same problem.  Streams included CFs not specified, so I guess they
>>> must
>>> > be for hinted handoff.
>>> >
>>> > In concluding that streaming is stuck, I've observed:
>>> > - streams will be open to the new node from other nodes, but the new
>>> node
>>> > doesn't list them
>>> > - streams will be open to the other nodes from the new node, but the
>>> other
>>> > nodes don't list them
>>> > - the streams reported may make some initial progress, but then they
>>> hang at
>>> > a particular point and do not move on for an hour or more.
>>> > - The logs report repair-related activity, until NPEs on incoming TCP
>>> > connections show up, which appear likely to be the culprit.
>>>
>>> Can you send the stack trace from those NPE.
>>>
>>> >
>>> > I can provide more exact details when I'm done commuting.
>>> >
>>> > With streaming broken on this node, I'm unable to run repairs, which is
>>> > obviously problematic.  The application didn't suffer any operational
>>> issues
>>> > as a consequence of this, but I need to review the overnight results to
>>> > verify we're not suffering data loss (I doubt we are).
>>> >
>>> > At this point, I'm considering a couple options:
>>> > 1. Remove the new node and let the adjacent node take over its range
>>> > 2. Bring the new node down, add a new one in front of it, and properly
>>> > removetoken the problematic one.
>>> > 3. Bring the new node down, remove all its data except for the system
>>> > keyspace, then bring it back up and repair it.
>>> > 4. Revert to 0.8.3 and see if that helps.
>>> >
>>> > Recommendations?
>>> >
>>> > Thanks.
>>> > - Ethan
>>> >
>>>
>>
>>
>

Reply via email to