2014-07-06 5 views
2

우리 키 공간의 열 패밀리 중 하나에서 노드 복구를 시도 할 때 카산드라의 상황을 이해하는 데 도움이 필요합니다.카산드라 수리 도구가 전체 클러스터를 고정시킵니다.

우리는 Cassandra 2.0.7을 실행 중이며 시스템의 개체 데이터를 인덱싱하기 위해 사용하는 테이블을 가지고 있습니다.

CREATE TABLE ids_by_text (
    object_type text, 
    field_name text, 
    ref_type text, 
    value text, 
    ref_id timeuuid, 
    PRIMARY KEY((object_type,field_name,ref_type),value,ref_id) 
) 

행 수가 상당히 커질 수 있습니다. 위의 표를 통해 색인을 생성하는 평균 4-6 개의 필드가있는 데이터베이스에 약 1,000 만 개의 개체가 있습니다. 그것은 나에게 많은 것처럼 보이지 않는다.

nodetool 복구를 실행하는 경우, 우리는 조금만 실행 한 다음 다음과 같은 예외가 발생하는 점 명중한다 :이 시점에서

ERROR [AntiEntropySessions:8] 2014-07-06 16:47:48,863 RepairSession.java (line 286) [repair #5f37c2e0-052b-11e4-92f5-b9bfa38ef354] session completed with the following error 
org.apache.cassandra.exceptions.RepairException: [repair #5f37c2e0-052b-11e4-92f5-b9bfa38ef354 on apps/ids_by_text, (-7683110849073497716,-7679039947314690170]] Sync failed between /10.0.2.166 and /10.0.2.163 
    at org.apache.cassandra.repair.RepairSession.syncComplete(RepairSession.java:207) 
    at org.apache.cassandra.service.ActiveRepairService.handleMessage(ActiveRepairService.java:236) 
    at org.apache.cassandra.repair.RepairMessageVerbHandler.doVerb(RepairMessageVerbHandler.java:59) 
    at org.apache.cassandra.net.MessageDeliveryTask.run(MessageDeliveryTask.java:60) 
    at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1145) 
    at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:615) 
    at java.lang.Thread.run(Thread.java:745) 
INFO [ScheduledTasks:1] 2014-07-06 16:47:48,909 GCInspector.java (line 116) GC for ConcurrentMarkSweep: 66029 ms for 1 collections, 7898896176 used; max is 8547991552 
INFO [GossipTasks:1] 2014-07-06 16:47:48,901 Gossiper.java (line 883) InetAddress /10.0.2.162 is now DOWN 
INFO [GossipTasks:1] 2014-07-06 16:47:49,181 Gossiper.java (line 883) InetAddress /10.0.2.163 is now DOWN 
INFO [GossipTasks:1] 2014-07-06 16:47:49,184 StreamResultFuture.java (line 186) [Stream #da84b3e1-052b-11e4-92f5-b9bfa38ef354] Session with /10.0.2.163 is complete 
WARN [GossipTasks:1] 2014-07-06 16:47:49,186 StreamResultFuture.java (line 215) [Stream #da84b3e1-052b-11e4-92f5-b9bfa38ef354] Stream failed 
INFO [GossipTasks:1] 2014-07-06 16:47:49,187 Gossiper.java (line 883) InetAddress /10.0.2.165 is now DOWN 
INFO [GossipTasks:1] 2014-07-06 16:47:49,188 Gossiper.java (line 883) InetAddress /10.0.2.164 is now DOWN 
INFO [GossipTasks:1] 2014-07-06 16:47:49,189 Gossiper.java (line 883) InetAddress /10.0.2.166 is now DOWN 
INFO [GossipTasks:1] 2014-07-06 16:47:49,189 StreamResultFuture.java (line 186) [Stream #da84b3e0-052b-11e4-92f5-b9bfa38ef354] Session with /10.0.2.166 is complete 
WARN [GossipTasks:1] 2014-07-06 16:47:49,189 StreamResultFuture.java (line 215) [Stream #da84b3e0-052b-11e4-92f5-b9bfa38ef354] Stream failed 

를, 다른 노드가 응답하지 않을 수 TPStatus 로그를 던지는 것 본질적 응답이 없습니다. 시스템이 복구되지 않습니다. 우리는 죽었어.

모든 노드에서 'nodetool scrub'을 실행했습니다. 그 중 대부분은 제대로 작동하지 못 했으므로 일부는 실패했습니다. 그래서 나는 그들에게 'sstablescrub'을 사용했습니다. 우리는 하위 범위 복구를 수행하는 스크립트를 작성했으며 문제가있는 범위를 식별 할 수 있지만 일관성이 있는지 또는 증상이 있는지 알기에 충분한 테스트를 수행하지 않았습니다. 생산이 중단되면 테스트가 힘들어서 신중해야합니다.

사이드 바 질문 ... 어떻게 진행중인 수리를 중지합니까? 나는 물건이 옆으로가는 것을 볼 수 있다면, 나는 그것을 멈추고 싶다.

키 공간의 다른 모든 열 패밀리가 올바르게 수리됩니다.

다른 세부 정보가 확실하지 않습니다. 우리는 일주일 동안 이것에 반대하여 우리의 머리를 때리고 있으며, 우리는 붙어 있습니다.

답변

0

당신은 2.1에서 복구를 중지 할 수 있습니다 * 다음과 같습니다.

wget -q -O jmxterm.jar http://downloads.sourceforge.net/cyclops-group/jmxterm-1.0-alpha-4-uber.jar 
java -jar ./jmxterm.jar 
open localhost:7199 -u [optional username] -p [optional password] 
bean org.apache.cassandra.db:type=StorageService 
run forceTerminateAllRepairSessions