codis/redisクラスタ性能分析

2918 ワード

本文はcodisクラスタを例に、redisクラスタの性能分析方法を紹介し、他のredisクラスタバージョン、例えばredis cluster分析方法も類似しており、皆さんのエンジニアリング実践に役立つことを望んでいる.

1 redisシングルノードベンチマーク性能


redis自体は、複数のクライアントが同時にredisノードに大量の要求を送信することをシミュレートして、redisノードのパフォーマンスをテストするパフォーマンステストツールredis-benchmarkを備えています.一般的な使用方法は次のとおりです.
$ redis-benchmark -n 1000 -t set,get -P 16 -q -c 1 -d  10
SET: 403063.28 requests per second
GET: 508388.41 requests per second

ここで、−nはリクエスト総数を指定し、−Pはpipelineモードのリクエスト数を指定し、cはクライアント個数tを指定してリクエストタイプを指定し、−dはリクエスト中のvalueのバイト単位のサイズを指定し(−hを使用してツールの説明を取得できる)、このツールがあれば、単一のredisノードの実際の性能をテストすることができる.Redisノードのパフォーマンスに影響する要因は、次のとおりです.
  • ネットワークのスループットと遅延ギガビット、万兆ネットワーク
  • cpu例えばcpuを開くかどうか省エネ
  • ディスク仮想化されたディスクの場合、パフォーマンスに影響を与える可能性があります.
  • redisノードの接続数30000個の接続のredisノード性能は100個の接続の半分の
  • しかない.
    より深いパフォーマンス要因には、次のものがあります.
  • ネットワークカードの割り込み構成により、cpuの複数のcoreがネットワーク割り込みに応答してシステムのネットワーク性能を向上させることができる
  • .
  • redisメモリディスペンサ
  • 公式の説明によれば、1つのredisノードが提供できるopsピークは10 w程度である.特定のリクエスト、ハードウェア構成、ネットワークに関連しています.自分のテスト環境では,特別な最適化が行われていないredisノードのopsは1 w程度である.注目すべきは、redisノードが単一スレッドであり、マルチコアcpuの性能を十分に利用できないことであり、redisの性能を超える場合にのみ、1台のホスト上で複数のインスタンスを起動することを考慮することができる.

    2 codisクラスタ性能分析


    codisクラスタでは,エージェントノードproxyによりバックエンドのredisノードにアクセスする.proxyはzookeeperにグローバルデータを格納するslotパーティション情報に基づいて、そのkeyに対応するredisノードを選択し、redisの読み書きが完了した後、データは再びproxyに戻り、クライアントに戻る.proxy==>redis=>proxy codisの公式解釈によると、理論的にはproxyはredis-serverの半分の性能しか低下しない.また、proxyはすべてのredis serverに接続して、すべてのslotのデータを読み書きします.クラスタのパフォーマンスの解析を開始する前に、クラスタ全体のパフォーマンスを推定できるように、単一のproxy/redis-serverのパフォーマンステストを行うことができます.システム全体で毎分/秒codisクラスタに書き込まれるデータ量が理論的に満たされるかどうかを確認する必要がある.理論値が満たされない場合、codisクラスタのアップグレードをハードウェアのアップグレード、横拡張から考慮する必要があります.codisクラスタの性能問題をさらに分析するために、クラスタを以下の方法で分析することができます.
  • proxy、redis serverの接続数を確認します.注意システム構成でulimit-nの値が小さすぎるかどうか.
  • proxyデフォルトはWARNログで、INFOログを開き、ログに異常があるかどうかを分析します.開く方法:./codis-admin --proxy=10.1.236.65:11080 --log-level=INFO
  • 上記のredis-benchmarkツールを使用して、proxy、codis-serverのパフォーマンスをそれぞれテストします.redisサーバに直接アクセスすると、proxyのパフォーマンスがredis-serverよりも低下しすぎます.たとえば、10分の1しかない場合、proxyからredis-serverの間に異常が発生しているはずです.ネットワークの異常が大きい可能性があります.proxyテストに合格すると、複数のredis-server間で読み書き要求が開始されるため、proxyノードから他のredis-serverにredis-benchmark性能に異常があるかどうかをテストして、問題をさらに分析することができます.オンラインクラスタの場合、redis-benchmarkは、スパムデータの書き込みが多すぎることを避けるために、あまり大きなデータ量を指定しないでください.
  • redis性能分析は、redisのslowlogによって応答の遅い要求があるかどうかを分析し、コマンドCONFIGGET slowlog-log-slower-thanによって記録されたslowlogのしきい値を構成することができ、注意単位はミリ秒で、デフォルトは0である.
  • redis 127.0.0.1:6379> slowlog get 2
    1) 1) (integer) 14
       2) (integer) 1309448221
       3) (integer) 15
       4) 1) "ping"
    2) 1) (integer) 13
       2) (integer) 1309448128
       3) (integer) 30
       4) 1) "slowlog"
          2) "get"
          3) "100"
    

    参照:redis benchmarkhttps://redis.io/topics/benchmarks redis slowlog https://redis.io/topics/latency