Redis3.2.4クラスタ構築

6228 ワード

[アーキテクチャ設計]Redis 3.2.4グループ構築
Redis3.2.4クラスタ構築
一、概説
Redis3.0      Cluster.

1.1.redis clusterの現状
現在redisがサポートするcluster特性:1):ノード自動発見2):slave->master選挙、クラスタフォールトトレランス3):Hot resharding:オンラインスライス4):クラスタ管理:cluster xxx 5):構成(nodes-port.conf)に基づくクラスタ管理6):ASKステアリング/MOVEDステアリングメカニズム.
1.2.redis clusterアーキテクチャ
1)アーキテクチャの詳細:(1)すべてのredisノードが相互接続(PING-PONGメカニズム)、内部でバイナリプロトコルを用いて伝送速度と帯域幅を最適化する.(2)ノードのfailは,クラスタの半数を超えるノードによって失効を検出する場合に有効である.(3)クライアントはredisノードに直結しており,中間proxy層は不要である.クライアントはクラスタのすべてのノードを接続する必要はなく、クラスタ内のいずれかの使用可能なノードを接続すればよい(4)redis-clussterはすべての物理ノードを[0-16383]slotにマッピングし、clusterはnodeslotvalueのメンテナンスを担当する
  • redis-cluster選挙:フォールトトレランス(1)は、クラスタ内のすべてのmasterが参加することをリードし、半数以上のmasterノードがmasterノードと通信している場合(cluster-node-timeout)を超え、現在のmasterノードが停止していると考えられる.(2):クラスタ全体が使用できない場合(cluster_state:fail)、クラスタが使用できない場合、クラスタに対する操作はすべて使用できません.(error)CLUSTERDOWN The cluster is down)エラーa:クラスタが任意のmasterで停止し、現在のmasterにslave eがありません.クラスタがfail状態に入るのは、クラスタに入るslotマッピング[0-16383]が完了しない場合にfail状態に入ると理解することもできる.b:半数以上のmasterが停止するとslaveクラスタがfail状態に入るかどうかにかかわらず.

  • 二、redis cluster取付
    1、ダウンロードと解包
    cd/usr/local/wget http://download.redis.io/releases/redis-3.2.4.tar.gz tar -zxvf/redis-3.2.4.tar.gz
    2、コンパイルインストール
    cd redis-3.2.4 make && make install
    3、redisノードの作成
           2    ,   :192.168.1.237,192.168.1.238.      3   。
    

    まず192.168.1.237で3つのノードを作成します.
    cd/usr/local/mkdir redis_cluster//クラスタディレクトリの作成mkdir 7000 7001 7002//それぞれ3つのノードを表すその対応ポート7000 7001 7002//7000ノードの作成を例に、7000ディレクトリcp/usr/local/redis-3.2.4/redisにコピーする.conf ./redis_cluster/7000///7001ディレクトリcp/usr/local/redis-3.2.4/redisにコピーします.conf ./redis_cluster/7001///7002ディレクトリcp/usr/local/redis-3.2.4/redisにコピーします.conf ./redis_cluster/7002/
    それぞれ70017002、7003フォルダの3つのファイルに対応する構成を変更
    daemonize yes//redisバックグラウンドpidfile/var/run/redis_を実行7000.pid//pidfileファイル対応70007003 port 7000//ポート70007003 cluster-enabled yes//クラスタを開いてコメントを削除cluster-config-file nodes_7000.conf//クラスタのプロファイルが初めて起動自動生成70007002 cluster-node-timeout 5000//要求タイムアウト設定5秒でappendonly yes//aofログオン必要に応じてオンになり、書き込み操作のたびにログbind 192.168.1.237//リスニングアドレスが記録されます
    192.168.1.238に3つのノードを作成する:対応するポートを7000370047005に変更する.配置を変更すればいいです.
    4、2台のマシンが各ノードを起動する(2台のサーバー方式は同じ)
    cd/usr/local redis-server redis_cluster/7000/redis.conf redis-server redis_cluster/7001/redis.conf redis-server redis_cluster/7002/redis.conf redis-server redis_cluster/7003/redis.conf redis-server redis_cluster/7004/redis.conf redis-server redis_cluster/7005/redis.conf
    5、サービスの表示
     ps -ef | grep redis   #        
     netstat -tnlp | grep redis #    redis    
    

    三、クラスタの作成
    前にクラスタを構築するredisノードが用意されています.次に、これらのノードを連結してクラスタを構築します.公式にはredis-trib.rb(/usr/local/redis-3.2.1/src/redis-trib.rb)接尾辞を見ると、この鳥のものは直接実行できないことがわかります.rubyで書かれたプログラムなので、rubyをインストールしなければなりません.yum-y install ruby-devel rubygems rpm-buildはgemというコマンドでredisインタフェースgemをインストールします.gemはrubyのツールパッケージです.redis-3.3.1をダウンロードgem gem install redis-3.3.1.gem//ちょっと待ってください.もちろん、操作が便利で、2台のサーバーがインストールされます.上の手順が終わりましたので、次にredis-tribを実行します.rb/usr/local/redis-3.2.4/src/redis-trib.rb Usage: redis-trib reshard host:port --to --yes --slots --from check host:port call host:port command arg arg .. arg set-timeout host:port milliseconds add-node new_host:new_port existing_host:existing_port --master-id --slave del-node host:port node_id fix host:port import host:port --from help (show this help) create host1:port1 ... hostN:portN --replicas For check, fix, reshard, del-node, set-timeout you can specify the host and port of any working node in the cluster. これを見ると、これらの操作でredisクラスタの構築が完了したことがわかるでしょう.すべてのノードが起動していることを確認し、次にパラメータcreateを使用して作成します(192.168.1.237で作成します).
    /usr/local/redis-3.2.4/src/redis-trib.rb create --replicas 1 192.168.1.237:7000 192.168.1.237:7001 192.168.1.237:7003 192.168.1.238:7003 192.168.1.238:7004 192.168.1.238:7005
       , --replicas  1           master      slave         6   ,            3 master( )3 slave( )
                          ,       。
    

    実行中、CanI set the above configuration?(type'yes'to accept):yes//yesを入力してWaiting for the cluster to joinをプロンプトします.......インストールの时はここでずっと待っていて、反応していないで、ばかは半日待って、このヒントを見て上の1つ、Sending Cluster Meet Message to join the Cluster.これで分かりました.私はちょうど1台のサーバーに配置し始めたばかりで、待つ必要はありません.ここではサーバー2に行ってこのような操作をする必要があります.192.168.1.238で、redis-cli-c-c-p 700*はそれぞれredisの各ノードのクライアントコマンドウィンドウに入り、cluster meet 192.168.1.238 7000を順番に入力して...サーバ1に戻り、作成済みです./usr/local/redis/src/redis-tribを確認してください.rb check 192.168.1.237:7000ここにクラスタが初歩的に構築された.
    四、テスト
    1)getとsetデータ
     redis-cli -c -h 192.168.1.238 -p 7003
           ,   set  name haha
    192.168.1.238:7000> set name haha
    OK
             , redis-cli -c -h 192.168.1.237 -p 7001
    192.168.1.237:7001> get name 
    “haha”
        hash        slot    。
           ,redis   16383 slot  ,            ,      master  。
    

    2)仮定テスト
        192.168.1.238  Down ,(192.168.1.238 1 Master, 2 Slave) ,    192.168.1.238,            ,192.168.1.237 3       Master,    Server2    
        ,      ,         。
      :  redis              ,    Server     ,                Master    Master   ,       Slave     Master.
      :      192.168.1.237   ?       ,cluster is down!!       ,           ,          。      Server,   Master,         
                  Server,              ,        ,      ,       crash ,   ......
    

    3)整合性について
             redis             ,     cache,       ,Redis Cluster is not able to guarantee strong consistency. 
    

    五、インストールで発生した問題
    1、
    CC adlist.o   /bin/sh: cc: command not found   make[1]: *** [adlist.o] Error 127   make[1]: Leaving directory `/usr/local/redis-3.2.4/src   make: *** [all] Error 2 _ 解决方法:GCCはインストールしていないかバージョンが間違っています.インストールしてください.
      yum  install  gcc
    

    2、
    zmalloc.h:50:31:   error: jemalloc/jemalloc.h: No such file or directory   zmalloc.h:55:2:error:#error"Newer version of jemalloc required"make[1]:***[adlist.o]Error 1 make[1]:Leaving directory`/data 0/src/redis-3.2.4/src make:***[all]Error 2解決策:jemallocメモリディスペンサがインストールされていないため、jemallocをインストールしたりmake MALLOC=libc&make installを直接入力したりすることができる