LinuxはRedisクラスタサービスを構築する


LinuxはRedisクラスタサービスを構築する
インストールプロセス
ステップ1:ダウンロードして解凍
kunzai@kunzai:~$ cd /usr/local/
kunzai@kunzai:/usr/local$ wget http://download.redis.io/releases/redis-3.2.4.tar.gz
kunzai@kunzai:/usr/local$tar -zxvf redis-3.2.4.tar.gz 

ステップ2:インストール
kunzai@kunzai:/usr/local$cd redis-3.2.4
kunzai@kunzai:/usr/local$make && make install

ステップ3:redis-trib.rbを/usr/binディレクトリにコピー
redis-trib.rbというのは一般的にredisのインストールパスにありますが、次のコマンドで検索して、そのディレクトリをリストして、対応するディレクトリにcopyすればいいです.
sudo find / -name redis-trib.rb
cp redis-trib.rb /usr/local/bin/ 

第四部:Redisノードの作成
まず192.168.2.1195マシン上/root/local/redis-3.2.4ディレクトリの下でredisを作成します.clusterディレクトリ;
sudo mkdir redis_cluster  

redis_clusterディレクトリの下に、6380、6381、6382638363846385というディレクトリを作成し、redis.confはこの3つのディレクトリにコピーされます
mkdir 6380 6381 6382 6383 6384 6385
cp redis.conf redis_cluster/6380 
cp redis.conf redis_cluster/6381 
cp redis.conf redis_cluster/6382
cp redis.conf redis_cluster/6383
cp redis.conf redis_cluster/6384
cp redis.conf redis_cluster/6385

第五部:この三つのプロファイルをそれぞれ修正し、以下の内容を修正する.
port  6380                                        //  6380、6381、6382,6383,6384,6385 
bind   ip                                       //  ip 127.0.0.1               ip                 ,      (      127.0.0.1)
daemonize    yes                               //redis    
pidfile  /var/run/redis_6380.pid          //pidfile    6380、6381、6382,6383,6384,6385
cluster-enabled  yes                           //        #  
cluster-config-file  nodes_6380.conf   //                   6380、6381、6382,6383,6384,6385
cluster-node-timeout  15000                //       15 ,     
appendonly  yes                           //aof           ,              

ステップ6:各ノードの起動
redis-server redis_cluster/6380/redis.conf
redis-server redis_cluster/6381/redis.conf
redis-server redis_cluster/6382/redis.conf
redis-server redis_cluster/6383/redis.conf
redis-server redis_cluster/6384/redis.conf
redis-server redis_cluster/6385/redis.conf

ステップ7:ノードの確認
kunzai@kunzai:/usr/local/redis/redis_cluster$ ps -ef |grep redis
redis      935     1  0 08:08 ?        00:00:33 /usr/bin/redis-server 127.0.0.1:6379
root      3472     1  0 11:40 ?        00:00:15 redis-server 127.0.0.1:6381 [cluster]
root      3478     1  0 11:41 ?        00:00:15 redis-server 127.0.0.1:6382 [cluster]
root      6647     1  0 15:06 ?        00:00:00 redis-server 127.0.0.1:6380 [cluster]
root      6834     1  0 15:19 ?        00:00:00 redis-server 127.0.0.1:6383 [cluster]
root      6840     1  0 15:19 ?        00:00:00 redis-server 127.0.0.1:6384 [cluster]
root      6846     1  0 15:19 ?        00:00:00 redis-server 127.0.0.1:6385 [cluster]
kunzai    6852  3192  0 15:20 pts/1    00:00:00 grep --color=auto redis



kunzai@kunzai:/usr/local/redis/redis_cluster$ sudo netstat -tnlp | grep redis
tcp        0      0 127.0.0.1:16380         0.0.0.0:*               LISTEN      6647/redis-server 1 
tcp        0      0 127.0.0.1:16381         0.0.0.0:*               LISTEN      3472/redis-server 1 
tcp        0      0 127.0.0.1:16382         0.0.0.0:*               LISTEN      3478/redis-server 1 
tcp        0      0 127.0.0.1:16383         0.0.0.0:*               LISTEN      6834/redis-server 1 
tcp        0      0 127.0.0.1:16384         0.0.0.0:*               LISTEN      6840/redis-server 1 
tcp        0      0 127.0.0.1:16385         0.0.0.0:*               LISTEN      6846/redis-server 1 
tcp        0      0 127.0.0.1:6379          0.0.0.0:*               LISTEN      935/redis-server 12 
tcp        0      0 127.0.0.1:6380          0.0.0.0:*               LISTEN      6647/redis-server 1 
tcp        0      0 127.0.0.1:6381          0.0.0.0:*               LISTEN      3472/redis-server 1 
tcp        0      0 127.0.0.1:6382          0.0.0.0:*               LISTEN      3478/redis-server 1 
tcp        0      0 127.0.0.1:6383          0.0.0.0:*               LISTEN      6834/redis-server 1 
tcp        0      0 127.0.0.1:6384          0.0.0.0:*               LISTEN      6840/redis-server 1 
tcp        0      0 127.0.0.1:6385          0.0.0.0:*               LISTEN      6846/redis-server 1 

