1
ヤフー株式会社
データ&サイエンスソリューション統括本部
データプラットフォーム本部
小島 夏海
リペア時間短縮にむけた取り組み
@Yahoo! JAPAN
お前誰?
• 小島 夏海
• Cassandra 歴 9ヶ月
• 社内向けプラットフォームの開発・運用
• 学生時代の専門はHCI(主にVR)
2
発表について
• 何か素晴らしいことをしてリペアがめっちゃ
速くなった!という内容の発表ではないです
• とりあえずなんとかなったけど、
もっといい方法がないか知りたいので
みなさんのご意見を聞きたいと思ってます
3
アジェンダ
• モチベーション
• 何をして速くしたか
• リペアのオプション
• Subrange Repair
4
参考資料
• Real World Repairs
• https://www.slideshare.net/DataStax/real-world-
repairs-vinay-chella-netflix-cassandra-summit-
2016
• nodetool repair
• http://docs.datastax.com/en/cassandra/3.0/cass
andra/tools/toolsRepair.html
5
モチベーション
6
SLAが満たせない…
• 2DC 全36台のクラスタでリペアが7時間ほど
• 1台 約12分 (420 ÷ 36 ≒ 12)
• 深夜の内に終わらせたいので7時間は長すぎる
7
素早くリペアを回したい
環境
• CPU : 2CPU 1.80GHz
• メモリ : 128GB
• DISK : SSD 400GB x2発 RAID0*1vol
• Cassandra 3.0.9
• 2DC 3RF
• LeveledCompaction
• データのディスク専有率 : 約30%
8
どうやって速くしていったか
9
どうやって速くするか
• streaming 周りの設定
• compaction 周りの設定
• nodetool repairのオプション
10
どうやって速くするか
• streaming 周りの設定
• 速度を出しすぎると他サービスに
影響があるので 400MB/s に設定
• compaction 周りの設定
• 大きな値にした状態ではピーク時の
リクエストが処理仕切れない
• nodetool repairのオプション
11
どうやって速くするか
• streaming 周りの設定
• compaction 周りの設定
• nodetool repairのオプション
12
リペアで設定できるもの
• リペアのアルゴリズム : インクリメンタル
• シーケンシャル or パラレル : パラレル
• プライマリレンジかどうか : false
• ジョブスレッド数 : 1
• リペアするDCの範囲 : 全体
• データセンタを並列でリペアするか : false
11
ref : http://docs.datastax.com/en/cassandra/3.0/cassandra/tools/toolsRepair.html
• 2.1系までのリペアはフル・リペアで
シーケンシャルがデフォルト
• 弊社ではこれにプライマリオプションを
つけて運用
2.1系までのリペア
DC1 DC2
12
3.0系の設定
• インクリメンタル、パラレルがデフォルト
• 今回のクラスタも3.0系なので、この設定
15
DC1 DC2
: ノード
DC1
なぜprオプションを外したか
16
インクリメンタルリペアに
プライマリオプションをつけて実行 incremental primary
○ ○
3系ではプライマリオプションをつけて
並列でリペアを実行すると失敗する
リペア動作確認 : 条件1
17
DC2
マルチDC環境にて1DCの
1台のみ nodetool repair -full
: ノード
DC2DC1
このrackだけ
nodetool repair実行{ name : nkojima
age : 26}
incremental parallels primary
✕ ○ ✕
RF : 3
{ name : nkojima
age : 25}
DC1
リペア動作確認 : 条件1
18
結果 : nodetool repair -full を実行していない
ノードのデータも修正された
{ name : nkojima
age : 26}
: ノード
DC2 { name : nkojima
age : 26}
incremental parallels primary
✕ ○ ✕
RF : 3
リペア動作確認 : 条件2
19
マルチDC環境にて1DCでのみ
nodetool repair -full -pr
: ノード
DC1 DC2
こちらのDCだけ
nodetool repair実行
{ name : nkojima
age : 25}
{ name : nkojima
age : 26}
incremental parallels primary
✕ ○ ○
RF : 3
リペア動作確認 : 条件2
20
結果 : リペアを実行していないノードの
データは修正されず
: ノード
DC1 DC2{ name : nkojima
age : 26}
{ name : nkojima
age : 25}
incremental parallels primary
✕ ○ ○
RF : 3
ここまでのまとめ
• pr オプションをつけておらず、RF3で3rackの場合は
1rackでだけnodetool repairすればいい
• 弊社の場合
• 2.1系までは pr オプションで運用していたので、全
体でリペアをしていく必要があった
• 3系では pr オプションをやめたので、
全台で nodetool repair コマンドを実行する
必要はなかった
21
22
before : nodetool repair
リペアを実行するノード数の変化
after : nodetool repair
DC1
DC2 DC2
DC1
rack1
rack1
rack1
rack1
rack2
rack2
rack2
rack2
rack3
rack3
rack3
rack3 rack1
rack3
rack1 rack2 rack3
rack1
rack2
rack3
rack1
rack2
rack3
rack2
無駄に実行していたリペアを削減
Subrange Repair
23
Subrange Repair
• 通常のリペアと同じようにリペアをする
• リペアする範囲を実行時に指定する
24
Subrange Repair
• 通常のリペアと同じようにリペアをする
• リペアする範囲を実行時に指定する
25
例 : 赤い箇所をnode1が担当している場合
• 通常のリペアの場合 : 赤い箇所すべてが一つの
nodetool repair の対象になり、順番にリペアが実行
される
• Subrange Repairの場合 : nodetool repair を実行す
る時に、リペアする箇所の範囲を指定することで一つ
づつリペアを実行するトークンレンジ図
リペアの並列実行
• 通常のリペアでは最大で job threads は最大で4
• Subrange Repair を並列で実行すれば
job threads は 1 range に対して最大で4
26
Normal Repair Subrange Repair
All Range job threads : 4 Range1 job threads : 4
Range2 job threads : 4
Range3 job threads : 4
Range4 job threads : 4
トークンレンジ取得
Repair 管理プロセス
Subrange Repair プロセス
Subrange Repair プロセス
Subrange Repair プロセス
Subrange Repair プロセス
どうやっているか
• nodetool repairコマンドを実行している
ノードの概要
27
実行結果
28
• 取り組み前
→ 7時間
• 取り組み後
→ 2時間35分
実施したことまとめ
• 無駄に実行していたリペアを削除
• nodetool repairを実行する台数が36 → 6
• リペアの並列数を上げることで処理時間を短縮
• Subrange Repair を4並列で実行
29
現状の問題点
• Subrange Repair の管理をしている
ノードの負荷が高い
31
• スレッド管理で負荷がかかっている
どうして負荷が高くなっているのか
トークンレンジ取得
Repair 管理プロセス
Subrange Repair プロセス
Subrange Repair プロセス
Subrange Repair プロセス
Subrange Repair プロセス
32
複数台でリペアを動かして負荷を分散させる
32
node2
トークンレンジ取得
Repair 管理プロセス
Subrange Repair プロセス
Subrange Repair プロセス
Subrange Repair プロセス
Subrange Repair プロセス
トークンレンジ取得
node1
まとめ
• リペア時間の短縮を実施
• 7時間 → 2時間半
• 無駄に実行していたリペアを削除
• リペアの並列数を上げることで
処理時間を短縮
33

リペア時間短縮にむけた取り組み@Yahoo! JAPAN #casstudy