キースペース内の列ファミリーの 1 つでノードツールの修復を試みるときに、Cassandra に何が起こっているのかを理解するのに助けが必要です。
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)
)
行は非常に大きくなる可能性があります。データベースには約 1,000 万のオブジェクトがあり、平均して 4 ~ 6 個のフィールドがあり、上記のテーブルを介してインデックスを作成しています。私にはあまりないように思えます。
nodetool repair を実行すると、少し実行した後、次の例外がスローされるポイントに到達します。
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」を使用しました。サブ範囲の修復を行うスクリプトを作成し、問題のある範囲を特定できましたが、それが一貫しているかどうかを判断するのに十分なテストを行っていません。生産が落ちたときのテストは厳しいので、慎重にならなければなりません。
サイドバーの質問... 進行中の修復をどのように停止しますか? 横道にそれるのが見えたら止めたい。
キースペース内の他のすべての列ファミリーは問題なく修復されることに注意してください。
他にどのような詳細を提供すればよいかわかりません。私たちはこれに対して 1 週間頭を悩ませてきましたが、行き詰まっています。