ステップ8:クラスタをredis-tribに起動する.rbが存在するディレクトリは、以下のコマンドを実行し、エラーを報告せずに、直接第9、10のステップをスキップします.
 sudo ./redis-trib.rb  create  --replicas  1  127.0.0.1:6380 127.0.0.1:6381 127.0.0.1:6382 127.0.0.1:6383 127.0.0.1:6384 127.0.0.1:6385

ステップ9:rubyのインストール
rubyはredisでサポートされているバージョンをインストールする必要があります.一般的には、バージョンが低いためrubyをアップグレードする必要があるという問題が発生します{redis requires Ruby versionをエラーで報告する>=2.2.2}インストールする前に、(ruby-v)を使用してバージョンを表示できます.
1つ目の方法:ubuntn 17.1 apt-getを使用してruby 2をインストールする.3
だめならsudo apt-get updateを更新してからsudo apt-get install ruby 2をインストールします.3、やってみてもいいですか.
# sudo apt-get update
# sudo apt-get install ruby2.3

第2の方法:cenos 7.2圧縮パッケージをダウンロードしてruby centos 7/rhel 7をインストールより高いバージョンのruby 2をインストールする.2/2.3/2.4+
        ~]# wget http://cache.ruby-lang.org/pub/ruby/2.3/ruby-2.3.5.tar.gz

    ~]# tar zxvf ruby-2.3.5.tar.gz

    ~]# cd ruby-2.3.5

    ruby-2.3.5]# ./configure  --prefix=/opt/ruby

    ruby-2.3.5]# make && make install

    ruby-2.3.5]# ln -s /opt/ruby/bin/ruby /usr/bin/ruby

    ruby-2.3.5]# ln -s /opt/ruby/bin/gem /usr/bin/gem

    ~]#ruby -v    //      

ステップ10:rubygem redis依存をインストールする第1の方法:ubuntn 17.10インストール前からgem
gem install -l redis-3.3.0.gem

第2の方法:cenos 7.2取付②取付rubygem redis依存
    ~]# wget http://rubygems.org/downloads/redis-3.3.0.gem

    ~]# gem install -l redis-3.3.0.gem

Usage:redis-tribを使用できるかどうかを確認します.
kunzai@kunzai:/usr/local/redis$ ./redis-trib.rb 
Usage: redis-trib   

  create          host1:port1 ... hostN:portN
                  --replicas    check           host:port
  info            host:port
  fix             host:port
                  --timeout    reshard         host:port
                  --from                    --to                    --slots                    --yes                   --timeout                    --pipeline    rebalance       host:port
                  --weight                    --auto-weights                   --use-empty-masters                   --timeout                    --simulate                   --pipeline                    --threshold    add-node        new_host:new_port existing_host:existing_port
                  --slave                   --master-id    del-node        host:port node_id
  set-timeout     host:port milliseconds
  call            host:port command arg arg .. arg
  import          host:port
                  --from                    --copy                   --replace   help            (show this help)

For check, fix, reshard, del-node, set-timeout you can specify the host and port of any working node in the cluster.

手順11:クラスタの作成に関する注意点:
①:redis-trib.へrbのノードアドレスは、スロット/データを一切含まないノードである必要があります.そうしないと、クラスタの作成が拒否されます.②:ノードにパスワードが設定されている場合は、プロファイル転送ゲートを変更する必要があります.③:[ ERR]Node 127.0.0.1:6381 is not empty.Either the node already knows other nodes (check with CLUSTER NODES) or contains some key in database 0
 sudo ./redis-trib.rb  create  --replicas  1  127.0.0.1:6380 127.0.0.1:6381 127.0.0.1:6382 127.0.0.1:6383 127.0.0.1:6384 127.0.0.1:6385

