最新のRedisクラスタ詳細構築チュートリアル


Redisクラスタの構築と簡単な使用


目次
Redisクラスタの構築と簡単な使用
一、インストールプロセス
1.ダウンロードして解凍する
2.コンパイルインストール
3.Redisノードの作成
4.各ノードの起動
5.redis起動状況を確認する
6.ファイアウォールを設置し、クラスターポートを開放する
7.クラスタの作成
二、クラスターテスト
1.アクセステスト
2.ダウンタイムテスト
三、ノードの追加
1.プライマリノードの追加
2.スレーブノードの追加
四、ノードの除去
1.マスターノードの削除
2.スレーブノードの削除
 
インストール環境とバージョンの説明
2台の仮想マシンで6つのノードをシミュレートし、1台のマシンで3つのノードをシミュレートし、3 master、3 salve環境を作成します(クラスタの作成に失敗するには、3つ以上のプライマリノードが必要です).
redisはredis-5.0.3バージョン(5.0バージョンはRubyをインストールする必要はなく、使い勝手がよく、インストールを推奨)を採用しています.
2台の仮想マシンはCentOS、1台のCentOS 7である.5(IP:192.168.92.100)、1台のCentOS 7.5(IP:192.168.92.101) .

一、インストールプロセス


1.ダウンロードして解凍する

[root@localhost software]# cd /root/software
[root@localhost software]# wget http://download.redis.io/releases/redis-5.0.3.tar.gz
[root@localhost software]# tar -zxvf redis-5.0.3.tar.gz

2.コンパイルインストール

[root@localhost software]# cd redis-5.0.3
[root@localhost redis-5.0.3]# make && make install

3.Redisノードの作成


まず192.168.92.100マシン上/root/software/redis-5.0.3ディレクトリの下でredis_を作成します.clusterディレクトリ;
[root@localhost redis-5.0.3]# mkdir redis_cluster

redis_clusterディレクトリの下に、7000、7001、7002というディレクトリを作成し、redis.confはこの3つのディレクトリにコピーされます
[root@localhost redis_cluster]# mkdir 7000 7001 7002
[root@localhost redis-5.0.3]# cp redis.conf redis_cluster/7000
[root@localhost redis-5.0.3]# cp redis.conf redis_cluster/7001
[root@localhost redis-5.0.3]# cp redis.conf redis_cluster/7002  

