Java クライアント アプリケーションで使用される 4 ノードの Cassandra (2.2.1) クラスターがあります。レプリケーション ファクターは 3、整合性レベルは読み取りと書き込みの LOCAL_QUORUM です。各ノードには約 5 GB のデータがあります。リクエストの量は、1 秒あたり約 2 ~ 4k です。削除操作はほとんどないため、少量のトゥームストーンが作成されます。
少し前に読み取りと書き込みのパフォーマンスが低下していることに気付きましたが、時間の経過とともに悪化しています。クラスターが非常に遅くなっています。読み取り (ほとんどの場合) と書き込みのタイムアウトが非常に頻繁になりました。ハードウェアが問題を引き起こすことはありません。クラスターが展開されているサーバーは、ディスク パフォーマンス、CPU および RAM リソースの点で非常に優れています。
問題の原因は不明ですが、根本的な原因を示している可能性があるいくつかのログ エントリに気付きました。
Java クライアント アプリケーション ログの例外スタック トレース:
com.datastax.driver.core.exceptions.ReadTimeoutException: 整合性 LOCAL_QUORUM で読み取りクエリ中に Cassandra タイムアウトが発生しました (2 つの応答が必要でしたが、応答したレプリカは 1 つだけでした)
興味深いのは、1 つのノードがまだ応答していることです。
失敗したヒント エラーのいくつかのエントリ:
/1.1.1.1 へのヒントの再生に失敗しました。中止中 (135922 配信済み)、エラー: 操作がタイムアウトしました - 0 応答しか受信しませんでした。
Cassandra ログのいくつかの次の例外:
リクエスト中に予期しない例外が発生しました。channel = [id: 0x10fc77df, /2.2.2.2:54459 :> /1.1.1.1:9042] java.io.IOException: 読み取り中にエラーが発生しました (...): io.netty.channel.epoll.Native で接続がタイムアウトしました.readAddress(ネイティブ メソッド) ~[netty-all-4.0.23.Final.jar:4.0.23.Final] at io.netty.channel.epoll.EpollSocketChannel$EpollSocketUnsafe.doReadBytes(EpollSocketChannel.java:675) ~[netty -all-4.0.23.Final.jar:4.0.23.Final] at io.netty.channel.epoll.EpollSocketChannel$EpollSocketUnsafe.epollInReady(EpollSocketChannel.java:714) ~[netty-all-4.0.23.Final. jar:4.0.23.Final] at io.netty.channel.epoll.EpollEventLoop.processReady(EpollEventLoop.java:326) ~[netty-all-4.0.23.Final.jar:4.0.23.Final] at io. netty.channel.epoll.EpollEventLoop.run(EpollEventLoop.java:264) ~[netty-all-4.0.23.Final.jar:4.0.23.Final] at io.netty.util.concurrent.
失敗したバッチ エラー:
[<...>] の準備済みステートメントのバッチのサイズは 3453794 で、指定されたしきい値の 1024000 を 2429794 超えています。 (batch_size_fail_threshold_in_kb を参照)
バッチが大きすぎるようです。ところで、バッチ操作がたくさんあります。多分バッチはシステムに影響しますか?
最後に、ほとんどの場合に見られる例外です。ログ レベルを DEBUG に切り替えた後、これらのエントリが次々と表示されます。
TIOStreamTransport.java:112 - 出力ストリームを閉じるときにエラーが発生しました。java.net.SocketException: java.net.SocketOutputStream.socketWrite(SocketOutputStream.java:116) でソケットが閉じられました ~[na:1.8.0_66] java.net.SocketOutputStream.write(SocketOutputStream.java:153) で ~[na: 1.8.0_66] java.io.BufferedOutputStream.flushBuffer(BufferedOutputStream.java:82) で ~[na:1.8.0_66] java.io.BufferedOutputStream.flush(BufferedOutputStream.java:140) で ~[na:1.8.0_66] java.io.FilterOutputStream.close(FilterOutputStream.java:158) で ~[na:1.8.0_66] org.apache.thrift.transport.TIOStreamTransport.close(TIOStreamTransport.java:110) で ~[libthrift-0.9.2. jar:0.9.2] org.apache.cassandra.thrift.TCustomSocket.close(TCustomSocket.java:197) で [apache-cassandra-2.2.1.jar:2.2.1] org.apache.thrift.transport.TFramedTransport で.close(TFramedTransport.java:
この問題の原因について何か考えはありますか?
ありがとうございました!