エラー:
>>> Creating cluster
>>> Performing hash slots allocation on 6 nodes...
Using 3 masters:
127.0.0.1:6380
127.0.0.1:6381
127.0.0.1:6382
Adding replica 127.0.0.1:6383 to 127.0.0.1:6380
Adding replica 127.0.0.1:6384 to 127.0.0.1:6381
Adding replica 127.0.0.1:6385 to 127.0.0.1:6382
M: 6ba7d505cc00697093086bf8fc0125f68563a8ee 127.0.0.1:6380
   slots:0-5460,6916,7040,11111,11235,15174,15298 (5467 slots) master
M: cb934cf015bfbe8387a83eee8f6fddb44db70a82 127.0.0.1:6381
   slots:2977,5461-10922,11111,11235,15174,15298 (5467 slots) master
M: 7480dcc92137c6f84d6add3a7228b430a8ae2d86 127.0.0.1:6382
   slots:2977,6916,7040,10923-16383 (5464 slots) master
S: 25cfee850379ae24274e63717d6c39f2623b0931 127.0.0.1:6383
   replicates 6ba7d505cc00697093086bf8fc0125f68563a8ee
S: 5659995af3f18767f5efc038a8f6a82dab731caa 127.0.0.1:6384
   replicates cb934cf015bfbe8387a83eee8f6fddb44db70a82
S: 9d73c5f3f14284050d05240327d8d7da91c45e4e 127.0.0.1:6385
   replicates 7480dcc92137c6f84d6add3a7228b430a8ae2d86
Can I set the above configuration? (type 'yes' to accept): yes
/var/lib/gems/2.3.0/gems/redis-4.0.1/lib/redis/client.rb:119:in `call': ERR Slot 2977 is already busy (Redis::CommandError)
    from /var/lib/gems/2.3.0/gems/redis-4.0.1/lib/redis.rb:2764:in `block in method_missing'
    from /var/lib/gems/2.3.0/gems/redis-4.0.1/lib/redis.rb:45:in `block in synchronize'
    from /usr/lib/ruby/2.3.0/monitor.rb:214:in `mon_synchronize'
    from /var/lib/gems/2.3.0/gems/redis-4.0.1/lib/redis.rb:45:in `synchronize'
    from /var/lib/gems/2.3.0/gems/redis-4.0.1/lib/redis.rb:2763:in `method_missing'
    from ./redis-trib.rb:212:in `flush_node_config'
    from ./redis-trib.rb:776:in `block in flush_nodes_config'
    from ./redis-trib.rb:775:in `each'
    from ./redis-trib.rb:775:in `flush_nodes_config'
    from ./redis-trib.rb:1296:in `create_cluster_cmd'
    from ./redis-trib.rb:1700:in `
'

エラーを解決します:文章を見て言います:インストールする時redisは3.0.0のgemを使ってよくなって、私はredis(4.0.1)を使ってそれからアンインストールして、再インストールは直接次のステップを操作していないで、gem redisを再インストールすることを覚えてから、redisクラスタのパスワードの再“第11歩:クラスタを創建します”の注意事項の中の第1の小さい点を必要とします
gem list
gem uninstall redis --version 3.3.2
gem install redis --version 3.0.0
gem list

クラスタの構成に失敗したプロファイルredis*を空にすることはできません.confでは、コマンドを使用してファイルのディレクトリを検索し、プロファイルを削除できます.redisの各ノードサービスを再起動する必要があります.
sudo find / -name redis6380.conf

コマンドの実行に成功しました
 sudo ./redis-trib.rb  create  --replicas  1  127.0.0.1:6380 127.0.0.1:6381 127.0.0.1:6382 127.0.0.1:6383 127.0.0.1:6384 127.0.0.1:6385


  :--replicas                   ,     1。

             ,   3   ,           IP  ,redis-trib-rb                    ,

                   。              ,          。

                            
       
                :16384        ,      。

           redis-trib.rb              /     ,         。
/var/lib/gems/2.3.0/gems/redis-3.0.0/lib/redis.rb:182: warning: this causes ArgumentError in the next release
>>> Performing Cluster Check (using node 127.0.0.1:6380)
M: 6ac7184cc56814c3bbe333b8ad485eb0b7d16519 127.0.0.1:6380
   slots:0-5460 (5461 slots) master
   1 additional replica(s)
M: 88fb7c9c052f2092db2e233b99ade3beab683bab 127.0.0.1:6381
   slots:5461-10922 (5462 slots) master
   1 additional replica(s)
