Redisクラスタ構築およびPython操作クラスタ

8785 ワード

redis書籍を強くお勧めします<>
一.概要
1.スタンドアロンredis配備https://www.jianshu.com/p/acd3281d9074
2.redisクラスタの紹介
Redis ClusterはRedisの分散ソリューションであり、3.0リリースで正式にリリースされ、Redisの分散に関するニーズを効果的に解決しました.シングルマシンメモリ、コンカレント、トラフィックなどのボトルネックに遭遇した場合、Clusterアーキテクチャ方式を採用して負荷均衡の目的を達成することができる.
3.クラスタの原理はredisの開発と運行とメンテナンスを参照して、著者の言うのはとても良くて、見るとすぐ知っています
4.redisクラスタ機能制限
Redisクラスタは単機に対して機能的にいくつかの制限があり,開発者が事前に理解し,使用時に回避する必要がある.制限は次のとおりです.
  • key一括操作のサポートは限られています.mset、mgetのように、現在は同じslot値を持つkeyによる一括操作のみがサポートされています.異なるslot値にマッピングされたkeyは、mget、mgetなどの操作が複数のノードに存在する可能性があるためサポートされない.
  • keyトランザクション操作のサポートは限られています.同じ理屈では、同じノード上の複数のkeyのトランザクション操作のみがサポートされ、複数のkeyが異なるノードに分散されている場合、トランザクション機能は使用できません.
  • keyはデータパーティションの最小粒度であるため、hash、listなどの大きなキー値オブジェクトを異なるノードにマッピングすることはできない.
  • では、マルチデータベーススペースはサポートされていません.スタンドアロンのRedisは16個のデータベースをサポートし、クラスタモードでは1つのデータベース空間、すなわちdb 0しか使用できません.
  • レプリケーション構造は1層のみサポート、ノードからプライマリノードのみコピー、ネストツリーレプリケーション構造
  • はサポートされていない.
    二.redisクラスタ構築
    1.ノードの準備
  • ソースパケットwget http://download.redis.io/releases/redis-3.2.11.tar.gz
  • を取得する.
  • 解凍tar -zxf redis-3.2.11.tar.gz
  • コンパイルcd redis-3.2.11 && makeは、srcディレクトリの下に実行可能なファイルを作成します.
  • redis-benchmark redis-check-aof redis-check-rdb
    redis-cli   redis-sentinel  redis-server    redis-trib.rb
    
  • コピー/usr/local/redis/bin下
  • mkdir -p  /usr/local/redis/bin
    mkdir -p  /usr/local/redis/cluster
    mkdir -p /usr/local/redis/cluster/7000
    
    cd src
    #        
    cp redis-benchmark redis-check-aof redis-check-rdb redis-cli redis-sentinel redis-server redis-trib.rb /usr/local/redis/bin/
    
    #       
    cd .. && cp redis.conf /usr/local/redis/7000
    
    # /usr/local/redis/bin         
    vim /etc/profile
    PATH=/usr/local/redis/bin:$PATH
         source /etc/profile  
    
  • Redisクラスタは一般に複数のノードから構成され、ノード数は少なくとも6個であり、完全で高可用性のクラスタを構成することを保証することができる.各ノードはcluster-enabled yesの構成をオンにし、Redisをクラスタモードで
  • 実行する必要がある.
  • まず7000ノードディレクトリを作成し、プロファイルを変更し、7001 7002 7003 7004 7005にコピーし、
  • を一括変更します.
  • は7000ディレクトリに入り、プロファイル
  • を変更します.
    cd /usr/local/redis/cluster
    #       
    vim 7000/redis.conf
    
  • プロファイルを変更する必要があるのは、次の
  • です.
    #     (      )
    bind 0.0.0.0
    #   
    port 7000
    #           
    daemonize yes
    # pid  
    pidfile /var/run/redis_7000.pid
    #         
    logfile "/usr/local/redis/cluster/7000/redis.log"
    #     
    dir "/usr/local/redis/cluster/7000"
    #     
    cluster-enabled yes
    cluster-config-file nodes-7000.conf
    cluster-node-timeout 15000
    
  • は、7000を他の5つのディレクトリ
  • にコピーする.
    cd /usr/local/redis/cluster
    cp -r 7000 7001
    cp -r 7000 7002
    cp -r 7000 7003
    cp -r 7000 7004
    cp -r 7000 7005
    
    
    #   sed  ,        7000        
    sed -i 's/7000/7001/g' 7001/redis.conf 
    sed -i 's/7000/7002/g' 7002/redis.conf 
    sed -i 's/7000/7003/g' 7003/redis.conf 
    sed -i 's/7000/7004/g' 7004/redis.conf 
    sed -i 's/7000/7005/g' 7005/redis.conf
    
  • ディレクトリ構造は、以下の
  • である.
    yum install tree -y
    [root@instance-kbjefgng cluster]# tree
    .
    ├── 7000
    │   ├── redis.conf
    ├── 7001
    │   ├── redis.conf
    ├── 7002
    │   ├── redis.conf
    ├── 7003
    │   ├── redis.conf
    ├── 7004
    │   ├── redis.conf
    └── 7005
        ├── redis.conf
    
    [root@instance-kbjefgng redis]# tree bin
    bin
    ├── redis-benchmark
    ├── redis-check-aof
    ├── redis-check-rdb
    ├── redis-cli
    ├── redis-sentinel
    ├── redis-server
    └── redis-trib.rb
    
  • は6個のノード
  • を開く.
    redis-server 7000/redis.conf 
    redis-server 7001/redis.conf 
    redis-server 7002/redis.conf 
    redis-server 7003/redis.conf 
    redis-server 7004/redis.conf 
    redis-server 7005/redis.conf
    

    2.redis-tribでrbクラスタの構築
    redis-trib.rbはRubyによるRedisクラスタ管理ツールである.内部では、Cluster関連コマンドを使用してクラスタの作成、チェック、スロットの移行、等化などの一般的なメンテナンス操作を簡素化し、使用前にRuby依存環境をインストールする必要があります.
  • ruby
  • をインストール
    # ruby  
    # http://www.ruby-lang.org/en/downloads/
    #        ,     2.4.5
    wget https://cache.ruby-lang.org/pub/ruby/2.4/ruby-2.4.5.tar.gz
    
    #     
    tar -zxf ruby-2.4.5.tar.gz 
    cd ruby-2.4.5/
    ./configure --prefix=/usr/local/ruby
    make && make install
    
  • は環境変数
  • に加わる.
    vim /etc/profile
    PATH=/usr/local/ruby/bin:$PATH
    source   
    
  • rubyインストールredisパッケージ公式サイトhttps://rubygems.org/検索redis本宝インストール3.2.1バージョン
  • #   ruby    gem  redis
    gem install redis -v 3.2.1
    
  • ruby環境準備完了、redis-tribを使用rb構築クラスタ表示ヘルプ
  • [root@instance-kbjefgng redis]# redis-trib.rb help
    Usage: redis-trib   
    
      create          host1:port1 ... hostN:portN
                      --replicas 
      check           host:port
    
    
  • redis-tribを使用する.rb create構築redis-trib.rb create --replicas 1 0.0.0.0:7000 0.0.0.0:7001 0.0.0.0:7002 0.0.0.0:7003 0.0.0.0:7004 0.0.0.0:7005
  • 構築プロセスは次のとおりです.
    [root@instance-kbjefgng cluster]# redis-trib.rb create --replicas 1  0.0.0.0:7000 0.0.0.0:7001 0.0.0.0:7002 0.0.0.0:7003 0.0.0.0:7004 0.0.0.0:7005
    
    #     
    
    >>> Creating cluster
    /usr/local/ruby/lib/ruby/gems/2.4.0/gems/redis-3.2.1/lib/redis/client.rb:443: warning: constant ::Fixnum is deprecated
    >>> Performing hash slots allocation on 6 nodes...
    #     
    Using 3 masters:
    0.0.0.0:7000
    0.0.0.0:7001
    0.0.0.0:7002
    Adding replica 0.0.0.0:7003 to 0.0.0.0:7000
    Adding replica 0.0.0.0:7004 to 0.0.0.0:7001
    Adding replica 0.0.0.0:7005 to 0.0.0.0:7002
    #    ,   0-16383  ,      master   
    M: 7477f892ff332ab393face782be606626fe1336d 0.0.0.0:7000
       slots:0-5460 (5461 slots) master
    M: 97b1cef8e9ef167158a57649af82e5f5b7c518c3 0.0.0.0:7001
       slots:5461-10922 (5462 slots) master
    M: 0f24de58844cb3c6ec355d4c272b122cfb601936 0.0.0.0:7002
       slots:10923-16383 (5461 slots) master
    S: d67c8782e7cce986fbc300a3425642046370b830 0.0.0.0:7003
       replicates 7477f892ff332ab393face782be606626fe1336d
    S: 26ff32fb6f241eab220722caf581df9e96d3ab23 0.0.0.0:7004
       replicates 97b1cef8e9ef167158a57649af82e5f5b7c518c3
    S: aa7ed81beb087d265ac7a9c72dddf9f5e35da6f3 0.0.0.0:7005
       replicates 0f24de58844cb3c6ec355d4c272b122cfb601936
    Can I set the above configuration? (type 'yes' to accept): yes
    
  • yesが同意した後、構築実行は以下のように表示されます:
  • >>> Nodes configuration updated
    >>> Assign a different config epoch to each node
    >>> Sending CLUSTER MEET messages to join the cluster
    Waiting for the cluster to join...
    >>> Performing Cluster Check (using node 0.0.0.0:7000)
    M: 7477f892ff332ab393face782be606626fe1336d 0.0.0.0:7000
       slots:0-5460 (5461 slots) master
       1 additional replica(s)
    S: d67c8782e7cce986fbc300a3425642046370b830 127.0.0.1:7003
       slots: (0 slots) slave
       replicates 7477f892ff332ab393face782be606626fe1336d
    S: 26ff32fb6f241eab220722caf581df9e96d3ab23 127.0.0.1:7004
       slots: (0 slots) slave
       replicates 97b1cef8e9ef167158a57649af82e5f5b7c518c3
    S: aa7ed81beb087d265ac7a9c72dddf9f5e35da6f3 127.0.0.1:7005
       slots: (0 slots) slave
       replicates 0f24de58844cb3c6ec355d4c272b122cfb601936
    M: 97b1cef8e9ef167158a57649af82e5f5b7c518c3 127.0.0.1:7001
       slots:5461-10922 (5462 slots) master
       1 additional replica(s)
    M: 0f24de58844cb3c6ec355d4c272b122cfb601936 127.0.0.1:7002
       slots:10923-16383 (5461 slots) master
       1 additional replica(s)
    [OK] All nodes agree about slots configuration.
    >>> Check for open slots...
    >>> Check slots coverage...
    [OK] All 16384 slots covered.
    
  • 構築完了、クラスタ整合性検査redis-trib.rb check 0.0.0.0:7000
  • [OK] All nodes agree about slots configuration.
    >>> Check for open slots...
    >>> Check slots coverage...
    [OK] All 16384 slots covered.
    

    すべてのスロットがノードに割り当てられます
  • これでredisクラスタの構築が完了し、redisクラスタの詳細については、本宝が推奨する書籍(3回目の推奨、ハハ)
  • を参照してください.
  • ディレクトリ構造は、以下の
  • である.
    [root@instance-kbjefgng redis]# tree cluster/
    cluster/
    ├── 7000
    │   ├── dump.rdb
    │   ├── nodes-7000.conf
    │   ├── redis.conf
    │   └── redis.log
    ├── 7001
    │   ├── dump.rdb
    │   ├── nodes-7001.conf
    │   ├── redis.conf
    │   └── redis.log
    ├── 7002
    │   ├── dump.rdb
    │   ├── nodes-7002.conf
    │   ├── redis.conf
    │   └── redis.log
    ├── 7003
    │   ├── dump.rdb
    │   ├── nodes-7003.conf
    │   ├── redis.conf
    │   └── redis.log
    ├── 7004
    │   ├── dump.rdb
    │   ├── nodes-7004.conf
    │   ├── redis.conf
    │   └── redis.log
    └── 7005
        ├── dump.rdb
        ├── nodes-7005.conf
        ├── redis.conf
        └── redis.log
    
    6 directories, 24 files
    

    三.pythonオペレーションredisクラスタ
  • 操作単機redis、redis-pyインストールpip install redis推奨github https://github.com/andymccurdy/redis-py
  • 参照
  • はクラスタを操作し、redis-py-clusterインストールpip install redis-py-clusterの使用を推奨します.http://readthedocs.org/projects/redis-py-cluster/