最新のRedisクラスタ詳細構築チュートリアル
16090 ワード
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 ,
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は、次のように構成情報を出力します.
>>> 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
redis-3.0.0.rc1
はcluster-require-full-coverage
パラメータを加え、デフォルトで閉じ、クラスタ互換性部分を開くのに失敗する).三、ノードの追加
1.プライマリノードの追加
更新する...
2.スレーブノードの追加
更新する...
四、ノードの除去
1.マスターノードの削除
更新する...
2.スレーブノードの削除
更新する...