S: 894371a13a7d84cbe9142dc9d5fe6f0e33cb25e1 127.0.0.1:6383
   slots: (0 slots) slave
   replicates 6ac7184cc56814c3bbe333b8ad485eb0b7d16519
S: 59791c4677193b82520db498bcd8a7893185a401 127.0.0.1:6384
   slots: (0 slots) slave
   replicates 88fb7c9c052f2092db2e233b99ade3beab683bab
S: 4fac9940ce2f3ee701a647e33d008f04b43b9801 127.0.0.1:6385
   slots: (0 slots) slave
   replicates 1d0aaf7973d22a94107913baca200bc0e0414959
M: 1d0aaf7973d22a94107913baca200bc0e0414959 127.0.0.1:6382
   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.

ステップ12:クラスタ整合性チェック
16384                     。

       redis-trib.rb checkcheck                     

               ,        :
    
     ./redis-trib.rb check 127.0.0.1:6380

出力:
/var/lib/gems/2.3.0/gems/redis-3.0.0/lib/redis.rb:182: warning: this causes ArgumentError in the next release
>>> Performing Cluster Check (using node 127.0.0.1:6380)
M: 6ac7184cc56814c3bbe333b8ad485eb0b7d16519 127.0.0.1:6380
   slots:0-5460 (5461 slots) master
   1 additional replica(s)
M: 88fb7c9c052f2092db2e233b99ade3beab683bab 127.0.0.1:6381
   slots:5461-10922 (5462 slots) master
   1 additional replica(s)
S: 894371a13a7d84cbe9142dc9d5fe6f0e33cb25e1 127.0.0.1:6383
   slots: (0 slots) slave
   replicates 6ac7184cc56814c3bbe333b8ad485eb0b7d16519
S: 59791c4677193b82520db498bcd8a7893185a401 127.0.0.1:6384
   slots: (0 slots) slave
   replicates 88fb7c9c052f2092db2e233b99ade3beab683bab
S: 4fac9940ce2f3ee701a647e33d008f04b43b9801 127.0.0.1:6385
   slots: (0 slots) slave
   replicates 1d0aaf7973d22a94107913baca200bc0e0414959
M: 1d0aaf7973d22a94107913baca200bc0e0414959 127.0.0.1:6382
   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.

Check for open slots… Check slots coverage… [OK] All 16384 slots covered. 出力は、すべてのスロットがノードに割り当てられていることを示します.
クラスタの現在の状況を表示するには、次の手順に従います.
127.0.0.1:6380> cluster info
cluster_state:ok
cluster_slots_assigned:16384
cluster_slots_ok:16384
cluster_slots_pfail:0
cluster_slots_fail:0
cluster_known_nodes:6
cluster_size:3
cluster_current_epoch:6
cluster_my_epoch:1
cluster_stats_messages_ping_sent:983
cluster_stats_messages_pong_sent:1021
cluster_stats_messages_sent:2004
cluster_stats_messages_ping_received:1016
cluster_stats_messages_pong_received:983
cluster_stats_messages_meet_received:5
cluster_stats_messages_received:2004

redisクライアントクラスタ共通コマンド
       (redis-cli -c -p port)
  
cluster info :       
cluster nodes :             ( node),           。
  
cluster meet   :  ip   port              ,          。
cluster forget  :       node_id      。
cluster replicate  :         node_id          。
cluster saveconfig :               。
 (slot)
cluster addslots  [slot ...] :       ( slot)  ( assign)     。
cluster delslots  [slot ...] :                。
cluster flushslots :             ,                   。
cluster setslot  node  :   slot     node_id      ,        
     ,             >,       。
cluster setslot  migrating  :       slot     node_id       。
cluster setslot  importing  :  node_id           slot     。
cluster setslot  stable :     slot    ( import)    ( migrate)。
 
cluster keyslot  :    key           。
cluster countkeysinslot  :    slot           。
cluster getkeysinslot   :   count   slot       

redisクラスタ選挙許容誤差
ノード失効選挙にはすべてのクラスタが参加し,半数以上のmasterが現在のmasterノードと通信タイムアウト(cluster-node-timeout)した場合,現在のmasterが停止していると考えられる.
redisクラスタが使用できないのはいつですか?
  • 任意のmasterが停止する、slaveがない場合、クラスタはfail状態
  • に入る.
  • 半数を超えるmasterが停止すると、slaver置換クラスタがあるかどうかにかかわらずfail状態
  • に入る.