この3つのプロファイルをそれぞれ変更し、次のように変更します.
port  7000                                        //  7000,7001,7002        
bind   ip                                       //  ip 127.0.0.1               ip                 ,      
daemonize    yes                               //redis    
pidfile  /var/run/redis_7000.pid          //pidfile    7000,7001,7002
cluster-enabled  yes                           //         #  
cluster-config-file  nodes_7000.conf   //                    7000,7001,7002
cluster-node-timeout  15000                //        15 ,     
appendonly  yes                           //aof            ,              

 
 
  • それから別のマシン(192.168.92.101)で以上の3つのステップ(1.ダウンロードして解凍する;2.コンパイルしてインストールする;3.Redisノードを作成する)の操作を繰り返し、ディレクトリを7003、7004、7005に変更するだけで、対応するプロファイルもこのルールに従って修正すれば
  • 4.各ノードの起動

         (192.168.92.100)   
    
    [root@localhost 7000]# redis-server redis.conf
    [root@localhost 7001]# redis-server redis.conf
    [root@localhost 7002]# redis-server redis.conf
           (192.168.92.101)   
    
    [root@localhost 7003]# redis-server redis.conf
    [root@localhost 7004]# redis-server redis.conf
    [root@localhost 7005]# redis-server redis.conf

    注意:コマンドスクリプトstart-allを書くことができます.sh,各ノードを起動する
    cd 7000 redis-server redis.conf cd .. cd 7001 redis-server redis.conf cd .. cd 7002 redis-server redis.conf

    権限起動の設定
    [root@localhost redis-cluster]# chmod 777 start-all.sh 
    [root@localhost redis-cluster]# ./start-all.sh

     

    5.redis起動状況を確認する


    ##1台の機械(192.168.92.100)
    [root@localhost redis-5.0.3]# ps -ef | grep redis
    root      61020      1  0 02:14 ?        00:00:01 redis-server 127.0.0.1:7000 [cluster]    
    root      61024      1  0 02:14 ?        00:00:01 redis-server 127.0.0.1:7001 [cluster]    
    root      61029      1  0 02:14 ?        00:00:01 redis-server 127.0.0.1:7002 [cluster]    
     
    [root@localhost redis-5.0.3]# netstat -tnlp | grep redis
    tcp        0      0 127.0.0.1:17000             0.0.0.0:*                   LISTEN      61020/redis-server 
    tcp        0      0 127.0.0.1:17001             0.0.0.0:*                   LISTEN      61024/redis-server 
    tcp        0      0 127.0.0.1:17002             0.0.0.0:*                   LISTEN      61029/redis-server 
    tcp        0      0 127.0.0.1:7000              0.0.0.0:*                   LISTEN      61020/redis-server 
    tcp        0      0 127.0.0.1:7001              0.0.0.0:*                   LISTEN      61024/redis-server 
    tcp        0      0 127.0.0.1:7002              0.0.0.0:*                   LISTEN      61029/redis-server

    ##別の機械
    [root@localhost redis-5.0.3]# ps -ef | grep redis
    root       9957      1  0 02:32 ?        00:00:01 redis-server 127.0.0.1:7003 [cluster]
    root       9964      1  0 02:32 ?        00:00:01 redis-server 127.0.0.1:7004 [cluster]
    root       9971      1  0 02:32 ?        00:00:01 redis-server 127.0.0.1:7005 [cluster]
    root      10065   4744  0 02:38 pts/0    00:00:00 grep --color=auto redis
    [root@localhost redis-5.0.3]# netstat -tlnp | grep redis
    tcp        0      0 127.0.0.1:17003         0.0.0.0:*               LISTEN      9957/redis-server 1
    tcp        0      0 127.0.0.1:17004         0.0.0.0:*               LISTEN      9964/redis-server 1
    tcp        0      0 127.0.0.1:17005         0.0.0.0:*               LISTEN      9971/redis-server 1
    tcp        0      0 127.0.0.1:7003          0.0.0.0:*               LISTEN      9957/redis-server 1
    tcp        0      0 127.0.0.1:7004          0.0.0.0:*               LISTEN      9964/redis-server 1
    tcp        0      0 127.0.0.1:7005          0.0.0.0:*               LISTEN      9971/redis-server 1 

    6.ファイアウォールを設置し、クラスターポートを開放する


    2台のマシンのファイアウォールを直接オフにします(オフにしないと、下にクラスタを作成すると、Could not connect to Redis at 192.168.92.101:7003:No route to host)
    [root@localhost redis-5.0.3]# systemctl stop firewalld.service

    7.クラスタの作成


    Redisはredis-cli(5.0以前のバージョンで使用されていたredis-trib.rbでrubyをインストールする必要があり、推奨しない)というツールを公式に提供しており、コマンドラインで直接使用することができます.次のコマンドを使用してインストールを完了します.
    [root@localhost redis-5.0.3]# redis-cli --cluster create 192.168.92.100:7000 192.168.92.100:7001 192.168.92.100:7002 192.168.92.101:7003 192.168.92.101:7004 192.168.92.101:7005 --cluster-replicas 1
  • redis-cli--cluster create、新しいクラスタを作成します.
  • の最初の3つのip:portは1台目のマシンのノードで、残りの3つは2台目のマシンです.
  • オプション--cluster-replicas 1は、クラスタ内の各プライマリノードにスレーブノードを作成することを示します.

  • 次にredis-cliは、次のように構成情報を出力します.
    >>> Performing hash slots allocation on 6 nodes...
    Master[0] -> Slots 0 - 5460
    Master[1] -> Slots 5461 - 10922
    Master[2] -> Slots 10923 - 16383
    Adding replica 192.168.92.101:7004 to 192.168.92.100:7000
    Adding replica 192.168.92.100:7002 to 192.168.92.101:7003
    Adding replica 192.168.92.101:7005 to 192.168.92.100:7001
    M: 5c55309b5a1cd704a056cf80be308964e757f7a1 192.168.92.100:7000
       slots:[0-5460] (5461 slots) master
    M: 4cbdd0a0b1a8e9334ad97a3df577e8ab365e4f7a 192.168.92.100:7001
       slots:[10923-16383] (5461 slots) master
    S: b8b90944c7c65511da0d0b04004d502015f599dc 192.168.92.100:7002
       replicates c4d9fdc43a459d19bb78378b0f801b70f4dd70ec
    M: c4d9fdc43a459d19bb78378b0f801b70f4dd70ec 192.168.92.101:7003
       slots:[5461-10922] (5462 slots) master
    S: 60818181c7a6bb007b3628ef4adf84678359f613 192.168.92.101:7004
       replicates 5c55309b5a1cd704a056cf80be308964e757f7a1
    S: 57b19e309ec580857968f113de4bd2b77aa05ac1 192.168.92.101:7005
       replicates 4cbdd0a0b1a8e9334ad97a3df577e8ab365e4f7a
    Can I set the above configuration? (type 'yes' to accept):

     
    エラーがないことを確認したらyesと入力し、redis-cliは構成を各ノードに適用し、各ノードを接続して通信を開始します.インストールに成功したことを示す内容が表示されます.
    >>> 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 192.168.92.100:7000)
    M: 5c55309b5a1cd704a056cf80be308964e757f7a1 192.168.92.100:7000
       slots:[0-5460] (5461 slots) master
       1 additional replica(s)
    M: 4cbdd0a0b1a8e9334ad97a3df577e8ab365e4f7a 192.168.92.100:7001
       slots:[10923-16383] (5461 slots) master
       1 additional replica(s)
    S: 57b19e309ec580857968f113de4bd2b77aa05ac1 192.168.92.101:7005
       slots: (0 slots) slave
       replicates 4cbdd0a0b1a8e9334ad97a3df577e8ab365e4f7a
    S: 60818181c7a6bb007b3628ef4adf84678359f613 192.168.92.101:7004
       slots: (0 slots) slave
       replicates 5c55309b5a1cd704a056cf80be308964e757f7a1
    S: b8b90944c7c65511da0d0b04004d502015f599dc 192.168.92.100:7002
       slots: (0 slots) slave
       replicates c4d9fdc43a459d19bb78378b0f801b70f4dd70ec
    M: c4d9fdc43a459d19bb78378b0f801b70f4dd70ec 192.168.92.101:7003
       slots:[5461-10922] (5462 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.

    二、クラスターテスト


    1.アクセステスト


    例:
    192.168.92.100の7000ポート対応redisノードへのアクセス
    [root@localhost ~]# redis-cli -c -h 192.168.92.100 -p 7000
    192.168.92.100:7000> 

    パラメータ-cはredisのためクラスタに接続することができる.confはbindをipアドレスに変更するので、-hパラメータは省略できません.-pパラメータはポート番号です.
    データを書き込み、クラスタの検証を行う
    192.168.92.100:7000> set name andy
    -> Redirected to slot [5798] located at 192.168.92.101:7003
    OK
    192.168.92.101:7003> 

    redis set name andyが見つかった後、192.168.92.101マシンredis 7003にリダイレクトします.
    このクラスタのいずれかのノードでkeyの値を取得し,192.168.92.100の7002ポートに対応するredisノードで取得すると仮定した.
    [root@localhost ~]# redis-cli -c -h 192.168.92.100 -p 7002
    192.168.92.100:7002> get name
    -> Redirected to slot [5798] located at 192.168.92.101:7003
    "andy"
    192.168.92.101:7003>

    7002ノードは、上から7003に自動的にジャンプして値を取得します.これもredis clusterの特徴で、中心化されていません.各ノードは対等で、どのノードに接続してもデータを取得して設定することができます.

    2.ダウンタイムテスト


    シミュレーションでは7003ノードを削除し、redis-cluster原理に従って7003のスレーブノード7002をメインノードに選択します.
    [root@localhost ~]# ps -ef | grep redis
    root      13288      1  0 17:01 ?        00:00:17 redis-server 192.168.92.101:7003 [cluster]
    root      13293      1  0 17:01 ?        00:00:18 redis-server 192.168.92.101:7004 [cluster]
    root      13298      1  0 17:01 ?        00:00:17 redis-server 192.168.92.101:7005 [cluster]
    root      13435  13417  0 19:29 pts/1    00:00:00 grep --color=auto redis
    [root@localhost ~]# kill 13288
    [root@localhost ~]# ps -ef | grep redis
    root      13293      1  0 17:01 ?        00:00:18 redis-server 192.168.92.101:7004 [cluster]
    root      13298      1  0 17:01 ?        00:00:18 redis-server 192.168.92.101:7005 [cluster]
    root      13437  13417  0 19:30 pts/1    00:00:00 grep --color=auto redis

    クラスタ内の7003ノードの再表示
    [root@localhost ~]# redis-cli --cluster check 192.168.92.101:7003
    Could not connect to Redis at 192.168.92.101:7003: Connection refused
    [root@localhost ~]# redis-cli --cluster check 192.168.92.100:7002
    Could not connect to Redis at 192.168.92.101:7003: Connection refused
    192.168.92.100:7002 (b8b90944...) -> 1 keys | 5462 slots | 0 slaves.
    192.168.92.100:7001 (4cbdd0a0...) -> 0 keys | 5461 slots | 1 slaves.
    192.168.92.100:7000 (5c55309b...) -> 0 keys | 5461 slots | 1 slaves.
    [OK] 1 keys in 3 masters.
    0.00 keys per slot on average.
    >>> Performing Cluster Check (using node 192.168.92.100:7002)
    M: b8b90944c7c65511da0d0b04004d502015f599dc 192.168.92.100:7002
       slots:[5461-10922] (5462 slots) master
    S: 57b19e309ec580857968f113de4bd2b77aa05ac1 192.168.92.101:7005
       slots: (0 slots) slave
       replicates 4cbdd0a0b1a8e9334ad97a3df577e8ab365e4f7a
    S: 60818181c7a6bb007b3628ef4adf84678359f613 192.168.92.101:7004
       slots: (0 slots) slave
       replicates 5c55309b5a1cd704a056cf80be308964e757f7a1
    M: 4cbdd0a0b1a8e9334ad97a3df577e8ab365e4f7a 192.168.92.100:7001
       slots:[10923-16383] (5461 slots) master
       1 additional replica(s)
    M: 5c55309b5a1cd704a056cf80be308964e757f7a1 192.168.92.100:7000
       slots:[0-5460] (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.

    クラスタは7003ノードに接続されず,7002は元のSからMノードに変換され,元の7003ノードに代わっていることがわかる.
    最後の説明があるすべてのハッシュスロットがカバーされています.
    name値を取得できます.
    [root@localhost ~]# redis-cli -c -h 192.168.92.100 -p 7000
    192.168.92.100:7000> get name
    -> Redirected to slot [5798] located at 192.168.92.100:7002
    "andy"
    192.168.92.100:7002>

    7000ノードから接続し、7002ノードに自動的にジャンプし、name値を取得します.
    7003ノードを復元し、クラスタに自動的に追加されるかどうか、およびMノードとして機能するかSノードとして機能するかどうかを確認します.
    [root@localhost 7003]# redis-server redis.conf 
    13451:C 15 Feb 2019 19:43:36.259 # oO0OoO0OoO0Oo Redis is starting oO0OoO0OoO0Oo
    13451:C 15 Feb 2019 19:43:36.260 # Redis version=5.0.3, bits=64, commit=00000000, modified=0, pid=13451, just started
    13451:C 15 Feb 2019 19:43:36.260 # Configuration loaded

    7003ノードを再チェック
    [root@localhost redis_cluster]# redis-cli --cluster check 192.168.92.101:7003
    192.168.92.100:7000 (7980a27f...) -> 3 keys | 5461 slots | 1 slaves.
    192.168.92.100:7001 (255fe370...) -> 0 keys | 5461 slots | 1 slaves.
    192.168.92.100:7002 (5ad1bc99...) -> 2 keys | 5462 slots | 1 slaves.
    [OK] 5 keys in 3 masters.
    0.00 keys per slot on average.
    >>> Performing Cluster Check (using node 192.168.92.101:7003)
    S: 391fb1127f7ccc30472d3761719272aa1dbe38f1 192.168.92.101:7003
       slots: (0 slots) slave
       replicates 5ad1bc995f4af9c2d8aa862ec3d5902633a29b54
    M: 7980a27ff9c1f37d8f185c1419b0445b9da1a32b 192.168.92.100:7000
       slots:[0-5460] (5461 slots) master
       1 additional replica(s)
    S: 0b05268b52f540dddcfe17f56e17d97eb41b759f 192.168.92.101:7004
       slots: (0 slots) slave
       replicates 7980a27ff9c1f37d8f185c1419b0445b9da1a32b
    S: 9adfa4f073c0949861559de79cc19a4fba368307 192.168.92.101:7005
       slots: (0 slots) slave
       replicates 255fe37083527c29fc352486880ecad297d5ff58
    M: 255fe37083527c29fc352486880ecad297d5ff58 192.168.92.100:7001
       slots:[10923-16383] (5461 slots) master
       1 additional replica(s)
    M: 5ad1bc995f4af9c2d8aa862ec3d5902633a29b54 192.168.92.100:7002
       slots:[5461-10922] (5462 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.

    7003ノードが5 ad 1 bc 995 f 4 af 9 c 2 d 8 aa 862 ec 3 d 5902633 a 29 b 54 7002のスレーブノードになったことがわかる.
    補足:
    1.ノードのfail
    ノードのfailはクラスタの半数以上のノードで検出されて無効になった場合に有効になります.ここで選挙がトリガーされ、slaveをmasterにアップグレードします.
    2.クラスタのfail
  • クラスタが任意のmasterで停止する場合、現在のmasterにslave eがない.クラスタがfail状態に入ると、クラスタに入るslotマッピング[0-16383]が不完全な場合にfail状態に入ると理解される(redis-3.0.0.rc1cluster-require-full-coverageパラメータを加え、デフォルトで閉じ、クラスタ互換性部分を開くのに失敗する).
  • クラスタが半数以上masterを切ると、slaveクラスタがfail状態に入るかどうかにかかわらず.

  • 三、ノードの追加

    1.プライマリノードの追加


    更新する...

    2.スレーブノードの追加


    更新する...

    四、ノードの除去


    1.マスターノードの削除


    更新する...

    2.スレーブノードの削除


    更新する...