クラスタ--Redisクラスタの構築(実際の運用におけるデータの読み書き状況、障害発生後のデータの読み書き状況)
43461 ワード
文書ディレクトリ
前言
前回は単一ノードRedisサーバの構築について説明したが、単一ノードRedisサーバで発生する問題:単一の障害、サービスが利用できず、大量の同時データ要求を処理できず、データが失われた場合、Redisクラスタを構築する必要がある
一、Redisクラスタ
1.1 Redisクラスタの説明
●Redisクラスタは、複数のRedis間ノード間でデータを共有するプログラムセットである
●Redisクラスタでは、複数のkeysを扱うコマンドはサポートされていません.これは、異なるノード間でデータを移動する必要があるため、Redisのようなパフォーマンスが得られず、高負荷の場合、予期せぬエラーが発生する可能性があります.
●Redisクラスタは、パーティション化によってある程度の可用性を提供し、実際の環境において、あるノードがダウンタイムした場合、または到達できない場合、コマンドの処理を継続することができる
1.2 Redisクラスタの利点
●異なるノードへのデータの自動分割
●クラスタ全体のノードの一部が失敗したり、到達できなかったりした場合にコマンドの処理を継続できる
1.3 Redisクラスタの実装方法
●クライアントスライス
●エージェントスライス
●サーバ側スライス
1.4 Redis-CRusterデータスライス
●Redisクラスタはコンシステンシhashを用いずハッシュスロット概念を導入した
●Redisクラスタには16384個のハッシュスロットがある
●各keyは、CRC 16検査後に16384を型抜きすることにより配置溝を決定する
●クラスタの各ノードはハッシュスロットの一部を担当する
●3ノードからなるクラスタを例に
●ノードAはО5500番ハーシースロットへ
●ノードBは、5501〜11000番のハッシースロットを含む
●ノードCは11001から16384番のハッシースロットを含む
●ノードの追加または削除をサポート
●削除ノードの追加サービス停止不要
たとえば
●新たにノードDを追加する場合は、ノードA,B,Cの一部をDに移動する
・ノードAを除去するには、AのスロットをBおよびCノードに移動し、スロットのないAノードをクラスタから除去する必要がある
1.5 Redis-CRusterのマスターコピーモデル
●クラスタにはA,B,Cの3つのノードがあり、ノードBが失敗すると、クラスタ全体が5501-1000という範囲のスロットが欠けて使用できなくなる
・各ノードにスレーブノードA 1,B 1,C 1を追加すると、クラスタ全体に3つのマスターノードと3つのslaveノードが構成され、ノードBが失敗すると、クラスタはB 1を新しいマスターノードに選択してサービスを継続する
●BとB 1の両方が失敗すると、クラスタは使用できなくなる
二、Redisクラスタ構築
2.1実験環境
マスターサーバ3台
192.168.100.100;192.168.100.128;192.168.100.129
slaveサーバ3台
192.168.100.8;192.168.100.130;192.168.100.131
2.2構築プロセス
Redisデータベースのインストール(6つのノードの操作と同じように、詳細は前回のブログを参照してください)https://blog.csdn.net/weixin_47151650/article/details/108473001 [root@localhost mnt]# yum install gcc gcc-c++ -y
[root@localhost mnt]# tar zxvf redis-5.0.7.tar.gz -C /opt
[root@localhost mnt]# cd /opt/redis-5.0.7/
[root@localhost redis-5.0.7]# make
[root@localhost redis-5.0.7]# make PREFIX=/usr/local/redis/ install
[root@localhost redis-5.0.7]# cd utils/
[root@localhost utils]# ./install_server.sh
Welcome to the redis service installer
This script will help you easily set up a running redis server
Please select the redis port for this instance: [6379]
Selecting default: 6379
Please select the redis config file name [/etc/redis/6379.conf]
Selected default - /etc/redis/6379.conf
Please select the redis log file name [/var/log/redis_6379.log]
Selected default - /var/log/redis_6379.log
Please select the data directory for this instance [/var/lib/redis/6379]
Selected default - /var/lib/redis/6379
Please select the redis executable path [] /usr/local/redis/bin/redis-server
Selected config:
Port : 6379
Config file : /etc/redis/6379.conf
Log file : /var/log/redis_6379.log
Data dir : /var/lib/redis/6379
Executable : /usr/local/redis/bin/redis-server
Cli Executable : /usr/local/redis/bin/redis-cli
Is this ok? Then press ENTER to go on or Ctrl-C to abort.
Copied /tmp/6379.conf => /etc/init.d/redis_6379
Installing service...
Successfully added to chkconfig!
Successfully added to runlevels 345!
Starting Redis server...
Installation successful!
[root@localhost utils]# ln -s /usr/local/redis/bin/ * /usr/local/bin/
[root@localhost utils]# netstat -natp | grep 6379
tcp 0 0 127.0.0.1:6379 0.0.0.0:* LISTEN 24447/redis-server
プライマリサーバプロファイルの変更(6ノードとも同じ)[root@localhost utils]# vim /etc/redis/6379.conf ' '
70 #bind 127.0.0.1 ' 70 127 , '
89 protected-mode no ' 89 '
93 port 6379 ' 93 , 6379'
137 daemonize yes ' 137 , '
700 appendonly yes ' 700 , aof '
833 cluster-enabled yes ' 833 , '
841 cluster-config-file nodes-6379.conf ' 841 , '
847 cluster-node-timeout 15000 ' 847 , '
[root@localhost utils]# service redis_6379 restart ' redis '
[root@localhost utils]# cd /var/lib/redis/6379/
[root@localhost 6379]# ls
appendonly.aof dump.rdb nodes-6379.conf
' ,appendonly.aof AOF ,dump.rdb RDB ,nodes-6379.conf '
メインサーバはrvmをインストールして、RUBYはクラスタソフトウェアを制御します[root@master01 6379]# gpg --keyserver hkp://keys.gnupg.net --recv-keys 409B6B1796C275462A1703113804BB82D39DC0E3
' key , error, '
[root@master01 6379]# curl -sSL https://get.rvm.io | bash -s stable ' rvm'
[root@master01 opt]# ./rvm-installer.sh
[root@master01 opt]# source /etc/profile.d/rvm.sh ' '
[root@master01 opt]# rvm list known ' ruby '
# MRI Rubies
[ruby-]1.8.6[-p420]
[ruby-]1.8.7[-head] # security released on head
[ruby-]1.9.1[-p431]
[ruby-]1.9.2[-p330]
[ruby-]1.9.3[-p551]
[ruby-]2.0.0[-p648]
[ruby-]2.1[.10]
[ruby-]2.2[.10]
[ruby-]2.3[.8]
[ruby-]2.4[.10]
[ruby-]2.5[.8]
[ruby-]2.6[.6]
[ruby-]2.7[.1]
ruby-head
[root@master01 opt]# rvm install 2.4.10 ' ruby2.4.10 , '
[root@master01 opt]# ruby -v ' ruby '
ruby 2.4.10p364 (2020-03-31 revision 67879) [x86_64-linux]
[root@master01 opt]# rvm use 2.4.10 ' Ruby2.4.10 '
Using /usr/local/rvm/gems/ruby-2.4.10
[root@master01 opt]# gem install redis ' Redis'
Fetching redis-4.2.2.gem
Successfully installed redis-4.2.2
Parsing documentation for redis-4.2.2
Installing ri documentation for redis-4.2.2
Done installing documentation for redis after 0 seconds
1 gem installed
プライマリ・サーバ上のクラスタの作成[root@localhost profile.d]# redis-cli --cluster create 192.168.100.100:6379 192.168.100.128:6379 192.168.100.129:6379 192.168.100.8:6379 192.168.100.130:6379 192.168.100.131:6379 --cluster-replicas 1
>>> 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.100.130:6379 to 192.168.100.100:6379
Adding replica 192.168.100.131:6379 to 192.168.100.128:6379
Adding replica 192.168.100.8:6379 to 192.168.100.129:6379
M: 1daf95d3008b5a070c698a677ff14271630c90b6 192.168.100.100:6379
slots:[0-16383] (5461 slots) master
M: 1daf95d3008b5a070c698a677ff14271630c90b6 192.168.100.128:6379
slots:[0-16383] (5462 slots) master
M: 1daf95d3008b5a070c698a677ff14271630c90b6 192.168.100.129:6379
slots:[0-16383] (5461 slots) master
S: 1d51bf7d5e95b14216c0d2f7a448c97c815f7895 192.168.100.8:6379
replicates 1daf95d3008b5a070c698a677ff14271630c90b6
S: 1d51bf7d5e95b14216c0d2f7a448c97c815f7895 192.168.100.130:6379
replicates 1daf95d3008b5a070c698a677ff14271630c90b6
S: 1d51bf7d5e95b14216c0d2f7a448c97c815f7895 192.168.100.131:6379
replicates 1daf95d3008b5a070c698a677ff14271630c90b6
Can I set the above configuration? (type 'yes' to accept): 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 192.168.100.100:6379)
M: 1daf95d3008b5a070c698a677ff14271630c90b6 192.168.100.100:6379
slots:[0-16383] (16384 slots) master
1 additional replica(s)
S: 1d51bf7d5e95b14216c0d2f7a448c97c815f7895 192.168.100.8:6379
slots: (0 slots) slave
replicates 1daf95d3008b5a070c698a677ff14271630c90b6
[OK] All nodes agree about slots configuration.
>>> Check for open slots...
>>> Check slots coverage...
[OK] All 16384 slots covered.
2.3クラスタ機能の検証
[root@master01 ~]# redis-cli -c -h 192.168.100.100 ' master01'
192.168.100.100:6379> keys *
(empty list or set)
192.168.100.100:6379> set name zhangsan ' '
-> Redirected to slot [5798] located at 192.168.100.128:6379 ' master02'
OK
192.168.100.128:6379> set addr nanjing ' master02, '
-> Redirected to slot [12790] located at 192.168.100.129:6379 ' master03'
OK
[root@slave03 6379]# redis-cli -c -h 192.168.100.130 ' master02 slave'
192.168.100.130:6379> keys * ' , '
1) "name"
192.168.100.130:6379> get name
-> Redirected to slot [5798] located at 192.168.100.129:6379 ' master02 '
"zhangsan"
[root@slave01 6379]# redis-cli -c -h 192.168.100.131 ' master03 slave'
192.168.100.131:6379> keys * ' , '
1) "addr"
192.168.100.131:6379> get addr
-> Redirected to slot [12790] located at 192.168.100.129:6379 ' master03 '
"nanjing"
2.4マスターサーバのダウンタイムのシミュレーション
[root@master03 6379]# service redis_6379 stop ' master03'
Stopping ...
Waiting for Redis to shutdown ...
Redis stopped
[root@slave01 6379]# redis-cli -c -h 192.168.100.131 ' master03 slave'
192.168.100.131:6379> keys * ' , '
1) "addr"
192.168.100.131:6379> get addr
"nanjing"
[root@master02 ~]# redis-cli -c -h 192.168.100.128 ' master02'
192.168.100.100:6379> set age 20 ' , master01'
-> Redirected to slot [741] located at 192.168.100.128:6379
OK
192.168.179.124:6379> set team yun ' , master03 slave'
-> Redirected to slot [15631] located at 192.168.179.126:6379
OK
192.168.100.131:6379> keys * ' master03 slave, '
1) "team"
2) "addr"
192.168.100.131:6379> get team ' '
"yun"
2.5まとめ
Redisクラスタでは、3つのmaster間で順次データを書き込み、それぞれのslaveでデータをコピーし、1台のmasterがダウンタイムした後、そのslaveに代わってデータの読み書き作業を行う
1.1 Redisクラスタの説明
●Redisクラスタは、複数のRedis間ノード間でデータを共有するプログラムセットである
●Redisクラスタでは、複数のkeysを扱うコマンドはサポートされていません.これは、異なるノード間でデータを移動する必要があるため、Redisのようなパフォーマンスが得られず、高負荷の場合、予期せぬエラーが発生する可能性があります.
●Redisクラスタは、パーティション化によってある程度の可用性を提供し、実際の環境において、あるノードがダウンタイムした場合、または到達できない場合、コマンドの処理を継続することができる
1.2 Redisクラスタの利点
●異なるノードへのデータの自動分割
●クラスタ全体のノードの一部が失敗したり、到達できなかったりした場合にコマンドの処理を継続できる
1.3 Redisクラスタの実装方法
●クライアントスライス
●エージェントスライス
●サーバ側スライス
1.4 Redis-CRusterデータスライス
●Redisクラスタはコンシステンシhashを用いずハッシュスロット概念を導入した
●Redisクラスタには16384個のハッシュスロットがある
●各keyは、CRC 16検査後に16384を型抜きすることにより配置溝を決定する
●クラスタの各ノードはハッシュスロットの一部を担当する
●3ノードからなるクラスタを例に
●ノードAはО5500番ハーシースロットへ
●ノードBは、5501〜11000番のハッシースロットを含む
●ノードCは11001から16384番のハッシースロットを含む
●ノードの追加または削除をサポート
●削除ノードの追加サービス停止不要
たとえば
●新たにノードDを追加する場合は、ノードA,B,Cの一部をDに移動する
・ノードAを除去するには、AのスロットをBおよびCノードに移動し、スロットのないAノードをクラスタから除去する必要がある
1.5 Redis-CRusterのマスターコピーモデル
●クラスタにはA,B,Cの3つのノードがあり、ノードBが失敗すると、クラスタ全体が5501-1000という範囲のスロットが欠けて使用できなくなる
・各ノードにスレーブノードA 1,B 1,C 1を追加すると、クラスタ全体に3つのマスターノードと3つのslaveノードが構成され、ノードBが失敗すると、クラスタはB 1を新しいマスターノードに選択してサービスを継続する
●BとB 1の両方が失敗すると、クラスタは使用できなくなる
二、Redisクラスタ構築
2.1実験環境
マスターサーバ3台
192.168.100.100;192.168.100.128;192.168.100.129
slaveサーバ3台
192.168.100.8;192.168.100.130;192.168.100.131
2.2構築プロセス
Redisデータベースのインストール(6つのノードの操作と同じように、詳細は前回のブログを参照してください)https://blog.csdn.net/weixin_47151650/article/details/108473001 [root@localhost mnt]# yum install gcc gcc-c++ -y
[root@localhost mnt]# tar zxvf redis-5.0.7.tar.gz -C /opt
[root@localhost mnt]# cd /opt/redis-5.0.7/
[root@localhost redis-5.0.7]# make
[root@localhost redis-5.0.7]# make PREFIX=/usr/local/redis/ install
[root@localhost redis-5.0.7]# cd utils/
[root@localhost utils]# ./install_server.sh
Welcome to the redis service installer
This script will help you easily set up a running redis server
Please select the redis port for this instance: [6379]
Selecting default: 6379
Please select the redis config file name [/etc/redis/6379.conf]
Selected default - /etc/redis/6379.conf
Please select the redis log file name [/var/log/redis_6379.log]
Selected default - /var/log/redis_6379.log
Please select the data directory for this instance [/var/lib/redis/6379]
Selected default - /var/lib/redis/6379
Please select the redis executable path [] /usr/local/redis/bin/redis-server
Selected config:
Port : 6379
Config file : /etc/redis/6379.conf
Log file : /var/log/redis_6379.log
Data dir : /var/lib/redis/6379
Executable : /usr/local/redis/bin/redis-server
Cli Executable : /usr/local/redis/bin/redis-cli
Is this ok? Then press ENTER to go on or Ctrl-C to abort.
Copied /tmp/6379.conf => /etc/init.d/redis_6379
Installing service...
Successfully added to chkconfig!
Successfully added to runlevels 345!
Starting Redis server...
Installation successful!
[root@localhost utils]# ln -s /usr/local/redis/bin/ * /usr/local/bin/
[root@localhost utils]# netstat -natp | grep 6379
tcp 0 0 127.0.0.1:6379 0.0.0.0:* LISTEN 24447/redis-server
プライマリサーバプロファイルの変更(6ノードとも同じ)[root@localhost utils]# vim /etc/redis/6379.conf ' '
70 #bind 127.0.0.1 ' 70 127 , '
89 protected-mode no ' 89 '
93 port 6379 ' 93 , 6379'
137 daemonize yes ' 137 , '
700 appendonly yes ' 700 , aof '
833 cluster-enabled yes ' 833 , '
841 cluster-config-file nodes-6379.conf ' 841 , '
847 cluster-node-timeout 15000 ' 847 , '
[root@localhost utils]# service redis_6379 restart ' redis '
[root@localhost utils]# cd /var/lib/redis/6379/
[root@localhost 6379]# ls
appendonly.aof dump.rdb nodes-6379.conf
' ,appendonly.aof AOF ,dump.rdb RDB ,nodes-6379.conf '
メインサーバはrvmをインストールして、RUBYはクラスタソフトウェアを制御します[root@master01 6379]# gpg --keyserver hkp://keys.gnupg.net --recv-keys 409B6B1796C275462A1703113804BB82D39DC0E3
' key , error, '
[root@master01 6379]# curl -sSL https://get.rvm.io | bash -s stable ' rvm'
[root@master01 opt]# ./rvm-installer.sh
[root@master01 opt]# source /etc/profile.d/rvm.sh ' '
[root@master01 opt]# rvm list known ' ruby '
# MRI Rubies
[ruby-]1.8.6[-p420]
[ruby-]1.8.7[-head] # security released on head
[ruby-]1.9.1[-p431]
[ruby-]1.9.2[-p330]
[ruby-]1.9.3[-p551]
[ruby-]2.0.0[-p648]
[ruby-]2.1[.10]
[ruby-]2.2[.10]
[ruby-]2.3[.8]
[ruby-]2.4[.10]
[ruby-]2.5[.8]
[ruby-]2.6[.6]
[ruby-]2.7[.1]
ruby-head
[root@master01 opt]# rvm install 2.4.10 ' ruby2.4.10 , '
[root@master01 opt]# ruby -v ' ruby '
ruby 2.4.10p364 (2020-03-31 revision 67879) [x86_64-linux]
[root@master01 opt]# rvm use 2.4.10 ' Ruby2.4.10 '
Using /usr/local/rvm/gems/ruby-2.4.10
[root@master01 opt]# gem install redis ' Redis'
Fetching redis-4.2.2.gem
Successfully installed redis-4.2.2
Parsing documentation for redis-4.2.2
Installing ri documentation for redis-4.2.2
Done installing documentation for redis after 0 seconds
1 gem installed
プライマリ・サーバ上のクラスタの作成[root@localhost profile.d]# redis-cli --cluster create 192.168.100.100:6379 192.168.100.128:6379 192.168.100.129:6379 192.168.100.8:6379 192.168.100.130:6379 192.168.100.131:6379 --cluster-replicas 1
>>> 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.100.130:6379 to 192.168.100.100:6379
Adding replica 192.168.100.131:6379 to 192.168.100.128:6379
Adding replica 192.168.100.8:6379 to 192.168.100.129:6379
M: 1daf95d3008b5a070c698a677ff14271630c90b6 192.168.100.100:6379
slots:[0-16383] (5461 slots) master
M: 1daf95d3008b5a070c698a677ff14271630c90b6 192.168.100.128:6379
slots:[0-16383] (5462 slots) master
M: 1daf95d3008b5a070c698a677ff14271630c90b6 192.168.100.129:6379
slots:[0-16383] (5461 slots) master
S: 1d51bf7d5e95b14216c0d2f7a448c97c815f7895 192.168.100.8:6379
replicates 1daf95d3008b5a070c698a677ff14271630c90b6
S: 1d51bf7d5e95b14216c0d2f7a448c97c815f7895 192.168.100.130:6379
replicates 1daf95d3008b5a070c698a677ff14271630c90b6
S: 1d51bf7d5e95b14216c0d2f7a448c97c815f7895 192.168.100.131:6379
replicates 1daf95d3008b5a070c698a677ff14271630c90b6
Can I set the above configuration? (type 'yes' to accept): 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 192.168.100.100:6379)
M: 1daf95d3008b5a070c698a677ff14271630c90b6 192.168.100.100:6379
slots:[0-16383] (16384 slots) master
1 additional replica(s)
S: 1d51bf7d5e95b14216c0d2f7a448c97c815f7895 192.168.100.8:6379
slots: (0 slots) slave
replicates 1daf95d3008b5a070c698a677ff14271630c90b6
[OK] All nodes agree about slots configuration.
>>> Check for open slots...
>>> Check slots coverage...
[OK] All 16384 slots covered.
2.3クラスタ機能の検証
[root@master01 ~]# redis-cli -c -h 192.168.100.100 ' master01'
192.168.100.100:6379> keys *
(empty list or set)
192.168.100.100:6379> set name zhangsan ' '
-> Redirected to slot [5798] located at 192.168.100.128:6379 ' master02'
OK
192.168.100.128:6379> set addr nanjing ' master02, '
-> Redirected to slot [12790] located at 192.168.100.129:6379 ' master03'
OK
[root@slave03 6379]# redis-cli -c -h 192.168.100.130 ' master02 slave'
192.168.100.130:6379> keys * ' , '
1) "name"
192.168.100.130:6379> get name
-> Redirected to slot [5798] located at 192.168.100.129:6379 ' master02 '
"zhangsan"
[root@slave01 6379]# redis-cli -c -h 192.168.100.131 ' master03 slave'
192.168.100.131:6379> keys * ' , '
1) "addr"
192.168.100.131:6379> get addr
-> Redirected to slot [12790] located at 192.168.100.129:6379 ' master03 '
"nanjing"
2.4マスターサーバのダウンタイムのシミュレーション
[root@master03 6379]# service redis_6379 stop ' master03'
Stopping ...
Waiting for Redis to shutdown ...
Redis stopped
[root@slave01 6379]# redis-cli -c -h 192.168.100.131 ' master03 slave'
192.168.100.131:6379> keys * ' , '
1) "addr"
192.168.100.131:6379> get addr
"nanjing"
[root@master02 ~]# redis-cli -c -h 192.168.100.128 ' master02'
192.168.100.100:6379> set age 20 ' , master01'
-> Redirected to slot [741] located at 192.168.100.128:6379
OK
192.168.179.124:6379> set team yun ' , master03 slave'
-> Redirected to slot [15631] located at 192.168.179.126:6379
OK
192.168.100.131:6379> keys * ' master03 slave, '
1) "team"
2) "addr"
192.168.100.131:6379> get team ' '
"yun"
2.5まとめ
Redisクラスタでは、3つのmaster間で順次データを書き込み、それぞれのslaveでデータをコピーし、1台のmasterがダウンタイムした後、そのslaveに代わってデータの読み書き作業を行う
[root@localhost mnt]# yum install gcc gcc-c++ -y
[root@localhost mnt]# tar zxvf redis-5.0.7.tar.gz -C /opt
[root@localhost mnt]# cd /opt/redis-5.0.7/
[root@localhost redis-5.0.7]# make
[root@localhost redis-5.0.7]# make PREFIX=/usr/local/redis/ install
[root@localhost redis-5.0.7]# cd utils/
[root@localhost utils]# ./install_server.sh
Welcome to the redis service installer
This script will help you easily set up a running redis server
Please select the redis port for this instance: [6379]
Selecting default: 6379
Please select the redis config file name [/etc/redis/6379.conf]
Selected default - /etc/redis/6379.conf
Please select the redis log file name [/var/log/redis_6379.log]
Selected default - /var/log/redis_6379.log
Please select the data directory for this instance [/var/lib/redis/6379]
Selected default - /var/lib/redis/6379
Please select the redis executable path [] /usr/local/redis/bin/redis-server
Selected config:
Port : 6379
Config file : /etc/redis/6379.conf
Log file : /var/log/redis_6379.log
Data dir : /var/lib/redis/6379
Executable : /usr/local/redis/bin/redis-server
Cli Executable : /usr/local/redis/bin/redis-cli
Is this ok? Then press ENTER to go on or Ctrl-C to abort.
Copied /tmp/6379.conf => /etc/init.d/redis_6379
Installing service...
Successfully added to chkconfig!
Successfully added to runlevels 345!
Starting Redis server...
Installation successful!
[root@localhost utils]# ln -s /usr/local/redis/bin/ * /usr/local/bin/
[root@localhost utils]# netstat -natp | grep 6379
tcp 0 0 127.0.0.1:6379 0.0.0.0:* LISTEN 24447/redis-server
[root@localhost utils]# vim /etc/redis/6379.conf ' '
70 #bind 127.0.0.1 ' 70 127 , '
89 protected-mode no ' 89 '
93 port 6379 ' 93 , 6379'
137 daemonize yes ' 137 , '
700 appendonly yes ' 700 , aof '
833 cluster-enabled yes ' 833 , '
841 cluster-config-file nodes-6379.conf ' 841 , '
847 cluster-node-timeout 15000 ' 847 , '
[root@localhost utils]# service redis_6379 restart ' redis '
[root@localhost utils]# cd /var/lib/redis/6379/
[root@localhost 6379]# ls
appendonly.aof dump.rdb nodes-6379.conf
' ,appendonly.aof AOF ,dump.rdb RDB ,nodes-6379.conf '
[root@master01 6379]# gpg --keyserver hkp://keys.gnupg.net --recv-keys 409B6B1796C275462A1703113804BB82D39DC0E3
' key , error, '
[root@master01 6379]# curl -sSL https://get.rvm.io | bash -s stable ' rvm'
[root@master01 opt]# ./rvm-installer.sh
[root@master01 opt]# source /etc/profile.d/rvm.sh ' '
[root@master01 opt]# rvm list known ' ruby '
# MRI Rubies
[ruby-]1.8.6[-p420]
[ruby-]1.8.7[-head] # security released on head
[ruby-]1.9.1[-p431]
[ruby-]1.9.2[-p330]
[ruby-]1.9.3[-p551]
[ruby-]2.0.0[-p648]
[ruby-]2.1[.10]
[ruby-]2.2[.10]
[ruby-]2.3[.8]
[ruby-]2.4[.10]
[ruby-]2.5[.8]
[ruby-]2.6[.6]
[ruby-]2.7[.1]
ruby-head
[root@master01 opt]# rvm install 2.4.10 ' ruby2.4.10 , '
[root@master01 opt]# ruby -v ' ruby '
ruby 2.4.10p364 (2020-03-31 revision 67879) [x86_64-linux]
[root@master01 opt]# rvm use 2.4.10 ' Ruby2.4.10 '
Using /usr/local/rvm/gems/ruby-2.4.10
[root@master01 opt]# gem install redis ' Redis'
Fetching redis-4.2.2.gem
Successfully installed redis-4.2.2
Parsing documentation for redis-4.2.2
Installing ri documentation for redis-4.2.2
Done installing documentation for redis after 0 seconds
1 gem installed
[root@localhost profile.d]# redis-cli --cluster create 192.168.100.100:6379 192.168.100.128:6379 192.168.100.129:6379 192.168.100.8:6379 192.168.100.130:6379 192.168.100.131:6379 --cluster-replicas 1
>>> 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.100.130:6379 to 192.168.100.100:6379
Adding replica 192.168.100.131:6379 to 192.168.100.128:6379
Adding replica 192.168.100.8:6379 to 192.168.100.129:6379
M: 1daf95d3008b5a070c698a677ff14271630c90b6 192.168.100.100:6379
slots:[0-16383] (5461 slots) master
M: 1daf95d3008b5a070c698a677ff14271630c90b6 192.168.100.128:6379
slots:[0-16383] (5462 slots) master
M: 1daf95d3008b5a070c698a677ff14271630c90b6 192.168.100.129:6379
slots:[0-16383] (5461 slots) master
S: 1d51bf7d5e95b14216c0d2f7a448c97c815f7895 192.168.100.8:6379
replicates 1daf95d3008b5a070c698a677ff14271630c90b6
S: 1d51bf7d5e95b14216c0d2f7a448c97c815f7895 192.168.100.130:6379
replicates 1daf95d3008b5a070c698a677ff14271630c90b6
S: 1d51bf7d5e95b14216c0d2f7a448c97c815f7895 192.168.100.131:6379
replicates 1daf95d3008b5a070c698a677ff14271630c90b6
Can I set the above configuration? (type 'yes' to accept): 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 192.168.100.100:6379)
M: 1daf95d3008b5a070c698a677ff14271630c90b6 192.168.100.100:6379
slots:[0-16383] (16384 slots) master
1 additional replica(s)
S: 1d51bf7d5e95b14216c0d2f7a448c97c815f7895 192.168.100.8:6379
slots: (0 slots) slave
replicates 1daf95d3008b5a070c698a677ff14271630c90b6
[OK] All nodes agree about slots configuration.
>>> Check for open slots...
>>> Check slots coverage...
[OK] All 16384 slots covered.
[root@master01 ~]# redis-cli -c -h 192.168.100.100 ' master01'
192.168.100.100:6379> keys *
(empty list or set)
192.168.100.100:6379> set name zhangsan ' '
-> Redirected to slot [5798] located at 192.168.100.128:6379 ' master02'
OK
192.168.100.128:6379> set addr nanjing ' master02, '
-> Redirected to slot [12790] located at 192.168.100.129:6379 ' master03'
OK
[root@slave03 6379]# redis-cli -c -h 192.168.100.130 ' master02 slave'
192.168.100.130:6379> keys * ' , '
1) "name"
192.168.100.130:6379> get name
-> Redirected to slot [5798] located at 192.168.100.129:6379 ' master02 '
"zhangsan"
[root@slave01 6379]# redis-cli -c -h 192.168.100.131 ' master03 slave'
192.168.100.131:6379> keys * ' , '
1) "addr"
192.168.100.131:6379> get addr
-> Redirected to slot [12790] located at 192.168.100.129:6379 ' master03 '
"nanjing"
[root@master03 6379]# service redis_6379 stop ' master03'
Stopping ...
Waiting for Redis to shutdown ...
Redis stopped
[root@slave01 6379]# redis-cli -c -h 192.168.100.131 ' master03 slave'
192.168.100.131:6379> keys * ' , '
1) "addr"
192.168.100.131:6379> get addr
"nanjing"
[root@master02 ~]# redis-cli -c -h 192.168.100.128 ' master02'
192.168.100.100:6379> set age 20 ' , master01'
-> Redirected to slot [741] located at 192.168.100.128:6379
OK
192.168.179.124:6379> set team yun ' , master03 slave'
-> Redirected to slot [15631] located at 192.168.179.126:6379
OK
192.168.100.131:6379> keys * ' master03 slave, '
1) "team"
2) "addr"
192.168.100.131:6379> get team ' '
"yun"