5

セットアップ:
各ノードに約 850G のデータを持つ 3 つのノード Cassandra クラスターがあり、Cassandra データ ディレクトリ (現在は 3 つのドライブ 800G + 100G + 100G で構成される) 用に LVM セットアップがあり、cassandra_logs 用に別のボリューム (非 LVM) があります。

バージョン:
Cassandra v2.0.14.425
DSE v4.6.6-1

問題:
各ノードの LVM に 3 番目 (100G) のボリュームを追加した後、すべてのノードのディスク I/O が非常に高くなり、頻繁にダウンします。サーバーにもアクセスできなくなり、サーバーを再起動する必要がありますが、サーバーは再起動しません。 t が安定し、10 ~ 15 分ごとに再起動する必要があります。

その他の情報:
すべてのノードで DSE 推奨のサーバー設定 (vm.max_map_count、ファイル記述子) が構成されてい
ます 各ノードの RAM : 24G 各
ノードの CPU : 6 コア / 2600MHz
各ノードのディスク : 1000G (データ ディレクトリ) / 8G (ログ) )

4

1 に答える 1

8

お察しのとおり、ディスクのスループットに問題があります。背景を説明するために私が見たものは次のとおりです。nodetool tpstats3 つのノードからの出力には、次の行がありました。

Pool Name                    Active   Pending      Completed   Blocked  All time blocked
FlushWriter                       0         0             22         0                 8
FlushWriter                       0         0             80         0                 6
FlushWriter                       0         0             38         0                 9 

私が懸念している列は、すべての時間のブロックです。完了に対する比率として、多くのブロッキングがあります。フラッシュライターは、memtable をディスクにフラッシュして、JVM がメモリ不足になったり、大規模な GC の問題が発生したりしないようにする役割を果たします。memtable は、テーブルのメモリ内表現です。ノードがより多くの書き込みを行うと、ノードがいっぱいになり始め、フラッシュする必要があります。その操作は、ディスクへの長い順次書き込みです。それをブックマークしてください。話を戻します。

フラッシュライターがブロックされると、ヒープがいっぱいになり始めます。それらがブロックされたままになると、リクエストがキューに入れられ始め、最終的にノードが OOM になります。

圧縮も実行されている可能性があります。コンパクションは、SSTableをメモリに長時間連続して読み取り、次にソートされたマージ結果を長時間連続してフラッシュします。シーケンシャル IO の増加。

したがって、ディスクに対するこれらすべての操作は順次実行されます。ランダム IOP ではありません。ディスクが同時シーケンシャル読み取りと書き込みを処理できない場合、IOWait が急上昇し、要求がブロックされ、Cassandra は非常に悪い日になります。

あなたはCephを使用していると述べました。Ceph での Cassandra のデプロイが成功した例はまだ見たことがありません。しばらく持ちこたえた後、シーケンシャル ロードで転倒します。短期的に最も簡単な解決策は、ノードを追加して負荷を分散させることです。中期的には、シーケンシャル ディスク ロード用にスタックを最適化する方法を見つけることですが、最終的には失敗します。長期的には、実際のディスクと共有ストレージからデータを取得します。

私は何年にもわたって Cassandra を使用しているクライアントに、「ストレージにイーサネット プラグがある場合、それは間違っています」と相談してきました。

于 2016-04-08T02:12:06.577 に答える