twemproxyでredisクラスタを構築する

4187 ワード

最近はtwitterのオープンソースtwemproxyを利用してredisのエージェントを行い、redisクラスタの機能を実現しています.twemproxyはコンシステンシhashアルゴリズムを用いてkeyをhashし,多くのkeyをバックエンドの各redisに均一に分布させる.このhash粒度はkeyレベルであり、同じkeyは1つのredisインスタンスにのみ配置され、異なるkeyは異なるredisインスタンスに分布する可能性があることに注目すべきである.
一、紹介
参照
Twitterは、世界最大のRedisクラスタの1つとしてTwitterに配備され、ユーザーに時間軸データを提供しています.Twitter Open Source部門はTwemproxyを提供しています.
Twemproxy、nutcrakerとも呼ばれます.Twitterオープンソースのredisとmemcacheエージェントサーバです.redisは効率的なキャッシュサーバとして、非常に応用価値があります.しかし、使用が多い場合は、何らかの方法で統一的に管理できることが望ましい.各アプリケーションの各クライアントが接続の分散性を管理することを回避します.同時にある程度制御できるようになります.
Twemproxyは、Memcached ASCIIプロトコルと更新されたRedisプロトコルをサポートする高速の単一スレッドエージェントです.
すべてCで書かれており、Apache 2.0 Licenseライセンスを使用しています.プロジェクトはLinuxで動作するが、OSXではepoll APIに依存するためコンパイルできない.
Twemproxyは、エージェント層を導入することによって、バックエンドの複数のRedisまたはMemcachedインスタンスを統一的に管理および割り当てることができ、アプリケーションがTwemproxy上でのみ操作する必要があり、後で実際のRedisまたはMemcachedストレージがどれだけあるかに関心を持たないようにします.
二、twemproxy特性:
参照
失敗したノードの自動削除をサポート
ノードを再接続する時間を設定できます
ノードを削除するには、接続を何回設定できますか?
この方式はcacheストレージとして適している
HashTagの設定をサポート
2つのKEYhashを同じインスタンスに設定するには、HashTagを使用します.
redisとの直接接続数を減らす
redisとの長い接続を維持
エージェントとバックグラウンドのredis接続の数を設定できます
バックエンドの複数のredisインスタンスに自動的にスライス
複数のhashアルゴリズム:異なるポリシーとハッシュ関数を使用して一貫性hashをサポートできます.
バックエンドインスタンスのウェイト値を設定できます
単一の問題を回避
複数のエージェント層を平行に配置することができる.クライアントは使用可能な1つを自動的に選択します
redis pipelining requestのサポート
要求のフローとバッチ処理をサポートし、往復の消費を低減
ステータスモニタリングのサポート
ステータスモニタipとポートを設定でき、ipとポートにアクセスしてjson形式のステータス情報列を得ることができます.
モニタ情報のリフレッシュ間隔を設定可能
高スループット
接続多重化、メモリ多重化.
複数の接続リクエストを、reids pipeliningを構成してredisリクエストに統一します.
三、取り付け
インストールの前提条件はlibtoolが必要で、ないのは自分でインストールすることができて、とても簡単です.またautoconfが必要で、バージョンが少し高くてもっと良くて、時にはアップグレードして使う必要があります.私のはこのような状況です.この2つの条件があれば、手を出すことができます.
1.gitから最新のcode cloneを降ります.
Javaコードコレクションコード
$ git clone https://github.com/twitter/twemproxy.git   

2.コンパイル開始、インストール
$ cd  twemproxy/  
  
$ CFLAGS="-ggdb3 -O0" autoreconf -fvi && ./configure --enable-debug=log && make && sudo make install   

3.前のステップでは、いくつかの依存パッケージが先にインストールされ、インストール後に次のコンパイルインストールを実行すればよい場合があります.インストールが完了したらプロファイルを変更し、プロファイルディレクトリソフトウェアディレクトリ/conf/nutcracker.yml.私の今回のインストールは2つのtwemproxyインスタンス、3つのredisインスタンスを採用し、構成内容は以下の通りです.
redis1:
  listen: 192.168.30.106:6311 #        Twemproxy
  redis: true #   Redis proxy
  hash: fnv1a_64 #     hash  
  distribution: ketama #   hash  
  auto_eject_hosts: true #                  
  timeout: 4000 #    (  )
  server_retry_timeout: 2000 #     (  )
  server_failure_limit: 1 #            
  servers: #       Redis  (IP:   :  )
   - 127.0.0.1:6379:1
   - 127.0.0.1:6389:1
   - 127.0.0.1:6369:1


redis2:
  listen: 192.168.30.106:6321 #        Twemproxy
  redis: true #   Redis proxy
  hash: fnv1a_64 #     hash  
  distribution: ketama #   hash  
  auto_eject_hosts: true #                  
  timeout: 4000 #    (  )
  server_retry_timeout: 2000 #     (  )
  server_failure_limit: 1 #            
  servers: #       Redis  (IP:   :  )
   - 127.0.0.1:6379:1
   - 127.0.0.1:6389:1
   - 127.0.0.1:6369:1

4.twemproxyを開く
インストールコンパイルは/usr/binにnutcrackerのショートカットがありますが、このように開くことはできません.必要:
$ cd twemproxy/  
  
$ /src/nutcracker  -t    ##              

プロファイルはconf/nutcracker.yml、-tテストに合格すれば、起動して自分の環境を構成することができます.
$  /src/nutcracker  

四、性能テスト
redisのbenchmarkツールを用いてエージェント方式と単一のredisを用いてそれぞれ圧力テストを行い,その性能を比較できた.総じてtwemproxyを使うと性能が低下し、私の30%前後、他の人は20%を測定し、無損性能を測定する人もいます.
   redis(            get,lpush,lpop )
/usr/coolpad/redis6369/src/redis-benchmark -p 6379 -h 192.168.30.106 -c 100 -t [color=red]set [/color]-d 100 -l -q
 twemproxy
/usr/coolpad/redis6369/src/redis-benchmark -p 6311 -h 192.168.30.106 -c 100 -t [color=red]set[/color] -d 100 -l -q